Arduin学习笔记void setup{}函数初始化void loop{}函数循环pinMode(13,OUTPUT/INPUT)引脚13定义为输出、入模式digitalWrite(13,HIGH/LOW)13引脚输出高、低电平delay()延迟函数analogRead() 读取模拟量函数analogWrite()写入模拟量函数map()函数Serial.begin(波特率值)串口通信函数Serial.print()是输出你要的内容横排显示Serial.println()是输出要显示的内容后自动换行Arduino参考手册Arduino开发语言提供全部的C语言特性和C++语言的部分特性.通过链接到AVR的libc库online~,可以使用库中提供的函数.具体的应用细节请参考相关文档.程序结构在Arduino中, 标准的程序入口main函数在内部被定义,用户只需要关心以下两个函数:void setup()void loop()setup()函数用于初始化, loop()函数用于执行. 初始化函数一般放在程序开头, 用于设置一些引脚的输出/输入模式, 初始化串口通讯等类似工作. loop()函数中的代码将被循环执行, 例如: 读入引脚状态,设置引脚输出状态等.控制语句ifif...elseforswitchwhiledo...whilebreakcontinuereturngoto相关语法;(分号){}(大括号)// (单行注释)/* * /(多行注释)#define#include算术运算符= (赋值)+ (加)- (减)* (乘)/ (除)% (取模)比较运算符== (等于)!= (不等于)< (小于)> (大于)<=(小于等于) >= (大于等于)布尔运算符&& (逻辑与) || (逻辑或) ! (逻辑非)指针运算符* 指针运算符& 地址运算符位运算& (位与)| (位或)^ (位异或)~ (位非)<< (左移) >> (右移)端口操作复合运算符++ (自加)-- (自减)+= (复合加) -= (复合减) *= (复合乘) /= (复合除) &= (复合与) |= (复合或)变量常量HIGH|LOWINPUT|OUTPUTtrue|false整数常量浮点数常量数据类型void(无类型)boolean(布尔型)char(字符型)unsigned char(无符号字符型) byte(字节型)int(整型)unsigned int(无符号整型) long(长整型)unsigned long(符号长整型) float(单精度)double(双精度)string(字符串)array(数组)数据类型转换char()byte()int()word()long()float()变量作用域&修饰符变量作用域static (静态变量)volatile (易变变量)const (不可改变变量)辅助工具sizeof() (sizeof运算符) ASCII码表基本函数数字I/OpinMode(pin, mode) digitalWrite(pin, value) digitalRead(pin)模拟I/OanalogReference(type)analogRead(pin)analogWrite(pin, value)- PWM高级I/OshiftOut(dataPin, clockPin, bitOrder, val) pulseIn(pin, state, timeout)时间millis()delay(ms)delayMicroseconds(us)数学库min(x, y)max(x, y)abs(x)constrain(x, a, b)map(x, in_min, in_max, out_min, out_max) pow(base, exponent)sqrt(x)三角函数sin(rad)cos(rad)tan(rad)随机数randomSeed(seed)random(howbig)random(howsmall, howbig)位操作lowByte()highByte()bitRead()bitWrite()bitSet()bitClear()bit()设置中断函数attachInterrupt(interrupt, function, mode) detachInterrupt(interrupt)开关中断interrupts()noInterrupts()串口通讯Serial.begin(speed)Serial.available()Serial.read()Serial.flush()Serial.print(data)Serial.println(data)扩展库如果要使用一些已有的库, 可以选择菜"Sketch->Import Library", 然后选择相应的库. Sketch工具会自己在代码的开头包含库的头文件(#include). 在引入库之后, 程序的体积也将会因为包含了库的代码).对于不是必要的库, 直接删除对应的#include语句就可以了.官方扩展库以下是Arduino官方提供的扩展库, 被默认包含在开发工具中.EEPROM- 读写EEPROM存储区.Ethernet- 以太网支持.Firmata- 基于串口的通讯协议LiquidCrystal- LCD液晶显示Servo- 伺服电机.1.1点亮LEDint led=13........................................定义LED引脚位13引脚Void setup(){pinMode(led,OUTPUT);..........引脚13定义为输出模式(INTOUP输入)}Void loop(){digitalWrite(led,HIGH);..............写出的信号 13引脚高电平Delay(1000);.................................延迟1000毫秒=1秒 digitalWrite(led, LOW); // led引脚变为低电平delay(1000); // 延时1秒}1.2不使用延时函数的led闪烁程序这里闪烁led没有使用延时函数,使用了定时器的内容,阿德罗已经封装成了库,我们使用更简单// 定义引脚const int ledPin = 13; // led连接的引脚,标准的uno开发板上已经// 变量int ledState = LOW; // led状态,亮或者灭,可以修改long previousMillis = 0; // 存储最后一次的led状态// 这里使用了长整型变量,因为使用了ms,瞬间的数值变化非常大。
long interval = 1000; // 间隔闪烁的时间长度void setup(){// 初始化引脚输出模式pinMode(ledPin, OUTPUT);}void loop(){// 这里可以添加其他的程序unsigned long currentMillis = millis();if(currentMillis - previousMillis > interval){// 保存当前值,方便下次再次和当前时间比较previousMillis = currentMillis;// 如果led熄灭就把它点亮,反之亦然if (ledState == LOW)ledState = HIGH;elseledState = LOW;// 把对应的LED状态反应到led引脚上。
// 之前都是用变量再处理,处理完成后把最终结果输出到终端。
digitalWrite(ledPin, ledState);}}1.3简易流水灯// 引脚定义const int ledCount = 8; // led个数int ledPins[] = { 0,1,2, 3, 4, 5, 6, 7, }; // 对应的led引脚void setup(){// 循环设置,把对应的led都设置成输出for (int thisLed = 0; thisLed < ledCount; thisLed++)pinMode(ledPins[thisLed], OUTPUT);}}void loop(){// 熄灭所有led,不同的电路连接也会得到点亮所有ledfor (int num = 0; num < 8; num++){digitalWrite(ledPins[num], HIGH);}// 循环顺序点亮led然后等待200ms后熄灭for (int num = 0; num < 8; num++){digitalWrite(ledPins[num], LOW);delay(200);digitalWrite(ledPins[num], HIGH);// 这样就形成了简易的led流水效果}}2.1 利用A0输入的模拟量,控制led点亮状态,可以直观看到电压大小引脚定义Const int analogPin= A0;........模拟输入Const int ledCount = 8;........led个数Int ledPins[] = {0,1,2,3,4,5,6,7, }.....对应引脚Void setup(){For (int thisLed = 0;thisLed < ledCount;thisLed++).....循环设置,把对应的led设置成输出{pinMpde(ledPins[rhisLed],OUTPUT);}}Void loop(){int sensorReading = analogRead(analogPin);.......读取电位器的值 Int ledLevel = map(sensorReading ,0,1023,0,ledCount);.....吧对应的值转换成0-8}// 循环对比输出到led:for (int thisLed = 0; thisLed < ledCount; thisLed++) {if (thisLed < ledLevel) {digitalWrite(ledPins[thisLed], HIGH);}else {digitalWrite(ledPins[thisLed], LOW);}}}3.0读取端口端电平信号并输出到串口段/* 读取Pin2的电平信号,并把结果打印到串口,也同时反映到LED灯*/// 定义引脚int pushButton = 2;int led = 13;// 初始化void setup() {// 初始化串口Serial.begin(9600);// 把按键引脚设置为输入// 德飞莱增强版有高电平和低电平触发的2个按键,都可以使用,直接接KEY_H或者KEY_LpinMode(pushButton, INPUT); // 独立模块LY-51S开发板上独立按键K1-K8都可以使用。