什么是arduino?
简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制,例如LED灯,蜂鸣器,按键
arduino程序
首先来讲arduino程序是基于C语言,而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语言知识即可实现。
arduino程序是基于函数的,而在arduino的库有很多函数,我们只需要调用即可。
arduino的程序主体是**setup()函数和loop()**函数以及其它在使用过程中需要构建的函数。
setup()函数
**setup()**函数主要功能是初始化变量,调用库函数,管理引脚等。
loop()函数
**loop()**函数的主要功能是循环的执行函数内的语句,简单来讲就是一个循环。
LED灯实验中用到的库函数
1.pinMode(pin,mode),数字I/O口输入输出定义函数,pin代表数字数字I/O输入输出端的1~13,mode表示输入(INPUT)输出(OUTPUT),例如你想实现从端口6输出信号,则代码是:
pinMode(6,OUTPUT);
2.digitalWrite(pin,vale),数字I/O口电平定义函数,pin同样代表1~13,vale代表HIGH(高电平)或LOW(低电平),对于LED灯来说,HIGH可使灯发光,LOW可使灯熄灭。例如想实现位于端口6的灯亮的代码是:
digitalWrite(6,HIGH);
3.delay(ms),延时函数,单位ms,可实现对命令的延迟,例如,实现亮灯500ms,就是让输出的高电平持续500ms,代码是:
delay(500);
4.analogWrite(pin,value);脉冲宽度调制技术
(1)作用:输出除了0V和5V之外的电压,产生一个十分接近于模拟信号的输出
(2)使用:通过带有"~"符号的端口输出,使用**analogWrite(pin,value)**函数输出模拟信号,pin代表引脚,value代表输出值(0-255)。
(3)原理:调制一串方波(只有开和关的信号)的占空比(一串方波中高低电平时间所占百分比),通过调控占空比就可以达到调控输出电压的值,例如
analogWrite(pin,127); 表示的时在引脚输出占空比为50%的方波,也就是输出2.5V的模拟电压。
analogWrite(pin,value);
5.digitalRead(pin)==vale(LOW or HIGH );数字I/O口电平读取函数,pin同样代表1~13,vale代表HIGH(高电平)或LOW(低电平),
digitalRead(BUTTON)==LOW
6.串口函数
(1)串口接收
在使用串口前,我们需要对串口的波特率也就是传输速度进行设置,需要用到函数 serial.begin(value),value即是设置波特率。
串口接收函数 serial.println(),在在函数中输入参数就可以使用串口输出了。
(2)串口发送
使用 serial.read()函数,它可以读取我们通过串口发送的信号
我们来实现一个简单的程序:当你通过串口发送任意信号时,让它输出
'"Hello,world"信号
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0){
char ch=Serial.read();
Serial.println("Hello, world")
}
}
我们注意到,在loop()函数使用了Serial.available()函数,在使用串口时ARDUINO会将所有数据暂时存放在缓冲区,而当串口缓冲区没有可读数据时,Serial.read()函数返回的值会造成乱码,时泳Serial.available()函数可以检测串口缓冲区是否有可读数据,搭配 if 语句时,有可读数据则再进行命令,还特别值得注意的是,在串口监视器的右下角有一个波特率设置,这里的波特率数值需要和前面定义的数值一致
(3)在串口发送字符控制灯的亮灭
程序如下:
int LED = 9;
void setup() //把你的设置代码放在这里,运行一次:
{
Serial.begin(9600);
pinMode(LED,OUTPUT);
}
void loop()
{
if(Serial.available()>0) //把你的主代码放在这里,重复运行:
{
char ch=Serial.read();
Serial.println(ch);
if (ch == 'A'){
digitalWrite(LED,HIGH);
Serial.println("turn on");
}
else if (ch == 'B'){
digitalWrite(LED,LOW);
Serial.println("turn off");
}
}
}
通过这个程序,当你向ARDUINO串口发送数据 ‘A’ 时,LED灯会亮起来,同时串口监视器会接收到一串"turn on"字符,再次发送 ‘B’ 时,LED灯会灭,同时发送"turn off"
运行结果如下
<1>匹配一个字符串并且输出相应的内容
我们知道,串口通讯函数serial.read() 的功能是从串口缓存区读取一个字符并将之删除,此时我的想法是构建一个 Str类,用+=语法将每次读取的一个字符存入一个变量为str的字符串中,那么代码如下
void loop(){
String str="";
while(Serial.available()>0){
char ch=Serial.read();
str +=ch;
}
Serial.print("input the str:");
Serial.println(str);
}
当我们向串口发送"hello"时,可以看到结果如下
(2)这个时候我又想到了用strcmp(str1,str2)函数,它的功能是对两个字符串进行比较,如果相等则返回"0”。好,我们
当我们再次向串口发送"hello"时,来看看运行结果:
(5)呼吸灯
(1)呼吸灯?那是啥?呃…就是从亮到暗从再从暗到亮,我们知道数字输出要么输出5V要么输出0V,那我们如果让输出的电压从0~5V一点一点的增加再一点一点的减少不就可以了吗?
(2)要实现这个目的,我们就要用到PWM波模拟值函数analogWrite(pin,value)函数了,他和digiralWrite(pin,value)用法一样,只是value值变成了0~255,映射到了0–5V,代码如下:
int LED=9;
void setup(){
pinMode(LED,OUTPUT);
}
void loop(){
for (int i=0;i<=255;i++){
digital.Write(LED,i);
delay(5);
}
for (int i=255;i>=0;i--){
digital.Write(LED,i);
delay(5);
}
}
(6)通过光敏电阻与程序实现对LED灯的控制
话不多说,上代码:
void setup()
{
pinMode(2,OUTPUT); //把你的设置代码放在这里,运行一次:
pinMode(4,OUTPUT);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
Serial.begin(9600);
digitalWrite(2,HIGH);
delay(500);
digitalWrite(4,HIGH);
delay(500);
}
void loop()
{
int a =analogRead(A0); //把你的主代码放在这里,重复运行:
int b= analogRead(A1);
if (a>b){
digitalWrite(2,LOW);
digitalWrite(4,HIGH);
delay(300);
}
else if(a<b){
digitalWrite(4,LOW);
digitalWrite(2,HIGH);
delay(300);
}
delay(500);
Serial.print("a: ");
Serial.println(a);
Serial.print("b: ");
Serial.println(b);
}
我们在这里用到了analogRead(pin)函数,它的功能是模拟输入,用于模拟输入引脚读取数值,可以将0–5V的电压映射到数值0–1023,也就是0V等于0,5V等于1023,
只需要测量两个光敏电阻上的电压大小,再进行比较就可以实现了,当左边电阻减小时,让右边亮起来,当右边电阻减小时,让左边亮起来,当我们挡住任意一边时,另一边永远都不会亮。
Arduino学习交流群:672088578
更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注: