Arduino 语言 Arduino 是由 C/C++ 混合编写而成。Arduino 语言也继承了 C/C++ 语言的语法。通常所说的 Arduino 语言,是指 Arduino 核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集合。
代码示例 Arduino 的基本程序由 setup()
和 loop()
组成,这两个函数是必须的。可以发现 Arduino 不像 C/C++ 语言一样包含 main()
函数。但是它也可以有头文件和自定义函数等要素。
void setup()
{
// 在这里加入你的setup代码,它只会运行一次:
}
void loop()
{
// 在这里加入你的loop代码,它会不断重复运行:
}
复制
/*
* State change detection: 检测按键按下的状态并累计次数
*/
// 定义端口
const int ledPin = 13;
const int buttonPin = 2;
// 设置变量
int currentButtonState = 0;
int lastButtonState = 0;
int count = 0;
void setup() {
// 初始化端口
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
// 设定串行通信的波特率
Serial.begin(9600);
}
void loop() {
// 读取按键端口数据
currentButtonState = digitalRead(buttonPin);
if (currentButtonState != lastButtonState){ // 检测按键状态是否与上一状态一样
if (currentButtonState == HIGH){ // 若不一样,则判断当前按键状态是否为按下
digitalWrite(ledPin, HIGH);
count++;
Serial.println("on");
Serial.println("the Count of Puches: ");
Serial.println(count);
}
else{
digitalWrite(ledPin, LOW);
Serial.println("off");
}
delay(100);
}
lastButtonState = currentButtonState;
}
复制
时间函数 Time Functions delay():
描述:将程序暂停给定参数的时间量(以毫秒为单位) 函数原型:delay(ms) 参数:ms - 暂停的毫秒数 返回值:无 millis():
描述:返回自Arduino板开始运行当前程序以来的毫秒数。大约50天后,此数字将溢出(回到零) 语法: time = millis() 参数:无 返回值:程序启动后的毫秒数(unsigned long 类型) 数字 I/O 函数 Digital I/O Functions pinMode() :
描述:将指定的引脚配置为输入或者输出的模式 函数原型:pinModel(pin,mode) 参数: pin:要设置其模式的引脚编号 mode:INPUT(输入模式),OUTPUT(输出模式),INPUT_PULLUP(上拉输入模式) 返回值:无 digitalRead():
描述:读取指定数字引脚的值 函数原型:digitalRead(pin) 参数:要读取的数字引脚的编号 返回值:HIGH(1),LOW(0) digitalWrite() :
描述:将数字 HIGH 或 LOW 的值写入数字引脚 函数原型:digitalWrite(pin,value) 参数: pin:要设置其输出的引脚编号 value:HIGH(1),LOW(0) 返回值:无 模拟 I/O 函数 Analog I/O Functions analogWrite():
描述:在指定引脚输出指定占空比的 PWM 方波 函数原型:analogWrite(pin,value) 参数: pin:输出引脚 value:占空比,介于 0 - 255 之间 返回值:无 analogRead():
描述:读取指定引脚的模拟信号值 函数原型:analogRead(pin) 参数: 返回值:无 在 analogWrite() 和 analogRead() 函数内部,已经完成了引脚的初始化,因此不用在 Setup() 函数中进行初始化操作。
数学函数 Math Functions map(): 描述:将数字从一个范围重新映射到另一个范围。 函数原型:map(value, fromLow, fromHigh, toLow, toHigh) 参数: value:要映射的数 fromLow:当前值范围的下限 fromHigh:当前值范围的下限 toLow:目标值范围的下限 toHigh:目标值范围的上限 返回值:映射后的值 /* Map an analog value to 8 bits (0 to 255) */
void setup() {}
void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
复制
注意: 不会将值限制在该范围内,因为超出范围的值有时是有意义且有用的。如果需要对范围进行限制,则可以在此函数之前或之后使用 constrain() 函数
constrain(): 描述:将数字约束在一个范围内。 函数原型:constrain(x, a, b) 参数: 返回值: 如果 x 在(a, b) 范围内:返回 x 如果 x 小于 a:返回 a 如果 x 大于 b:返回 b 通信串口 Serial 的函数 begin():
描述:设置串行数据传输的数据速率,以每秒位数(波特)为单位。 函数原型:Serial.begin(speed) / Serial.begin(speed, config) 参数: speed:比特每秒(波特) - long config:设置数据,奇偶校验和停止位 返回值:无 available():
描述:获取可从串行端口读取的字节数(字符数)。 函数原型: Serial.available() 参数:无 返回值:可读的字节数。 read():
描述:读取传入的串行数据。 函数原型:Serial.read() 参数:无 返回值:可用的传入串行数据的第一个字节(如果没有可用的数据,则为-1) - int print():
描述:在串行口以人们可以看懂的 ASSCII 码的形式打印数据。 函数原型:Serial.print(val) / Serial.print(val, format) 参数: val:要打印的值。 format:可选值,选择打印出的参数的类型。如:BIN(binary, or base 2), OCT(octal, or base 8), DEC(decimal, or base 10), HEX(hexadecimal, or base 16) 。 返回值:size_t:print() 返回写入的字节数,但读取该数字是可选的。 Serial.print(78, BIN) gives "1001110"
Serial.print(78, OCT) gives "116"
Serial.print(78, DEC) gives "78"
Serial.print(78, HEX) gives "4E"
Serial.print(1.23456, 0) gives "1"
Serial.print(1.23456, 2) gives "1.23"
Serial.print(1.23456, 4) gives "1.2346"
复制
println() :
描述:将数据作为人类可读的ASCII文本打印到串行端口,后跟回车符(ASCII 13或'\ r')和换行符(ASCII 10或'\ n') 函数原型:Serial.println(val) / Serial.println(val, format) 参数:同 print() 返回值:size_t:print() 返回写入的字节数,但读取该数字是可选的。 parseInt() :
描述:查找传入串行流中的下一个有效整数。 函数原型:Serial.parseInt() / Serial.parseInt(char skipChar) 参数: skipChar:用于跳过搜索中指定的字符。例如,用于跳过数千个分频器。 返回值:long:下一个有效整数