Arduino知识集锦
- 格式:doc
- 大小:18.50 KB
- 文档页数:3
而当使用write()函数时,Arduino发送的是数值本身。
但是串口监视器接收到数据后,会将数值当做ASCLL码而显示其对应的字符。
总而言之,print是转换成ASCLL码才能发出去,就相当于中间介质。
而write是直接发送数据,不需要中间介质。
#define led1 9#define led2 8char val = '1';void setup() {Serial.begin(9600);pinMode(led1,OUTPUT);pinMode(led2,OUTPUT);}void loop() {if(Serial.available())val = Serial.read();if(val == '9'){digitalWrite(led1,HIGH);delay(1000);}elsedigitalWrite(led1,LOW);if(val == '8'){digitalWrite(led2,HIGH);delay(1000);}elsedigitalWrite(led2,LOW);}蓝牙模块:void setup(){Serial.begin(9600);}void loop(){while(Serial.available()){char c=Serial.read();if(c=='A'){Serial.println("Hello I am amarino");}}}2018.10.30下午建立多个软串口://主机程序#include <SoftwareSerial.h> SoftwareSerialportOne(2, 3); SoftwareSerialportTwo(4, 5);int mark,mark1;void setup(){Serial.begin(9600);while (!Serial){ }portOne.begin(9600);portTwo.begin(9600);}void loop(){//监听1号软串口portOne.listen();if(portOne.available()){Serial.println("Data from port one:"); delay(500); mark=1;}if(mark==1){int inByte1 = portOne.read();delay(2);Serial.println(inByte1);delay(1000);mark=0;}//监听2号软串口portTwo.listen();if(portOne.available()){Serial.println("Data from port two:"); delay(500);mark1=1;}if(mark1==1){int inByte2 = portOne.read();delay(2);Serial.println(inByte2);delay(1000);mark=0;}}//从机程序int i=9;void setup(){Serial.begin(9600);pinMode(13,OUTPUT);}void loop() {Serial.write(i); delay(1000);}。
Arduino认知这学期我们接触了一个新的课程——Arduino。
看着很难懂的一个名称,其实内容很有趣,过程很精彩,并且与上学期学的C语言有一定的相通之处,这给我们的学习过程减轻了很多难处。
这个学科我们一共做了11个实验,分别是光敏电阻、PWN脉宽调制、火焰传感器、4*4数码矩阵、温度传感器、4位数码管显示、人体传感器、RGB三色基LED、舵机控制、LCD1602、超声波测距。
每一个实验都都有不同的实验结果,会给我们带来不一样的体验,给我们增加了很多新奇的体验。
比如说,光敏电阻会因为光感的强弱来改变电阻的闪动频率;温度传感器可以检测到温度,改变呈现给我们数值;4位数码管显示器也很有意思,在程序上输入你想在数码管上显示的字母、数字,待程序完成并执行后就可以在数码管的液晶屏上看到你想呈现的东西;舵机控制的实验,可以看到舵机的螺旋桨转动;RGB三色基LED会出现红绿蓝三色接替闪烁,等等。
每完成一个实验,看到相应的实验结果就满满的成就感。
这里面的实验每一个都需要对应的程序来实现,所以我们每做一个实验的第一步就是敲程序,程序或多或少会有些枯燥,但一想到可以看不同的实验现象就会活力满满。
接下来就具体介绍以下Arduino的来源、作用及实用工具等。
Arduino是源于意大利的一套开源硬件开发平台,他的的作用是能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。
板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。
特色:可开放源代码的电路图设计,程序开发接口免费下载,也可依个人需求自己修改。
是使用低价格的微处理控制器(AVR系列控制器),可以采用USB接口供电,不需外接电源,也可以使用外部9VDC输入。
Arduino支持ISP在线烧,可以将新的“bootloader”固件烧入AVR芯片。
有了bootloader之后,可以通过串口或者USB to RS232线更新固件。
必须掌握的函数,一共只有十个,所以一定要记住,没有什么难的1.数字输入输出I/O·①pinMode(pin, mode)说明:数字IO 口输入输出模式定义函数,pin 表示为0~13,mode 表示为INPUT 或OUTPUT。
作用:负责某一接口是输入还是输出,INPUT输入·②digitalWrite(pin,value)说明:数字IO口输出电平定义函数,pin 表示为0~13,value为HIGH 或LOW。
作用:定义HIGH可以点亮接在相应pin上的灯。
·③int state=digitalRead(pin)说明:数字IO口读输入电平函数,pin 表示为0~13。
作用:读取接在pin脚上的按键或传感器的状态,state为状态值为HIGH 或LOW。
模拟输入输出I/O·④int val=analogRead(pin)说明:模拟IO口读函数,pin 表示为0~5作用:读模拟传感器的状态,比如说电位器的位置(val表示为0~1023)。
主函数⑤void setup() 初始化程序,每次开机只运行一次⑥void loop() 在setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。
使用它来运转Arduino。
连续执行函数内的语句,这部份的程式会一直重复的被执行,直到Arduino 板子被关闭。
⑦delay(100025); //设定延时时间,1000 = 1秒舵机控制⑧Servo myservo;说明:定义了使用的舵机的名字myservo,如用多个舵机,应起不同名字。
⑨myservo.attach(9);说明:放在setup()里,告诉单片机我的舵机接在那个引脚上了。
⑩myservo.write(pos);说明:放在loop()中,控制舵机运动到那个角度,pos从0到180。
arduino 学习笔记arduino 学习笔记 1 - 什么是 arduino?要了解arduino就先要了解什么是单片机,arduino平台的基础就是AVR 指令集的单片机。
1、什么是单片机?它与个人计算机有什么不同?一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU (进行运算、控制)、随机存储器RAM(数据存储)、存储器ROM(程序存储)、输入/输出设备I/O(串行口、并行输出口等)。
在个人计算机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。
而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如模拟量/数字量转换(A/D)和数字量/模拟量转换(D/A)等。
2、单片机有什么用?实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?应用的关键是看是否够用,是否有很好的性能价格比。
如果一台冰箱都需要用酷睿处理起来进行温度控制,那价格就是天价了。
单片机通常用于工业生产的控制、生活中与程序和控制有关(如:电子琴、冰箱、智能空调等)的场合。
下图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理器,频率20MHz,存储器空间32KB。
什么是 Arduino?Arduino 是一个能够用来感应和控制现实物理世界的一套工具。
它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序的开发环境组成。
Arduino 可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。
Arduino 项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如:Flash,Processing,MaxMSP)进行通讯。
Arduino板你可以选择自己去手动组装或是购买已经组装好的;Arduino开源的IDE可以免费下载得到。
Arduino语法详解_含⽰例详解Arduino 的程序可以划分为三个主要部分:结构、变量(变量与常量)、函数。
结构部分⼀、结构1.1 setup()1.2 loop()⼆、结构控制2.1 if2.2 if...else2.3 for2.4 switch case2.5 while2.6 do... while2.7 break2.8 continue2.9 return2.10 goto三、扩展语法3.1 ;(分号)3.2 {}(花括号)3.3 //(单⾏注释)3.4 /* */(多⾏注释)3.5 #define3.6 #include四、算数运算符4.1 =(赋值运算符)4.2 +(加)4.3 -(减)4.4 *(乘)4.5 /(除)4.6 %(模)五、⽐较运算符5.1 ==(等于)5.2 !=(不等于)5.3 <(⼩于)5.4 >(⼤于)5.5 <=(⼩于等于)5.6 >=(⼤于等于)六、布尔运算符6.1 &&(与)6.2 ||(或)6.3 !(⾮)七、指针运算符7.1 * 取消引⽤运算符7.2 & 引⽤运算符⼋、位运算符8.1 & (bitwise and)8.2 | (bitwise or)8.3 ^ (bitwise xor)8.4 ~ (bitwise not)8.5 << (bitshift left)8.6 >> (bitshift right)九、复合运算符9.1 ++ (increment)9.2 -- (decrement)9.3 += (compound addition)9.4 -= (compound subtraction)9.5 *= (compound multiplication)9.6 /= (compound division)9.6 &= (compound bitwise and)9.8 |= (compound bitwise or)变量部分⼗、常量10.1 HIGH|LOW(引脚电压定义)10.2 INPUT|OUTPUT(数字引脚(Digital pins)定义)10.3 true | false(逻辑层定义)10.4 integer constants(整数常量)10.5 floating point constants(浮点常量)⼗⼀、数据类型11.1 void11.2 boolean(布尔)11.3 char(有号数据类型)11.4 unsigned char(⽆符号数据类型)11.5 byte(⽆符号数)11.6 int(整型)11.7 unsigned int(⽆符号整型)11.8 word11.9 long(长整数型)11.10 unsigned long(⽆符号长整数型)11.11 float(浮点型数)11.12 double(双精度浮点数)11.13 string(char array/字符串)11.14 String object(String类)11.15 array (数组)⼗⼆、数据类型转换12.1 char()12.2 byte()12.3 int()12.4 word()12.5 long()12.6 float()⼗三、变量作⽤域 & 修饰符13.1 variable scope(变量的作⽤域)13.2 static(静态变量)13.3 volatile13.4 const⼗四、辅助⼯具14.1 sizeof()函数部分⼗五、数字 I/O15.1 pinMode()15.2 digitalWrite()15.3 digitalRead()⼗六、模拟 I/O16.1 analogReference() 16.2 analogRead()16.3 analogWrite() PWM ⼗七、⾼级 I/O17.1 tone()17.2 noTone()17.3 shiftOut()17.4 shiftIn()17.5 pulseIn()⼗⼋、时间18.1 millis()18.2 micros()18.3 delay()18.4 delayMicroseconds()⼗九、数学运算19.1 min()19.2 max()19.3 abs()19.4 constrain()19.5 map()19.6 pow()19.7 sqrt()19.8 ceil()19.9 exp()19.10 fabs()19.11 floor()19.12 fma()19.13 fmax()19.14 fmin()19.15 fmod()19.16 ldexp()19.17 log()19.18 log10()19.19 round()19.20 signbit()19.21 sq()19.22 square()19.23 trunc()⼆⼗、三⾓函数20.1 sin()20.2 cos()20.3 tan()20.4 acos()20.5 asin()20.6 atan()20.7 atan2()20.8 cosh()20.9 degrees()20.10 hypot()20.11 radians()20.12 sinh()20.13 tanh()⼆⼗⼀、随机数21.1 randomSeed()21.2 random()⼆⼗⼆、位操作22.1 lowByte()22.2 highByte()22.3 bitRead()22.4 bitWrite()22.5 bitSet()22.6 bitClear()22.7 bit()⼆⼗三、设置中断函数23.1 attachInterrupt()23.2 detachInterrupt()⼆⼗四、开关中断24.1 interrupts()(中断)24.2 noInterrupts()(禁⽌中断)⼆⼗五、通讯25.1 Serial25.1.1 if (Serial)25.1.2 Serial.available()25.1.3 Serial.begin()25.1.4 Serial.end()25.1.5 Serial.find()25.1.6 Serial.findUntil()25.1.7 Serial.flush()25.1.8 Serial.parseFloat()25.1.9 Serial.parseInt()25.1.10 Serial.peek()25.1.11 Serial.print()25.1.12 Serial.println()25.1.13 Serial.read()25.1.14 Serial.readBytes()25.1.15 Serial.readBytesUntil()25.1.16 Serial.setTimeout()25.1.17 Serial.write()25.1.18 Serial.SerialEvent()25.2 Stream⼆⼗六、USB(仅适⽤于 Leonardo 和 Due)26.1 Mouse(键盘)26.2 Keyboard(⿏标)以下是⽰例部分含详细注解结构部分⼀、结构1.1 setup()在Arduino中程序运⾏时将⾸先调⽤ setup() 函数。
Arduino编程基础入门第一章:什么是Arduino?Arduino是一种开源电子平台,它由一个硬件部分和一个软件部分组成。
Arduino硬件包括一个可以编程的微控制器,用于控制各种电子元件的操作。
Arduino软件则是用于编写和上传程序到Arduino硬件的集成开发环境(IDE)。
第二章:Arduino的组成部分Arduino板上有一个微控制器,这是Arduino的核心部分。
该微控制器可以通过Arduino IDE进行编程,并通过与电脑的连接来上传程序。
Arduino板上还有一些输入和输出引脚,可以连接各种传感器和执行器。
此外,Arduino板还包括一个供电接口和一个USB 接口。
第三章:Arduino的编程语言Arduino使用一种基于C++的编程语言,它简单易学,适合初学者。
与其他编程语言相比,Arduino的编程语言具有一些专门为微控制器开发设计的特性,如控制引脚、延时函数等。
通过编写程序,可以实现与各种外部设备的交互。
第四章:Arduino的开发环境Arduino开发环境(IDE)是一个用于编写、上传和调试Arduino程序的软件工具。
它提供了一个简单直观的界面,使得编程变得容易上手。
通过IDE,用户可以创建新的程序、编辑现有的程序,并将程序上传到Arduino板上。
IDE还提供了错误检查、调试功能等。
第五章:Arduino的基本语法Arduino的基本语法与C++类似,包括函数、变量、运算符等。
在编写Arduino程序时,需要了解一些基本的语法规则,如注释、变量声明、控制结构等。
掌握这些基本语法是学习Arduino编程的重要一步。
第六章:Arduino的输入与输出Arduino的输入输出是其最基本的功能之一。
通过连接各种传感器和执行器,可以实现与外部环境的交互。
例如,可以通过连接一个温度传感器来读取环境温度,并通过连接一个LED灯来控制其亮灭。
学习如何使用不同的输入输出引脚是使用Arduino的关键。
[Arduino]基础知识官⽹什么是 Arduino 的 bootloader?在arduino的板⼦上,作为核⼼的avr单⽚机往往都会烧录⼀个bootloader,这个叫做bootloader的东东其实是arduino研发团队针对arduino板⼦开发的⼀⼩段代码,借助于这段代码,我们可以在不⽤外部烧录⼯具的情况下来把我们⾃⼰的代码下载到AVR单⽚机中。
为了使⼀些朋友更容易理解,不妨打个⽐⽅,bootloader类似于我们电脑中的windows操作系统,⽽我们的代码则类似于运⾏于windows上的各种程序。
⼀般⽽⾔,arduino板的卖家都会把每块板的bootloader都烧好后再出售,这样买家直接收到板后就能够把⾃⼰在arduinoIDE中编写的程序借助PC的USB⼝来下载到arduino单⽚机内。
当然,下载bootloader是需要借助于外部下载器的,可⽀持的下载器不少,基中⽐较具有性价⽐的是usbtinyisp,在淘宝上很多店家都有出售,⽐如易捷机器⼈电路的价格就只有38元。
对于⼀般⽤户,因为在下载⾃⼰代码的时候偶尔会出现破坏bootloader的情况,就像PC的windows系统突然之间崩溃了⼀样。
这时候,就会需要⽤外部下载器来恢复这个bootloader,就相当于PC重装系统。
Arduino 中 serial.available() 和 serial.read() 的使⽤?Serial.available() 指返回串⼝缓冲区中当前剩余的字符个数。
⼀般⽤这个函数来判断串⼝的缓冲区有⽆数据,当Serial.available()>0时,说明串⼝接收到了数据,可以读取。
Serial.read() 指从串⼝的缓冲区取出并读取⼀个Byte的数据。
⽐如有设备通过串⼝向Arduino发送数据了,我们就可以⽤Serial.read()来读取发送的数据。
典型的⽤法如下:while (Serial.available()>0){data = Serial.read();delay(2);}上⾯代码的意思就是,当串⼝接收到数据时(上⾯Serial.available()>0这句),反复读取串⼝的数据并赋值给data (上⾯data= Serial.read()这句),直到数据读完(即Serial.available()=0的时候)。
Arduino 是一款价格不高、易于使用的电子平台。
包括硬件和软件在内的整个平台是完全开源的,并且使用的是松散地基于C/C++ 的语言。
Arduino 是为希望尝试创建交互式物理对象的实践者、喜欢创造发明的人以及艺术家构建的。
这个三部分系列将从基本的Arduino 硬件开始,并使用它创建名为“'Duino tag”的交互式激光游戏,玩家可以使用几乎从头开始构建的设备玩tag 游戏。
在“构建基于Arduino 的激光游戏”的第1 部分中,我们将构思作为'Duino tag 的一部分的基本预备试验。
开始之前无论您是Arduino 新手还是经验丰富的构建者,此项目都有适合您的内容。
没有比创建交互式物理对象更令人满意的事情了,因为在需要中断或者需要修改时,您知道所有部件的位置以及所有部件的工作原理。
'Duino tag 枪是适合独立完成或与朋友共同完成的优秀项目。
要完成此项目,您至少应当基本了解电子学(您应当知道寄存器是什么,但是不必知道其中的深奥原理)并且了解编程(您应当知道循环和变量是什么,但是您不必解析Big O Notation)。
您可以勇敢地进行动手实践。
关于本系列在本系列中,我们将使用Arduino 技术来创建名为'Duino tag 的基本交互式激光游戏:∙第1 部分:了解一些Arduino 基础知识,布置项目,并且做一个帮助您了解红外线工作原理的实验。
∙第2 部分:构建和测试'Duino tag 枪的接收器部分,包括测试。
∙第3 部分:构建发送器并完成'Duino tag 枪。
关于本教程要继续学习本教程,您无需具有任何电子学工作经验,尽管使用电子元件的经验肯定对您有用。
对于微控制器经验也是如此。
如果您使用过微控制器,则有一定的优势,但是记住Arduino 平台非常适合没有相应经验的人员。
首先,您应当愿意拓展自己的技能。
使用电子器件和微控制器会是一种有益的经验。
Arduino入门教程引言Arduino作为一种开源电子平台,已经广泛应用于各种领域,无论是学习电子基础知识还是 DIY 制作小玩具,Arduino 都是一个不错的选择。
本文将从硬件选购、开发环境搭建、基础编程语言以及实例应用等方面为读者介绍 Arduino 的入门知识。
一、硬件选购对于初学者来说,选择一款合适的 Arduino 开发板是至关重要的。
在市面上有各式各样的 Arduino 开发板可供选择,如 Arduino Uno、Arduino Nano、Arduino Mega等。
首先要考虑的是项目需求,确定所需的输入输出接口、处理器性能和存储容量等因素,然后再选择合适的开发板。
此外,应该选择正版的 Arduino 开发板,以确保质量和稳定性。
二、开发环境搭建在开始编程之前,需要搭建一个 Arduino 集成开发环境(IDE)。
首先,从Arduino 官网上下载最新版本的Arduino IDE,并根据操作系统进行安装。
搭建好开发环境后,可以将 Arduino开发板连接到电脑上,并选择正确的开发板和端口。
通过该IDE,可以编写、上传和调试 Arduino 的代码。
三、基础编程语言Arduino 的编程语言基于C/C++,但相对于传统的C/C++ 语言,Arduino 提供了更为简洁的函数库和接口,使得编程变得更加容易上手。
以下是一些基本语法和函数的介绍:1. 串口通信Arduino 通过串行通信口(Serial)与电脑进行通信。
通过使用Serial.begin() 函数来初始化串口,Serial.print() 和 Serial.println() 函数可用于向串口输出数据。
2. 控制结构Arduino 支持常见的控制结构,如 if 语句、for 循环和 while 循环等,这些控制结构可以用于条件判断和循环控制。
3. 数组和字符串Arduino 支持数组和字符串操作。
可以通过声明数组变量和使用 strcpy()、strcat() 等字符串函数进行操作。
#Arduino 语法
setup() 初始化函数
loop() 循环体函数
控制语句类似于C
.else for switch case while do... while break continue return g oto
扩展语法类似于C
当中断函数发生时,delya()和millis()的数值将不会继续变化。
当中断发生时,串口收到的数据可能会丢失。
你应该声明一个变量来在未发生中断时储存变量。
在单片机自动化程序中当突发事件发生时,中断是非常有用的,它可以帮助解决时序问题。
一个使用中断的任务可能会读一个旋转编码器,监视用户的输入。
如果你想以确保程序始终抓住一个旋转编码器的脉冲,从来不缺少一个脉冲,它将使写一个程序做任何事情都要非常棘手,因为该计划将需要不断轮询的传感器线编码器,为了赶上脉冲发生时。
其他传感器也是如此,如试图读取一个声音传感器正试图赶上一按,或红外线槽传感器(照片灭弧室),试图抓住一个硬币下降。
在所有这些情况下,使用一个中断可以释放的微控制器来完成其他一些工作。
例子:
int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
detachInterrupt()
关闭给定的中断
detachInterrupt(interrupt)
interrupt: 中断禁用的数(0或者1)
开关中断
interrupts()
重新启用中断(使用noInterrupts()命令后将被禁用)。
中断允许一些重要任务在后台运行,默认状态是启用的。
禁用中断后一些函数可能无法工作,并传入信息可能会被忽略。
中断会稍微打乱代码的时间,但是在关键部分可以禁用中断
noInterrupts()
禁止中断(重新使能中断interrupts())。
中断允许在后台运行一些重要任务,默认使能中断。
禁止中断时部分函数会无法工作,通信中接收到的信息也可能会丢失。
中断会稍影响计时代码,在某些特定的代码中也会失效
例子:
void setup()
void loop()
{
noInterrupts();
输出为“Hello world.”
也可以自己定义输出为几进制(格式);可以是BIN(二进制,或以2为基数),OCT(八进制,或以8为基数),DEC(十进制,或以10为基数),HEX(十六进制,或以16为基数)。
对于浮点型数字,可以指定输出的小数数位。
例如
(78,BIN)输出为“1001110”
(78,OCT)输出为“116”
(78,DEC)输出为“78”
(78,HEX)输出为“4E”
,0)输出为“1”
,2)输出为“”
,4)输出为“”
你可以通过基于闪存的字符串来进行打印输出,将数据放入F()中,再放入()。
例如(F(“Hello world”)) 若要发送一个字节,则使用()
(val)
(val,格式)
val:打印输出的值- 任何数据类型
格式:指定进制(整数数据类型)或小数位数(浮点类型)
例子:
int x = 0;
()返回放置在缓冲区的字符数。
返回0意味着没有发现有效的数据。
()继承自Stream 类
(buffer, length)
buffer:用来存储字节(char[]或byte[])的缓冲区
length:读取的字节数(int)
readBytesUntil()
()将字符从串行缓冲区读取到一个数组。
如果检测到终止字符,或预设的读取长度读取完毕,或者时间到了(参见())函数将终止。
()返回读入数组的字符数。
返回0意味着没有发现有效的数据。
()继承自Stream类
(character, buffer, length)
character :要搜索的字符(char)
buffer :缓冲区来存储字节(char[]或byte[])
length:读的字节数(int)
setTimeout()
()设置使用() 或()时等待串口数据的最大毫秒值. 默认为1000毫秒。
()继承自Stream 类
(time)
time :以毫秒为单位的超时时间(long)
write()
写入二级制数据到串口。
发送的数据以一个字节或者一系列的字节为单位。
如果写入的数字为字符,需使用print()命令进行代替
(val)
(str)
(buf, len)
Arduino Mega还支持:Serial1,Serial2,Serial3 (替代Serial)
val: 以单个字节形式发的值
str: 以一串字节的形式发送的字符串
buf: 以一串字节的形式发送的数组
len: 数组的长度
返回结果:
byte
write() 将返回写入的字节数,但是否使用这个数字是可选的SerialEvent()
Stream
USB(仅适用于Leonardo 和Due)
键盘
鼠标。