Arduino学习总结

1、在Arduino语言中事先定义了一些具特殊用途的保留字。

  • HIGH | LOW
    表示数字IO口的电平,HIGH 表示高电平(1),LOW 表示低电平(0)。 HIGH 和LOW 也用来表示你开启或是关闭了一个Arduino的脚位(pin)
  • INPUT | OUTPUT
    表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT 表示输出(AVR能提供5V电压 40mA电流)。
  • true | false
    true表示真(1),false表示假(0)。

2、程序基本结构

/*******************************
*   声明变量及接口名称
*   (下面是例子)
*******************************/
int val;
int ledpin = 13;
/*******************************
*   在程序开始时使用,在这个函数范围内放置初始化Arduino 板子的程式,
*   主要程式开始撰写前, 使Arduino 板子装置妥当的指令可以初始化变量、
*   管脚接口模式、启用库等(例如:pinMode(ledPin,OUTPUT);)。
*   (下面是例子)
********************************/
void setup()
{
    pinMode(13, HIGH);
}
/*******************************
* 在setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。
* 使用它来运转Arduino。连续执行函数内的语句,这部份的程式会一直
* 重复的被执行,直到Arduino 板子被关闭。
* 下面是例子
*******************************/
void loop()
{
    Serial.Write(13, hello);
}

3、变量定义及函数表示与功能

数字 I/O

一、数字IO口输入输出模式定义函数

 pinMode(pin, mode);   

将接口定义为输入或输出接口,用在setup()函数里,pin表示为0~13接口名称,mode表示为INPUT或OUTPUT。即“ pinMode(接口名称,OUTPUT或INPUT)”。

范例 :

pinMode(7,INPUT); // 将脚位 7 设定为输入模式

二、数字IO口输出电平定义函数

digitalWrite(pin, value)   

将数字接口值至高或低、开或关,pin表示为0~13,value表示为HIGH或LOW,即digitalWrite(接口名称, HIGH或LOW)。但脚位必须先透过pinMode明示为输入或输出模式digitalWrite才能生效。比如定义HIGH可以驱动LED。

范例 :

digitalWrite(8,HIGH); //将脚位 8设定输出高电位

三、数字IO口读输入电平函数

int digitalRead(pin) 

读出数字接口的值,pin表示为0~13,value表示为HIGH或LOW,即digitalRead(接口名称)。比如可以读数字传感器。当感测到脚位处于高电位时时回传HIGH,否则回传LOW。

范例 :

val = digitalRead(7); // 读出脚位 7 的值并指定给 val

模拟 I/O

一、模拟IO口读函数

int analogRead(pin)  

从指定的模拟接口读取值,Arduino对该模拟值进行10-bit的数字转换,这个方法将输入的0-5电压值转换为 0到1023间的整数值。pin表示为0~5(Arduino Diecimila为0~5,Arduino nano为0~7)。即“analogRead(接口名称)”,比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。

范例 :

val = analogRead(0); //读出类比脚位 0 的值并指定给 val变数

二、数字IO口PWM输出函数

  analogWrite(pin, value)

给一个接口写入模拟值(PWM波)。改变PWM脚位的输出电压值。对于 ATmega168芯片的Arduino(包括Mini或BT),该函数可以工作于 3, 5, 6, 9, 10和 11号接口,即“analogWrite(接口名称,
数值)”,pin表示3, 5, 6, 9, 10, 11,value表示为0~255。比如可用于电机PWM调速或音乐播放。

例如:输出电压2.5伏特(V),该值大约是128。

范例 :

analogWrite(9,128); // 输出电压约2.5伏特(V)

扩展 I/O

一、SPI外部IO扩展函数

shiftOut(dataPin, clockPin, bitOrder, value)   

通常使用带SPI接口的74HC595做8个IO扩展,把资料传给用来延伸数位输出的暂存器,此函式通常使用在延伸数位的输出。函式使用一个脚位表示资料、一个脚位表示时脉。dataPin为数据口,clockPin为时钟口,bitOrder用来表示位元间移动的方式,为数据传输方向(MSBFIRST高位在前,LSBFIRST低位在前),value会以byte形式输出,表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制。

范例 :

shiftOut(dataPin, clockPin, LSBFIRST, 255);

二、脉冲长度记录函数

  unsigned long pulseIn(pin, value)

设定读取脚位状态的持续时间,返回时间参数(us),例如使用红外线、加速度感测器测得某一项数值时,在时间单位内不会改变状态。pin表示为0~13,value为HIGH或LOW。比如value为HIGH,那么当pin输入为高电平时,开始计时,当pin输入为低电平时,停止计时,然后返回该时间。

范例 :

time = pulsein(7,HIGH); // 设定脚位7的状态在时间单位内保持为HIGH

