语言:
使用Setup和loop这个两个函数:
Arduino软件结构包括两个主要函数:
-
Setup()函数 初始化变量,管脚模式,调用库函数等
-
Loop()函数 连续循环执行loop函数内的程序(可以理解成while(1);)
在Arduino控制器通电或复位后,,程序启动时会调用 setup()函数。setup函数只能在Arduino板的每次上电或复位后运行一次。
loop() 让你的程序循环地被执行。使用它来运转Arduino。这部份的程式会一直重复的被执行,直到Arduino 板子被关闭。
HIGH | LOW
表示数字IO口的电平,HIGH 表示高电平(1),LOW 表示低电平(0)。 HIGH 和LOW 也用来表示你开启或是关闭了一个Arduino的脚位(pin)
INPUT | OUTPUT
表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT 表示输出
pinMode()函数
数字IO口输入输出模式定义函数:
可以将接口定义为输入或输出接口,pinMode()函数用于将特定引脚配置为输入或输出。
pin - 你希望设置模式的引脚的编号 0~13
*mode* - INPUT(输入模式),OUTPUT(输出模式)或INPUT_PULLUP(内部上拉输入)。
引脚配置为INPUT
Arduino引脚默认配置为输入 ,输入模式下,由外部器件向Arduino对于引脚输入电平,和数据,Arduino识别电平及数据,进行相应的处理。
引脚配置为OUTPUT
引脚配置为输出模式,Arduino引脚向其他电路提供大量的电流。这是足以点亮LED或者运行许多传感器的电流(不要忘记串联电阻),但不足以运行继电器,螺线管或电机。
digitalWrite()函数:
定义引脚的电平
digitalWrite(pin,value);
但脚位必须先透过pinMode明示为输入或输出模式digitalWrite才能生效。比如定义HIGH可以驱动LED。
digitalRead()函数:
引脚电平读取函数
int digitalRead(pin)
数字IO口读输入电平函数,读出数字接口的值 。
在类似开关控制led的实验中:当感测到脚位处于高电位时时回传HIGH,否则回传LOW。
analogRead()函数:
模拟IO口读函数,从指定的模拟接口读取值,Arduino对该模拟值进行10-bit的数字转换。 此函数返回0到1023之间的数字,表示0到5伏特之间的电压。
如果施加到编号0的引脚的电压为2.5V,则analogRead(0)返回512。
int analogRead(pin)
analogWrite()函数:
数字IO口PWM输出函数,给一个接口写入模拟值(PWM波)改变PWM脚位的输出电压值
value表示为0~255
例如:输出电压2.5伏特(V),该值大约是128。
analogWrite(pin, value);
shiftOut()函数:
SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,把资料传给用来延伸数位输出的暂存器,此函式通常使用在延伸数位的输出。
shiftOut(dataPin, clockPin, bitOrder, value)
函式使用一个脚位表示资料、一个脚位表示时脉。dataPin为数据口,clockPin为时钟口,bitOrder用来表示位元间移动的方式,为数据传输方向(MSBFIRST高位在前,LSBFIRST低位在前),value会以byte形式输出,表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制。
unsigned long pulseIn(pin, value):
脉冲长度记录函数,设定读取脚位状态的持续时间,返回时间参数(us)
延时函数:
delay(ms) 延时函数
delay(ms) 延时函数(单位ms)
delayMicroseconds()函数:
延时函数(单位us)暂停晶片执行多少微秒
随机函数:
randomSeed()函数:
randomSeed(seed)
随机数端口定义函数,seed表示读模拟口analogRead(pin)函数
randomSeed(seed)函数重置Arduino的伪随机数生成器
random()函数:
long random(min, max)
随机数函数,返回数据大于等于min,小于max。
long random(max)
返回数据大于等于0,小于max。
Serial.begin(speed)
-
串口定义波特率函数,设置串行每秒传输数据的速率(波特率),可以指定Arduino从电脑交换讯息的速率,通常置于setup()函数中。
Serial.end():
描述:禁止串口传输。此时串口Rx和Tx可以作为数字IO引脚使用。
Serial.print():
描述:串口输出数据,写入字符数据到串口。
Serial.print(val, format)
val:打印的值,任意数据类型。
config:输出的数据格式。BIN(二进制)、OCT(八进制)、DEC(十进制)、HEX(十六进制)。对于浮点数,此参数指定要使用的小数位数。
Serial.println():
描述:串口输出数据并换行。
Serial.available():
描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。
Serial.read():
描述:读取串口数据,一次读一个字符,读完后删除已读数据。
返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型。
Serial.readBytes():
描述:从串口读取指定长度的字符到缓存数组。
原型:Serial.readBytes(buffer, length)
Serial.flush():
描述:清空缓冲器。 有时候因为资料速度太快,可以使用此函式清除缓冲区内的资料。
程序代码:
读取模拟值:
原理接线图:
int potpin=0;
int ledpin=13;
int val;
void setup() {
pinMode(ledpin,OUTPUT);//定义数字接口为输出接口
Serial.begin(9600);//设置波特频率为9600
// put your setup code here, to run once:
}
void loop() {//相当与while(1)的死循环主函数
digitalWrite(ledpin,HIGH);
delay(500);
digitalWrite(ledpin,LOW);
delay(500);
val=analogRead(potpin);//读取模拟数字接口0的值,并将其赋给val;
Serial.println(val);
// put your main code here, to run repeatedly:
}
led灯接连闪烁:
原理:
int BASE = 2;//第一个led灯的接口位置
int NUM = 4;//led灯的数据
int i=0;
void setup() {
for(i=BASE;i<BASE+NUM;i++)
{
pinMode (i,OUTPUT);
}
// put your setup code here, to run once:
}
void loop() {
for(i=BASE;i<BASE+NUM;i++)
{
digitalWrite(i,LOW);
delay(500);
}
for(i=BASE;i<BASE+NUM;i++)
{
digitalWrite(i,HIGH);
delay(500);
}
// put your main code here, to run repeatedly:
}
光敏电阻控制发声:
int buzzer=6;
int i =0;
void setup() {
pinMode(buzzer,OUTPUT);
// put your setup code here, to run once:
}
void loop() {
for(i=0;i<200;i++)//
{
digitalWrite(buzzer,HIGH);
delay(1);
digitalWrite(buzzer,LOW);
delay(1);
}
for(i=0;i<300;i++)//
{
digitalWrite(buzzer,HIGH);
delay(2);
digitalWrite(buzzer,LOW);
delay(2);
}
for(i=0;i<100;i++)//
{
digitalWrite(buzzer,HIGH);
delay(5);
digitalWrite(buzzer,LOW);
delay(5);
}
for(i=0;i<50;i++)//
{
digitalWrite(buzzer,HIGH);
delay(0.8);
digitalWrite(buzzer,LOW);
delay(0.8);
}
for(i=0;i<120;i++)//
{
digitalWrite(buzzer,HIGH);
delay(3);
digitalWrite(buzzer,LOW);
delay(3);
}
for(i=0;i<80;i++)//
{
digitalWrite(buzzer,HIGH);
delay(4);
digitalWrite(buzzer,LOW);
delay(4);
}
// put your main code here, to run repeatedly:
}
按键控制:
int redled =10;
int yellowled=9;
int greenled =8;
int redpin =7;
int yellowpin =6;
int greenpin=5;
int red;
int yellow;
int green;
void setup() {
pinMode(redled,OUTPUT);
pinMode(greenled ,OUTPUT);
pinMode(yellowled,OUTPUT);
pinMode(redpin,INPUT);
pinMode(yellowpin,INPUT);
pinMode(greenled,INPUT);
// put your setup code here, to run once:
}
void loop() {
red=digitalRead(redpin);
if(red==LOW)
{
digitalWrite(redled,LOW);
}
else
{
digitalWrite(redled,HIGH);
}
yellow=digitalRead(yellowpin);
if(yellow==LOW)
{
digitalWrite(yellowled,LOW);
}
else
{
digitalWrite(yellowled,HIGH);
}
green=digitalRead(greenpin);
if(green==LOW)
{
digitalWrite(greenled,LOW);
}
else
{
digitalWrite(greenled,HIGH);
}
// put your main code here, to run repeatedly:
}
PWN输入:
int potpin=0;
int ledpin=11;//定义数字接口11,(PWM输出)
int val=0;
void setup() {
pinMode(ledpin,OUTPUT);
Serial.begin(9600);
//注意:模拟接口自动设置为输入;
// put your setup code here, to run once:
}
void loop() {
val=analogRead(potpin);
Serial.println(val);
analogWrite(ledpin,val/4);
delay(10);
// put your main code here, to run repeatedly:
}
热敏电阻使用:
int potpin =0;
int ledpin=11;//设置数字端口11,后面用作PWM输出
int val=0;
void setup() {
pinMode(ledpin,OUTPUT);//设置数字11为输出模式
Serial.begin(9600);
// put your setup code here, to run once:
}
void loop() {
val=analogRead(potpin);
val=245-val/2;
if(val<0)
{
val=0;
}
Serial.println(val);
analogWrite(ledpin,val);//pwM输出驱动LED
delay(100);
// put your main code here, to run repeatedly:
}