一、Ardinuo基础1. 褐色为系统命令(int,void,setup),蓝色为命令功能的开关(OUTPUT),黑色为变量。三、经典历程:打印出hello worldvoid setup() {Serial.begin(9600);}void loop(){Serial.println(“Hello world”);delay(1000);}四、Arduino 的数字输出Arduino的数字1/O被分成两个部分,其中每个部分都包含有6个可用的IO管构,即管脚2到管脚7和管脚8到管脚13.除了管脚13上接了一个1K的电阻之外,其他各个管脚都直接连接到ATmega上。我们可以利用个6位的数字跑马灯,来对Arduino数字yO的输出功能进行验证,以下是相应的原理图: 电路中在每个I/O管脚.上加的那个1K电阻被称为限流电阻,由于发光极管在电路中没有等效电阻值,使用限流电阻可以使元件上通过的电流不至于过大,能够起到保护的作用。 该工程对应的代码为: int startPin= 2;int endPin = 7;int index= 0;void setupO{ for (inti= startPin;i<= endPin;i++){ pinMode(i, OUTPUT); void loop(X{ for (inti= startPin;i<= endPin;i++){ digitalWrite(i, LOW);} digitalWrite(startPin + index, HIGH); index = (index + 1) %(endPin-startPin+1);delay(100);} 下载并运行该工程,连接在Arduino数字I/O管脚2到管脚7上的发光极管会依次点亮0.1秒,然后再熄灭。五、Arduino 的串口输入 串行通信是在实现在PC机与微控制器进行交互的最简单的办法。之前的PC机上一般都配有标准的RS-232或者RS-422接口来实现串行通信,但现在这种情况已经发生了一些改变 ,大家更倾向于使用USB这样一种更快速但同时也更加复杂的方式来实现串行通信。尽管在有些计算机上现在已经找不到RS-232或者RS-422接口了,但我们仍可以通过USB/串口或者PCMCIA/串口这样的转换器,在这些设备上得到传统的串口。 通过串口连接的Arduino在交互式设计中能够为PC机提供一种全新的交互方式,比如用PC机控制一些之前看来非常复杂的事情,像声音和视频等。很多场合中都要求Arduino能够通过串口接收来自于PC机的命令,并完成相应的功能,这可以通过Arduino语言中提供的Serial.read()函数来实现。 在这一实验中我们同样不需要任何额外的电路,而只需要用串口线将Arduino和PC机连起来就可以了,相应的Arduino工程代码为: int ledPin = 13;int val; void setup() { pinMode(ledPin, OUTPUT);Serial.begin(9600); void loop() { val = Serial.read();if(-1 != val) { if('H == val) { digitalWrite(ledPin, HIGH);delay(500); digitalWrite(ledPin, LOW); 把工程下载到Arduino模块中之后,在Arduino集成开发环境中打开串口监视器并将波特率设置为9600,然后向Arduino 模块发送字符H ,如下图所示: 该工程运行起来之后会不断调用Serial.read()函数从串口获得数据。Arduino 语言提供的这个函数是不阻塞的,也就是说不论串口,上是否真的有数据到达,该函数都会立 即返回,Serilread)函数每次只读取一个字节的数据 ,当串口上有数据到达的时候,该函数的返回值为到达的数据中第一个字符的 ASCIT码;当串口上没有数据到达的时候,该函数的返回值则为-1.Arduino语言的参考手册中没有对SerialLread()函数做过多的说明,我的个疑问是如果PC机一次发送的数据太多,Arduino是否提供相应的串口缓存功能来保证数据不会丢失? Arduino语言中提供的另外一个函数Srialallable(或许能够帮助我们用实验来进行验证: int ledPin = 13;//设定控制LED的数字IO管脚int val;void setup() {pinMode(ledPin,OUTPUT);//设定数字IO口的模式,output为输出Serial.begin(9600);}//设定波特率为9600void loop(){val=Serial.read();if(-1!=val){if(‘H’==val) {digitalWrite(ledPin,HIGH);//设定PIN5脚为HIGH=5v左右delay(500);digitalWrite(ledPin,LOW);//设定PIN5脚为LOW=0vSerial.print(“Available:”);Serial.println(Serial.available(),DEC);//返回串口缓冲区中当前剩下的字符个数。最多能够缓冲128个字节。 }}}函数Serialavailable()的功能是返回串口缓冲区中当前剩余的字符个数,按照Arduino提供的该函数的说明,串口缓冲区中最多能缓冲128个字节。我们可以一次给Arduino模块发送多个字符,来验证这一功能:在这一实验中,每当Arduino成功收到一 个字符H,连接在数字I/O端口管脚13上的发光二极管就会闪烁一次:六、Arduino的串口输出在许多实际应用场合中我们会要求在Arduino和其它设备之间实现相互通信,而最常见通常也是最简单的办法就是使用串行通信。在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。在PC机上上最常见的串行通信协议是RS-232串行协议,而在各种微控制器(单片机).上采用的则是TTl串行协议。由于这两者的电平有很大的不同,因此在实现PC机和微控制器的通信时,必须进行相应的转换。完成RS-232电平和TTL电平之间的转换- -般采用专用芯片,如MAX232等,但 在Arduino上是用相应的电平转换电路来完成的。 根据Arduino的原理图我们不难看出,ATmega的RX和TX引脚-方面直接接到了数字I/0端口的0号和1号管脚,另-方面又通过电平转换电路接到了串口的母头上。因此,当我们需要用Arduino与PC机通信时,可以用串口线将两者连接起来;当我们需要用Arduino与微控制器(如另一块Arduino )通信时,则可以用数字I/O端口的0号和1号管脚。 串行通信的难点在于参数的设置,如波特率、数据位、停止位等,在Arduino语言可以使用Serial.begin()函数来简化这一任务。 为了实现数据的发送,Arduino则提供了Srial,print()和Serial.printin()两个函数,它们的区别在于后者会在请求发送的数据后面加上换行符,以提高输出结果的可读性。 在这一实验中没有用到额外的电路,我们只需要用串口线将Arduino和PC机连起来就可以了,相应的代码为:void setup() {Serial.begin(9600);}void loop(){Serial.println(“Hello world”);delay(1000);} 在将工程下载到Arduino模块中之后,在Arduino集成开发环境的工具栏中单击"Serial Monitor"控制,打开串口监视器: 接着将波特率设置为9600,即保持与工程中的设置相-致:如果一-切正常,此时我们就可以在Arduino集成开发环境的Console窗口中看到串口上输出的数据了:为了检查串口上是否有数据发送,一个比较简单的办法是在数字 I/O端口的1号管脚(TX)和5V电源之间接一个发光极管这样一-旦 Arduino在通过串口向PC机发送数据时,相应的发光二极管就会闪烁,实际应用中这是一个非常方便的调试手段。七、Arduino 的模拟输入 从指定的模拟引脚读取值。Arduino 主板有6个通道( Mini和Nano有8个,Mega有16个),10位AD (模数)转换器。这意味着输入电压0-5伏对应0-1023的整数值。这就是说读取精度为: 5伏/1024个单位,约等于每个单位0.049伏(4.9毫伏).输入范围和进度可以通过analogReference(进行修改。 模拟输入的读取周期为100微秒( 0.0001秒), 所以最大读取速度为每秒10,000次。pin :读取的模拟输入引脚号(大多数主板是A0-A5,Mini和Nano是A0-A7,Mega是A0-A15 )Returns返回值int (0 to 1023) 整数型int(0到1023) 如果模拟输入引脚没有连接到任何地方,analogRead()的返回值也会因为某些因素而波动(如其他模拟输入,手与主板靠的太近) int analogPin = A5;int val = 0;void setup(){ Serial.begin(9600);} void loop(){ val = analogRead(analogPin); Serial.println(val); delay(1000);}八、Arduino的模拟输出脉冲宽度调制或PWM,是通过数字均值获得模拟结果的技术,数字控制被用来创建一个方波 ,信号在开和关之间切换。这种开关模式通过改变“开"”时间段和关”时间段的比值完全横拟从开(5伏特)和关(0伏特)之间的电压。“开时间”的周期称为脉冲宽度。为了得到不同的模拟值,你可以更改,成调节脉冲宽度。如果你重复这种开关懂式速度足够快,其结果是一个介于0和5V之间的稳定电压用以控制LED的亮度,绿色线表示一个固定的时间期限。此持续时间或周期是PWM的频率的倒数。换言之,Arduino的PWM频率约为500Hz,每个绿线之间表示2毫秒,一个analogWrite ( )的调用区间为0- 255,例如analogWrite ( 255 )需要100%占空比(常开),和analogWrite ( 127 )是50%占空比(上一半运行中 ,抓住Arduino来回摇晃。这么做的实质上是时间跨越时空的映射。对于眼睛,每个运动模糊成一条线的LED闪烁。由于LED消失和缩小,那些小行的长度会增长和收缩。现在就可以看到脉冲宽度。将横投值(PWM波)输出到营脚。可用于在不同的光线亮度调节发光二极管亮度或以不同的速度驱动马达。调用alglirt)0,该引脚将产生一个指定占空比的稳定方波,直到下一次调用anagwrite) (或在同一脚调用digitalWrite()). PWM的信号频率约为490赫兹。在大多数Arduino板(带有ATmega168或ATmega328), 这个函数工作在引脚3,5,6,9,10和11.在ArduinoMega,它适用于2-13号引脚。老的带有ATmega8的Arduino板只支持9,10,11引脚上使用。你并不需要在调用analogWrite()之前为设置输入引脚而调用pinMode()。 这个analogWrite方法与模拟引脚或者analogRead方法毫不相干analogWrite(pin, value)Parameters参数pin :输出的引脚号value:占用空:从0(常关)到255 (常开)引脚5和6的PWM输出将产生高于预期的占空比。这是因为milli()和delay()函数,它们共享同一个内部定时器用于产生PWM输出所产生的相互作用。这提醒我们引脚5和6在多数低占空比的设置(如0- 10 )的情况下0数值的结果并没有完全关闭。int ledPin =3;int analogPin =A5;int val= 0;void setup(){ pinMode(ledPin, OUTPUT);}void loop(){val = analogRead(analogPin); analogWrite(ledPin, val/ 4);}2. setup() 函数在程序开始时使用,可以初始化变量、接口模式、启用库等(例如:pinMode(ledPin,OUTPUT);)。3. loop()在setup函数之后,即初始化后,loop()让你的程序循环地被执行。使用它来运转Ardinuo。二、Ardinuo简单函数1. pinMode(接口名称,OUTPUT或INPUT)将接口定义为输入或输出接口,用在setup函数里。2. digtalRead(读出接口数值) 3. digtalWrite(接口名称,HIGH或LOW)将数字接口值至高或低。4. ananlogwrite(接口名称,数值)给一个接口写入模拟值(pwm波)。5. ananlogRead(接口名称)从指定的模拟接口读取值,ardiuno对该模拟值进行10-bit的数字转换,这个方法将输入的0-5电压值转换为0到1023间的整数值、6. delay()延时,按毫秒为单位7. Serial.begin(波特率)设置串行每秒传输数据的速率(波特率)。在同计算机通讯时,使用下面这些值:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200.也可以在任何时候使用其他的值,比如,与0号或1号插口通信就要求特殊的波特率。用在setup函数中。8. Serial.read()读取持续输入的数据。9. Serial.print(数据,数据的进制)从串行端口输出数值。Serial.print(数据)默认为十进制等于serial.print(数据,DEC)。//DEC 十进制10. Serial.println(数据,数据的进制)从串口端口输出数据,跟随一个回车和一个换行符。这个函数所取得的值与serial.print()一样,但可以换行。
来源:CSDN
作者:熬夜耗子在线敲代码
链接:https://blog.csdn.net/weixin_46020788/article/details/104136151