时间函数

一、返回时间函数(单位ms)

 unsigned long millis()

回传晶片开始执行到目前的毫秒,该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天时间。

范例:

duration = millis()-lastTime; // 表示自"lastTime"至当下的时间

二、延时函数(单位ms)

delay(ms)    

延时一段时间,暂停晶片执行多少毫秒,

delay(1000)为一秒。

范例:

delay(500); //暂停半秒(500毫秒)

delayMicroseconds(us) 延时函数(单位us)暂停晶片执行多少微秒。

delayMicroseconds(1000); //暂停1豪秒

数学函数

一、求最小值

min(x,y) 

回传两数之间较小者

范例:

val = min(10,20); // 回传10

二、求最大值

max(x,y) 

回传两数之间较大者

范例:

val = max(10,20); // 回传20

三、计算绝对值

 abs(x)  

回传该数的绝对值,可以将负数转正数。

范例:

val = abs(-5); // 回传5

四、约束函数

constrain(x, a, b) 

下限a,上限b,判断x变数位于a与b之间的状态。x若小于a回传a;介于a与b之间回传x本身;大于b回传b

范例:

val = constrain(analogRead(0), 0, 255); // 忽略大于255的数

约束函数

 map(value,fromLow, fromHigh, toLow, toHigh)

value必须在fromLow与toLow之间和fromHigh与toHigh之间。将value变数依照fromLow与fromHigh范围,对等转换至toLow与toHigh范围。时常使用于读取类比讯号,转换至程式所需要的范围值。

例如:

val = map(analogRead(0),0,1023,100, 200); // 将analog0 所读取到的讯号对等转换至100,200之间的数值。

五、开方函数

pow(basë,exponent) 

base的exponent次方。回传一个数(base)的指数(exponent)值。

范例:

double x = pow(y, 32); // 设定x为y的32次方

sq(x) 平方

sqrt(x) 开根号

回传double型态的取平方根值。

范例:

double a = sqrt(1138); // 回传1138平方根的近似值 33.73425674438

六、三角函数

sin (rad)

回传角度(radians)的三角函数sine值。

范例:

double sine = sin(2); // 近似值 0.90929737091

cos(rad)

回传角度(radians)的三角函数cosine值。

范例:

double cosine = cos(2); //近似值-0.41614685058

tan(rad)

回传角度(radians)的三角函数tangent值。

范例:

double tangent = tan(2); //近似值-2.18503975868

七、随机数函数

randomSeed(seed)

随机数端口定义函数,seed表示读模拟口analogRead(pin)函数 。

事实上在Arduino里的乱数是可以被预知的。所以如果需要一个真正的乱数,可以呼叫此函式重新设定产生乱数种子。你可以使用乱数当作乱数的种子,以确保数字以随机的方式出现,通常会使用类比输入当作乱数种子,藉此可以产生与环境有关的乱数(例如:无线电波、宇宙雷射线、电话和萤光灯发出的电磁波等)。

范例:

randomSeed(analogRead(5)); // 使用类比输入当作乱数种子

long random(max)

随机数函数,返回数据大于等于0,小于max。

范例:

long randnum = random(11);     // 回传 0 -10之间的数字

long random(min, max)

随机数函数,返回数据大于等于min,小于max。

范例:

long randnum = random(0, 100); // 回传0 – 99 之间的数字

外部中断函数

attachInterrupt(interrupt, , mode)

外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数,mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING 下降沿中断。

detachInterrupt(interrupt)    

中断开关,interrupt=1 开,interrupt=0 关。

中断使能函数

interrupts() 使能中断


noInterrupts() 禁止中断 

串口收发函数

Serial.begin(speed)

串口定义波特率函数,设置串行每秒传输数据的速率(波特率),可以指定Arduino从电脑交换讯息的速率,通常我们使用9600 bps。,speed表示波特率,如9600,19200等。在同计算机通讯时,使用下面这些值:300, 1200, 2400,
4800, 9600, 14400, 19200, 28800, 38400, 57600或 115200
bps(每秒位元组)。。你也可以在任何时候使用其它的值,比如,与0号或1号插口通信就要求特殊的波特率。用在setup()函数里

范例:

Serial.begin(9600)

int Serial.available()

判断缓冲器状态。回传有多少位元组(bytes)的资料尚未被read()函式读取,如果回传值是0代表所有序列埠上资料都已经被read()函式读取。

范例:

int count = Serial.available();

int Serial.read()

读串口并返回收到参数。Serial.read()——读取持续输入的数据。读取1byte的序列资料

范例:

int data = Serial.read();

Serial.flush()

