收藏 分销(赏)

Arduino语法基础手册专业资料.doc

上传人:精**** 文档编号:3025534 上传时间:2024-06-13 格式:DOC 页数:33 大小:150.54KB 下载积分:12 金币
下载 相关 举报
Arduino语法基础手册专业资料.doc_第1页
第1页 / 共33页
Arduino语法基础手册专业资料.doc_第2页
第2页 / 共33页


点击查看更多>>
资源描述
#Arduino 语法      setup()     初始化函数      loop()      循环体函数      控制语句类似于C   //if        if...else       for     switch case     while       do... while     break       continue        return      goto      扩展语法类似于C   //;(分号)     {}(花括号)     //(单行注释)        /* */(多行注释)     #define     #include      算数运算符类似于C   //=(赋值运算符)      +(加)        -(减)        *(乘)        /(除)        %(模)      比较运算符类似于C   //==(等于)        !=(不等于)     <(不大于)        >(不不大于)        <=(不大于等于)     >=(不不大于等于)      布尔运算符类似于C   //&&(与)     ||(或)       !(非)      指针运算符类似于C   //* 取消引用运算符     & 引用运算符      位运算符类似于C       & (bitwise and)     | (bitwise or)      ^ (bitwise xor)     ~ (bitwise not)     << (bitshift left)        >> (bitshift right)      复合运算符类似于C       ++ (increment)      -- (decrement)      += (compound addition)      -= (compound subtraction)       *= (compound multiplication)        /= (compound division)      &= (compound bitwise and)       |= (compound bitwise or)      常量   constants 预定义常量       BOOL    true false          引脚电压定义,HIGH和LOW【当读取(read)或写入(write)数字引脚时只有两个也许值: HIGH 和 LOW 】       HIGH(参照引脚)含义取决于引脚(pin)设立,引脚定义为INPUT或OUTPUT时含义有所不同。当一种引脚通过pinMode被设立为INPUT,并通过digitalRead读取(read)时。如果当前引脚电压不不大于等于3V,微控制器将会返回为HIGH。 引脚也可以通过pinMode被设立为INPUT,并通过digitalWrite设立为HIGH。输入引脚值将被一种内在20K上拉电阻 控制 在HIGH上,除非一种外部电路将其拉低到LOW。 当一种引脚通过pinMode被设立为OUTPUT,并digitalWrite设立为HIGH时,引脚电压应在5V。在这种状态下,它可以 输出电流 。例如,点亮一种通过一串电阻接地或设立为LOWOUTPUT属性引脚LED。       LOW含义同样取决于引脚设立,引脚定义为INPUT或OUTPUT时含义有所不同。当一种引脚通过pinMode配备为INPUT,通过digitalRead设立为读取(read)时,如果当前引脚电压不大于等于2V,微控制器将返回为LOW。 当一种引脚通过pinMode配备为OUTPUT,并通过digitalWrite设立为LOW时,引脚为0V。在这种状态下,它可以 倒灌 电流。例如,点亮一种通过串联电阻连接到+5V,或到另一种引脚配备为OUTPUT、HIGHLED。          数字引脚(Digital pins)定义,INPUT和OUTPUT【数字引脚当作 INPUT 或 OUTPUT都可以 。用pinMode()办法使一种数字引脚从INPUT到OUTPUT变化】       Arduino(Atmega)引脚通过pinMode()配备为 输入(INPUT) 即是将其配备在一种高阻抗状态。配备为INPUT引脚可以理解为引脚取样时对电路有极小需求,即等效于在引脚前串联一种100兆欧姆(Megohms)电阻。这使得它们非常利于读取传感器,而不是为LED供电。       引脚通过pinMode()配备为 输出(OUTPUT) 即是将其配备在一种低阻抗状态。       这意味着它们可觉得电路提供充分电流。Atmega引脚可以向其她设备/电路提供(提供正电流positive current)或倒灌(提供负电流negative current)达40毫安(mA)电流。这使得它们利于给LED供电,而不是读取传感器。输出(OUTPUT)引脚被短路接地或5V电路上会受到损坏甚至烧毁。Atmega引脚在为继电器或电机供电时,由于电流局限性,将需要某些外接电路来实现供电。          整数常量       进制  例子  格式  备注       10(十进制) 123 无          2(二进制)  B1111011    前缀'B'   只合用于8位值(0到255)字符0-1有效       8(八进制)  0173    前缀”0”   字符0-7有效       16(十六进制)    0x7B    前缀”0x”  字符0-9,A-F,A-F有效          小数是十进制数。这是数学常识。如果一种数没有特定前缀,则默以为十进制。       二进制以2为基底,只有数字0和1是有效。          'u' or 'U' 指定一种常量为无符号型。(只能表达正数和0) 例如: 33u       'l' or 'L' 指定一种常量为长整型。(表达数范畴更广) 例如: 100000L       'ul' or 'UL' 这个你懂,就是上面两种类型,称作无符号长整型。 例如:32767ul          浮点常量       浮点数 被转换为    被转换为       10.0        10       2.34E5  2.34 * 10^5 234000       67E-12  67.0 * 10^-12   0.      数据类型类似于C       void        boolean     char        unsigned char       byte        int     unsigned int        word       long        unsigned long       float       double      string - char array     String - object     array -(数组)      数据类型转换类似于C       char()      byte()      int()       word()      long()      float()       word()       把一种值转换为word数据类型值,或由两个字节创立一种字符。       word(x)        word(h, l)       参数       X:任何类型值        H:高阶(最左边)字节        L:低序(最右边)字节      修饰符类似于C       static      volatile        const      辅助工具       sizeof()      数字 I/O       pinMode()       将指定引脚配备成输出或输入【pinMode(pin, mode) pin:要设立模式引脚  mode:INPUT或OUTPUT】       例子:       ledPin = 13 // LED连接到数字脚13       void setup()       {           pinMode(ledPin,OUTPUT); //设立数字脚为输出       }       void loop()       {           digitalWrite(ledPin,HIGH); //点亮LED           delay(1000);                  // 等待一秒           digitalWrite(ledPin, LOW);    // 灭掉LED           delay(1000);  //等待第二个       }          digitalWrite()       给一种数字引脚写入HIGH或者LOW。       如果一种引脚已经使用pinMode()配备为OUTPUT模式,其电压将被设立为相应值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。       如果引脚配备为INPUT模式,使用digitalWrite()写入HIGH值,将使内部20K上拉电阻(详见数字引脚教程)。写入LOW将会禁用上拉。上拉电阻可以点亮一种LED让其微微亮,如果LED工作,但是亮度很低,也许是由于这个因素引起。补救办法是 使用pinMode()函数设立为输出引脚。       注意:数字13号引脚难以作为数字输入使用,由于大某些控制板上使用了一颗LED与一种电阻连接到她。如果启动了内部20K上拉电阻,她电压将在1.7V左右,而不是正常5V,由于板载LED串联电阻把她使她降了下来,这意味着她返回值总是LOW。如果必要使用数字13号引脚输入模式,需要使用外部上拉下拉电阻。          digitalRead()       digitalRead(PIN)【pin:你想读取引脚号(int),返回 HIGH 或 LOW】       例子:       ledPin = 13 // LED连接到13脚       int inPin = 7;   // 按钮连接到数字引脚7       int val = 0;  //定义变量存以储读值       void setup()       {           pinMode(ledPin, OUTPUT);      // 将13脚设立为输出           pinMode(inPin, INPUT);      // 将7脚设立为输入       }       void loop()       {           val = digitalRead(inPin);   // 读取输入脚           digitalWrite(ledPin, val);    //将LED值设立为按钮值       }      模仿 I/O       analogReference()       analogReference(type)       配备用于模仿输入基准电压(即输入范畴最大值)。选项有:       DEFAULT:默认5V(Arduino板为5V)或3.3伏特(Arduino板为3.3V)为基准电压。       INTERNAL:在ATmega168和ATmega328上以1.1V为基准电压,以及在ATmega8上以2.56V为基准电压(Arduino Mega无此选项)       INTERNAL1V1:以1.1V为基准电压(此选项仅针对Arduino Mega)       INTERNAL2V56:以2.56V为基准电压(此选项仅针对Arduino Mega)       EXTERNAL:以AREF引脚(0至5V)电压作为基准电压。       type:使用哪种参照类型(DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, 或者 EXTERNAL)       变化基准电压后,之前从anal??ogRead()读取数据也许不精确。       不要在AREF引脚上使用使用任何不大于0V或超过5V外部电压。如果你使用AREF引脚上电压作为基准电压,你在调用analogRead()前必要设立参照类型为EXTERNAL。否则,你将会削短有效基准电压(内部产生)和AREF引脚,这也许会损坏您Arduino板上单片机。       此外,您可以在外部基准电压和AREF引脚之间连接一种5K电阻,使你可以在外部和内部基准电压之间切换。请注意,总阻值将会发生变化,由于AREF引脚内部有一种32K电阻。这两个电阻均有分压作用。因此,例如,如果输入2.5V电压,最后在在AREF引脚上电压将为2.5 * 32 /(32 + 5)= 2.2V。          analogRead()       从指定模仿引脚读取数据值。 Arduino板包括一种6通道(Mini和Nano有8个通道,Mega有16个通道),10位模仿数字转换器。这意味着它将0至5伏特之间输入电压映射到0至1023之间整数值。这将产生读数之间关系:5伏特/ 1024单位,或0.0049伏特(4.9 mV)每单位。输入范畴和精度可以使用analogReference()变化。 它需要大概100微秒(0.0001)来读取模仿输入,因此最大阅读速度是每秒10000次。       analogRead(PIN)       引脚:从输入引脚(大某些板子从0到5,Mini和Nano从0到7,Mega从0到15)读取数值,返回从0到1023整数值       例子:       int analogPin = 3;    //电位器(中间引脚)连接到模仿输入引脚3                             //此外两个引脚分别接地和+5 V       int val = 0;  //定义变量来存储读取数值       void setup()       {           serial.begin(9600); //设立波特率(9600)       }       void loop()       {           val = analogRead(analogPin); //从输入引脚读取数值           serial.println(val); //显示读取数值       }          analogWrite() - PWM       analogWrite(pin,value)       从一种引脚输出模仿值(PWM)。可用于让LED以不同亮度点亮或驱动电机以不同速度旋转。analogWrite()输出结束后,该引脚将产生一种稳定特殊占空比喻波,直到下次调用analogWrite()(或在同一引脚调用digitalRead()或digitalWrite())。PWM信号频率大概是490赫兹。       在大多数arduino板(ATmega168或ATmega328),只有引脚3,5,6,9,10和11可以实现该功能。在aduino Mega上,引脚2到13可以实现该功能。老Arduino板(ATmega8)只有引脚9、10、11可以使用analogWrite()。在使用analogWrite()前,你不需要调用pinMode()来设立引脚为输出引脚。       analogWrite函数与模仿引脚、analogRead函数没有直接关系。       pin:用于输入数值引脚。        value:占空比:0(完全关闭)到255(完全打开)之间。       例子:       int ledPin = 9;  // LED连接到数字引脚9       int analogPin = 3;  //电位器连接到模仿引脚3       int val = 0;  //定义变量存以储读值       void setup()       {           pinMode(ledPin,OUTPUT);  //设立引脚为输出引脚       }       void loop()       {           val = analogRead(analogPin);  //从输入引脚读取数值           analogWrite(ledPin,val / 4);  // 以val / 4数值点亮LED(由于analogRead读取数值从0到1023,而analogWrite输出数值从0到255)       }      高档 I/O       tone()       在一种引脚上产生一种特定频率方波(50%占空比)。持续时间可以设定,否则波形会始终产生直到调用noTone()函数。该引脚可以连接压电蜂鸣器或其她喇叭播放声音。       在同一时刻只能产生一种声音。如果一种引脚已经在播放音乐,那调用tone()将不会有任何效果。如果音乐在同一种引脚上播放,它会自动调节频率。       使用tone()函数会与3脚和11脚PWM产生干扰(Mega板除外)。       注意:如果你要在各种引脚上产生不同音调,你要在对下一种引脚使用tone()函数前对此引脚调用noTone()函数。       tone(pin, frequency)        tone(pin, frequency, duration)       pin:要产生声音引脚        frequency: 产生声音频率,单位Hz,类型unsigned int        duration:声音持续时间,单位毫秒(可选),类型unsigned long          noTone()       停止由tone()产生方波。如果没有使用tone()将不会有效果。       noTone(pin)       pin: 所要停止产生声音引脚          shiftOut()       将一种数据一种字节一位一位移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,批示刚才数据有效。       注意:如果你所连接设备时钟类型为上升沿,你要拟定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。       注意:这是一种软件实现;Arduino提供了一种硬件实现SPI库,它速度更快但只在特定脚有效。       shiftOut(dataPin, clockPin, bitOrder, value)       dataPin:输出每一位数据引脚(int)        clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)        bitOrder:输出位顺序,最高位优先或最低位优先        value: 要移位输出数据(byte)       dataPin和clockPin要用pinMode()配备为输出。 shiftOut当前只能输出1个字节(8位),因此如果输出值不不大于255需要分两步。       //最高有效位优先串行输出       int data= 500;       //移位输出高字节       shiftOut(dataPin, clock, MSBFIRST, (data >> 8));         //移位输出低字节       shiftOut(data, clock, MSBFIRST, data);       //最低有效位优先串行输出       data = 500;       //移位输出低字节       shiftOut(dataPin, clock, LSBFIRST, data);         //移位输出高字节       shiftOut(dataPin, clock, LSBFIRST, (data >> 8));       例子:       相应电路,查看tutorial on controlling a 74HC595 shift register       //引脚连接到74HC595ST_CP       int latchPin = 8;       //引脚连接到74HC595SH_CP       int clockPin = 12;       // //引脚连接到74HC595DS       int dataPin = 11;       void setup() {       //设立引脚为输出           pinMode(latchPin, OUTPUT);           pinMode(clockPin, OUTPUT);           pinMode(dataPin, OUTPUT);       }       void loop() {           //向上计数程序           for(J = 0; J <256; J + +){               //传播数据时候将latchPin拉低               digitalWrite(latchpin, LOW);               shiftOut(dataPin,clockPin,LSBFIRST,J);               //之后将latchPin拉高以告诉芯片               //它不需要再接受信息了               digitalWrite(latchpin, HIGH);               delay(1000);           }       }          shiftIn()       将一种数据一种字节一位一位移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传播线中读取一位,再将时钟线拉低。       注意:这是一种软件实现;Arduino提供了一种硬件实现SPI库,它速度更快但只在特定脚有效。       shiftIn(dataPin,clockPin,bitOrder)       dataPin:输出每一位数据引脚(int)        clockPin:时钟脚,当dataPin有值时此引脚电平变化(int)        bitOrder:输出位顺序,最高位优先或最低位优先          pulseIn()       读取一种引脚脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲长度,单位微秒。如果在指定期间内无脉冲函数返回。       此函数计时功能由经验决定,长时间脉冲计时也许会出错。计时范畴从10微秒至3分钟。(1秒=1000毫秒=1000000微秒)       pulseIn(pin, value)        pulseIn(pin, value, timeout)       pin:你要进行脉冲计时引脚号(int)。        value:要读取脉冲类型,HIGH或LOW(int)。        timeout (可选):指定脉冲计数等待时间,单位为微秒,默认值是1秒(unsigned long)       返回:脉冲长度(微秒),如果等待超时返回0(unsigned long)       例子:       int pin = 7;       unsigned long duration;       void setup()       {           pinMode(pin, INPUT);       }       void loop()       {           duration = pulseIn(pin, HIGH);;       }      时间       millis()       返回Arduino开发板从运营当前程序开始毫秒数。这个数字将在约50天后溢出(归零)       例子:       unsigned long time;       void setup(){           Serial.begin(9600);       }       void loop(){           serial.print("Time:");           time = millis();           //打印从程序开始到当前时间           serial.println(time);           //等待一秒钟,以免发送大量数据           delay(1000);       }       参数 millis 是一种无符号长整数,试图和其她数据类型(如整型数)做数学运算也许会产生错误          micros()       返回 Arduino 开发板从运营当前程序开始微秒数。这个数字将在约70分钟后溢出(归零)。在 16MHz  Arduino 开发板上(例如 Duemilanove 和 Nano),这个函数辨别率为四微秒(即返回值总是四倍数)。在 8MHz  Arduino 开发板上(例如 LilyPad),这个函数辨别率为八微秒。       注意 :每毫秒是1,000微秒,每秒是1,000,000微秒。       例子:       unsigned long time;       void setup(){           Serial.begin(9600);       }       void loop(){           Serial.print(“Time:”);           time = micros();           //打印从程序开始时间           Serial.println(time);           //等待一秒钟,以免发送大量数据           delay(1000);       }          delay()       使程序暂停设定期间(单位毫秒)。(一秒等于1000毫秒)       参数:ms:暂停毫秒数(unsigned long)       例子:       ledPin = 13 / / LED连接到数字13脚       void setup()       {           pinMode(ledPin, OUTPUT);      // 设立引脚为输出       }       void loop()       {           digitalWrite(ledPin, HIGH);   // 点亮LED           delay(1000);                  // 等待1秒           digitalWrite(ledPin, LOW);    // 灭掉LED           delay(1000);                  // 等待一秒       }       虽然创立一种使用delay()闪烁LED很简朴,并且许多例子将很短delay用于消除开关抖动,delay()的确拥有诸多明显缺陷。在delay函数使用过程中,读取传感器值、计算、引脚操作均无法执行,因而,它所带来后果就是使其她大多数活动暂停。其她操作定期办法请参加millis()函数和它下面例子。大多数纯熟程序员普通避免超过10毫秒delay(),除非arduino程序非常简朴。       但某些操作在delay()执行时任然可以运营,由于delay函数不会使中断失效。通信端口RX接受到得数据会被记录,PWM(analogWrite)值和引脚状态会保持,中断也会按设定执行。          delayMicroseconds()       使程序暂停指定一段时间(单位微秒)。一毫秒等于一千微秒,一秒等于1000000微秒。 当前,可以产生最大延时精确值是16383。这也许会在将来Arduino版本中变化。对于超过几千微秒延迟,你应当使用delay()代替。       例子:       int outPin = 8;                 // digital pin 8       void setup()       {           pinMode(outPin,OUTPUT); //设立为输出数字管脚       }       void loop()       {           digitalWrite(outPin,HIGH); //设立引脚高电平           delayMicroseconds(50);        // 暂停50微秒           digitalWrite(outPin, LOW);    // 设立引脚低电平           delayMicroseconds(50);        // 暂停50微秒       }      数学运算       min()       max()       abs()       constrain(x,a,b)【将一种数约束在一种范畴内】       map(value, fromLow, fromHigh, toLow, toHigh)       value:需要映射值        fromLow:当前范畴值下限        fromHigh:当前范畴值上限        toLow:目的范畴值下限        toHigh:目的范畴值上限       例子:       void setup(){}       void loop()       {           int val = analogRead(0);           val = map(val, 0, 1023, 0, 255);           analogWrite(9, val);       }       数学实现       long map(long x, long in_min, long in_max, long out_min, long out_max)       {         return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;       }          pow(base, exponent)     sqrt(x)      三角函数       sin()       cos()       tan()      随机数       randomSeed()【随机数种子】     random()【random(max),random(min, max)】      位操作       lowByte()   取一种变量(例如一种字)低位(最右边)字节。       highByte()  提取一种字节高位(最左边),或一种更长字节第二低位。       bitRead()   读取一种数位。bitRead(x, n) X:想要被读取数 N:被读取位,0是最重要(最右边)位    该位值(0或1)       bitWrite()  在位上写入数字变量   bitWrite(x, n, b)   X:要写入数值变量 N:要写入数值变量位,从0开始是最低(最右边)位 B:写入位数值(0或1)       bitSet()    为一种数字变量设立一种位    bitSet(x, n)    X:想要设立数字变量 N:想要设立位,0是最重要(最右边)位       bitClear()  清除一种数值型数值指定位(将此位设立成 0) bitClear(x, n)  X:指定要清除位数值 N:指定要清除位位置,从0开始,0 表达最右端位       bit()   计算指定位值(0位是1,1位是2,2位4,以此类推) bit(n)  需要计算位      设立中断函数       attachInterrupt()       attachInterrupt(interrupt, function, mode)       当发生外部中断时,调用一种指定函数。当中断发生时,该函数会取代正在执行程序。大多数Arduino板有两个外部中断:0(数字引脚2)和1(数字引脚3)。       arduino Mege有四个外部中断:数字2(引脚21),3(20针),4(引脚19),5(引脚18)          interrupt:中断引脚数        function:中断发生时调用函数,此函数必要不带参数和不返回任何值。该函数有时被称为中断服务程序。        mode:定义何时发生中断如下四个contstants预定有效值:       LOW 当引脚为低电平时,触发中断       CHANGE 当引脚电平发生变化时,触发中断       RISING 当引脚由低电平变为高电平时,触发中断       FALLING 当引脚由高电平变为低电平时,触发中断.          当中断函数发生时,delya()和millis()数值将不会继续变化。当中断发生时,串口收到数据也许会丢失。你应当声明一种变量来在未发生中断时储存变量。       在单片机自动化程序中当突发事件发生时,中断是非常有用,它可以协助解决时序问题。一种使用中断任务也许会读一种旋转编码器,监视顾客输入。       如果你想以保证程序始终抓住一种旋转编码器脉冲,从来不缺少一种脉冲,它将使写一种程序做任何事情都要非常棘手,由于该筹划将需要不断轮询传感器线编码器,为了赶上脉冲发生时。其她传感器也是如此,如试图读取一种声音传感器正试图赶上一按,或红外线槽传感器(照片灭弧室),试图抓住一种硬币下降。在所有这些状况下,使用一种中断可以释放微控制器来完毕其她某些工作。          例子:       int pin = 13;       volatile int state = LOW;               void setup()       {           pinMode(pin, OUTPUT);           attachInterrupt(0, blink, CHANGE);       }       void loop()       {           digitalWrite(pin, state);  
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服