清空缓冲器。 有时候因为资料速度太快,超过程式处理资料的速度,你可以使用此函式清除缓冲区内的资料。经过此函式可以确保缓冲区(buffer)内的资料都是最新的。

范例:

Serial.flush();

Serial.print(data)

从串行端口输出数据。Serial.print(数据)默认为十进制等于Serial.print(数据,DEC)。

Serial.print(data, encoding)

经序列埠传送资料,提供编码方式的选项。Serial.print(数据,数据的进制)如果没有指定,预设以一般文字传送。

范例:

Serial.print(75);       // 列印出 "75"

Serial.print(75, DEC); //列印出 "75"

Serial.print(75, HEX); // "4B" (75 的十六进位)

Serial.print(75, OCT); // "113" (75 in的八进位)

Serial.print(75, BIN); // "1001011" (75的二进位)

Serial.print(75, BYTE); // "K" (以byte进行传送,显示以ASCII编码方式)

Serial.println(data)

从串行端口输出数据,跟随一个回车和一个换行符。这个函数所取得的值与
Serial.print()一样。

Serial.println(data, encoding)

与Serial.print()相同,但会在资料尾端加上换行字元(
)。意思如同你在键盘上打了一些资料后按下Enter。

范例:

Serial.println(75);       //列印出"75 "

Serial.println(75, DEC); //列印出"75
"

Serial.println(75, HEX); // "4B "

Serial.println(75, OCT); // "113 "

Serial.println(75, BIN); // "1001011 "

Serial.println(75, BYTE); // "K "

Arduino语言库文件

官方库文件

·EEPROM- EEPROM读写程序库

·Ethernet- 以太网控制器程序库

·LiquidCrystal- LCD控制程序库

·Servo- 舵机控制程序库

·SoftwareSerial- 任何数字IO口模拟串口程序库

·Stepper- 步进电机控制程序库

·Wire- TWI/I2C总线程序库

·Matrix - LED矩阵控制程序库

·Sprite - LED矩阵图象处理控制程序库

非官方库文件

·DateTime- a library for keeping track of the current date and time in software.

·Debounce- for reading noisy digital inputs (e.g. from buttons)

·Firmata - for communicating with applicationson the computer using a standard serial protocol.

·GLCD - graphics routines for LCD based on the KS0108 or equivalent chipset.

·LCD- control LCDs (using 8 data lines)

·LCD 4 Bit - control LCDs(using 4 data lines)

·LedControl - for controlling LED matrices or seven-segment displays with a MAX7221 or MAX7219.

·LedControl - an alternative to the Matrix library for driving multiple LEDs with Maxim chips.

·Messenger- for processing text-based messages from the computer

·Metro- help you time actions at regular intervals

·MsTimer2- uses the timer 2 interrupt to trigger an action every N milliseconds.

·OneWire - control devices (from Dallas Semiconductor)that use the One Wire protocol.

·PS2Keyboard - read characters from a PS2 keyboard.

·Servo - provides software support for Servo motors on any pins.

·Servotimer1 - provides hardware support for Servo motors on pins 9 and 10

·Simple Message System - send messages between Arduino and the computer

·SSerial2Mobile- send text messages or emails using a cell phone (via AT commands over software serial)

·TextString- handle strings

·TLC5940 - 16 channel 12 bit PWM controller.

·X10- Sending X10 signals over AC power lines

这里放一个简单的例程:Hello, world!

  • 程序如下:
//定义变量及参数
int val;    //定义变量val
int ledpin = 13;   //定义数字接口13

//初始化代码,板子上电或开机后只运行一次
void setup()  
{
    Serial.begin(9600);    //设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,也要跟其他设备的波特率保持一致
    pinMode(ledpin, OUTPUT);  //设置数字13口为输出接口,Arduino上用到的I/O口都要进行类似这样的定义
}

//主函数,板子上电或开机后,会一直循环里面的代码
void loop()   
{
    val = Serial.read();   //读取PC机发送给Arduino的指令或字符,并将该指令或字符赋给val
    if(val == 'R')  //判断接收到的字符或指令是否是‘R’
    {
        //如果接收到的是‘R’字符
        digitalWrite(ledpin, HIGH);   //将高电平写入ledpin管脚,点亮数字13口LED(因为我所使用的板子的13口接LED的正极)
        delay(500);   //延时500ms
        degitalWrite(ledpin, LOW);   //将低电平写入ledpin管脚,熄灭数字13口LED
        delay(500);
        Serial.println("Hello, World!");   //向PC机发送“Hello, World!”字符串
    }
}
  • 效果:
    当PC机给Arduino发送字符‘R’时,LED闪烁一次,然后Arduino给PC机发送字符串“Hello, World!”

注:使用println输出的比print多一个回车

你可能感兴趣的:(arduino)