美文网首页我爱编程
arduino实例程序难点汇总

arduino实例程序难点汇总

作者: 麦牛2013 | 来源:发表于2018-04-15 22:19 被阅读167次

    basics

    analogreadserial

    bareminimum

    blink

    DigitalReadSerial主要使用设置引脚的状态为输出或者输入,将引脚置高或低,延时函数的应用,串口begin和串口打印,println和print的区别在于,前者有换行,局部变量和全局变量的定义,以及变量的类型,analogwrite表示pwm输出0-255,pinmode有三个选项分别为,input,output,input_pull,第三个为开启内部上拉电阻。之后不需要再接下拉电阻和电源,接个开关和地即可

    fade实例中fadeAmount = -fadeAmount,实现由5和-5之间的转换,使得brightness为0时每次加5,直到255,到255,fdeAmount变为-5,开始减小。if (brightness == 0 || brightness == 255) {

    fadeAmount = -fadeAmount ;

    }由该语句实现。

    ReadAnalogVoltage,

    该demo中出现float类型的变量,死循环函数可以直接用while(1);,或者while(1){},float类型在arduino语言中,只要有一个变量为小数,即可如,5.2/1023.0或者5.2/1023,或者5./1023等等都可以,经测试输出结果保留小数点后两位。

    digital

    blinkwithoutdelay

    该实例表示的是不用delay函数,实现led的一亮一灭,主要通过millis函数实现,将所有涉及状态转换的程序放在if (currentMillis - previousMillis >= interval) {

    }里,直到间隔差大于间隔时间,才去改变led的状态。该程序出现const,应该表示该变量不可更新。int state=low也是对的,unsigned long previousMillis = 0;上个状态定义为全局变量,无符号长型,const long interval = 1000;间隔也为全局变量,长型不变量,unsigned long currentMillis = millis();当前时间定义为局部变量,也是无符号长型,previousMillis和currentMillis都会被刷新,所以不能用const。改程序不会延时某些程序段,比delay函数好用。

    button

    该程序,通过判断某个输入引脚的状态,来控制led的亮灭。

    debounce

    该程序主要实现每按一下亮,再按一下灭,加入防抖算法,该方法只有在有上升沿到来时才会动作,if (reading != buttonState) {buttonState = reading;

    // only toggle the LED if the new button state is HIGH

    if (buttonState == HIGH) {

    ledState = !ledState;

    }该条件判断只有这次和上次不同时,才执行,只有这次为高电平时才改变状态。它们都在if ((millis() - lastDebounceTime) > debounceDelay) {}改程序内部,防抖,if (reading != lastButtonState) {

    // reset the debouncing timer

    lastDebounceTime = millis();

    }该判断不可去掉,去掉之后效果就不好了。

    digitalinputpullup

    pinMode(2, INPUT_PULLUP);数字引脚上拉,不用再接上拉下拉电阻和电源,

    Statechangedetection状态变换检测,if (buttonState != lastButtonState) {},lastButtonState = buttonState;这次与上次比较。取余符号为%。

    tonekeyboard

    tone(pin, frequency, duration),tone(pin, frequency),间隔单位us,unsigned long型,可以选择的,数组的定义 int notes[]={440,494,131};

    tonemelody

    数组定义int noteDurations[] = {

    4, 8, 8, 4, 4, 4, 4, 4

    };

    int(162.5)=162。noTone(pin)关闭发声。

    tonemultiple

    tonepitchfollower

    int thisPitch = map(sensorReading, 400, 1000, 120, 1500);将范围映射

    analog

    analoginoutserial

    Serial.print("sensor = ");

    Serial.print(sensorValue);

    Serial.print("\t output = ");

    Serial.println(outputValue);最后一个换行,\t为一个table间隔。

    analoginput

    analogwritemega

    mega提供14路8位pwm输出。引脚0-13,for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {

    pinMode(thisPin, OUTPUT);

    },连续定义为输出。for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {

    // fade the LED on thisPin from off to brightest:

    for (int brightness = 0; brightness < 255; brightness++) {

    analogWrite(thisPin, brightness);

    delay(2);

    }

    },for循环先内部再外部。

    calibration校准模拟传感器的最大最小值,

    millis()无参数,返回值为从板子运行的时间,无符号长型,单位ms,大约50天溢出,变为0。constrain(sensorValue, 0, 255);返回为中间的值。限制其输出为0-255之间,

    fading

    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {

    // sets the value (range from 0 to 255):

    analogWrite(ledPin, fadeValue);

    // wait for 30 milliseconds to see the dimming effect

    delay(30);

    },fadevalue+=5表示,每次加5赋值给fadevalue。delay(time)单位为us,

    smoothing

    ,主要用平均值的方法。

    定义数组,const int numReadings = 10;int readings[numReadings];数组赋值,for (int thisReading = 0; thisReading < numReadings; thisReading++) {

    readings[thisReading] = 0;}

    readings[readIndex] = analogRead(inputPin);数组赋值;total = total + readings[readIndex];

    // advance to the next position in the array:

    readIndex = readIndex + 1;数组每次加1。

    communciation

    ASCIItable

    while (!Serial) {

    ; // wait for serial port to connect. Needed for native USB port only

    }。没有串口连接就不往下执行,进入死循环。主要用在setup()函数中。

    Serial.print(value,format),format有BIN,OCT,HEX,默认十进制DEC,Serial.write意思Writes binary data to the serial port.Serial.write(33);就表示一个!符号。

    while (true) {

    continue;

    }

    }和while(1);相同

    for ( int x = 0; x < 255; x ++)

    {

    if (x > 40 && x < 120){      // create jump in values

    continue;

    }

    Serial.println(x);

    delay(50);

    },continue函数是在这里面循环,不出来,即跳过大于40小于120。

    Dimmer

    byte brightness;在值为0-255的变量可以用byte定义,if (Serial.available()) {

    // read the most recent byte (which will be from 0 to 255):

    brightness = Serial.read();

    // set the brightness of the LED:

    analogWrite(ledPin, brightness);

    },Serial.available()和Serial.read()函数的使用,Serial.read()返回字节输入!返回33,a返回97,返回为int型,Serial.available()

    if (Serial.read() == '\n') {}当读到某个字符时,Serial.print('\n');就是Serial.println();

    graph

    midi

    multiserial

    多串口if (Serial1.available()) {

    int inByte = Serial1.read();

    Serial.write(inByte);

    }将串口1的数据写到串口0。串口0的数据传送到串口1。

    physicalpixel

    ‘a’和97是等同的,if (incomingByte == 97) {},97可以换为‘a’,

    if (Serial.read() == '\n') {}读到换行字符,

    readasciistring

    Serial.parseInt()返回下一个整数,长型

    serialcallrespone

    while (Serial.available() <= 0) {},直到有数据进入串口,跳出循环。

    if(Serial.available())和while(Serial.available)和if(Serial.available()>0)还有while(Serial.available()<=0)的区别,

    Serial.available() 返回可读字节的数量。

    serialcallresponseascii

    serialevent

    字符串定义String inputString = ""; 布尔类型定义boolean stringComplete = false; inputString = "";字符串置空。char inChar = (char)Serial.read();将读的数据转换为字符,加起来。在两次loop函数之间执行。

    virtualcorlormixier

    control

    arrays

    int ledPins[] = {
      2, 7, 4, 6, 5, 3
    };

     for (int thisPin = 0; thisPin < pinCount; thisPin++) {
        pinMode(ledPins[thisPin], OUTPUT);
      }用数组设置不连续的引脚的输出模式。若引脚连续直接用for循环即可实现。

    inputString.reserve(200);

    reverse的功能参见上面连接讲解,

    For Loop Iteration

    ifstatementconditional

    switchcase

    switch (range) {

    case 0:    // your hand is on the sensor

    Serial.println("dark");

    break;

    case 1:    // your hand is close to the sensor

    Serial.println("dim");

    break;

    case 2:    // your hand is a few inches from the sensor

    Serial.println("medium");

    break;

    case 3:    // your hand is nowhere near the sensor

    Serial.println("bright");

    break;

    },switch的用法,

    switchcase2

    switch (inByte) {

    case 'a':

    digitalWrite(2, HIGH);

    break;

    case 'b':

    digitalWrite(3, HIGH);

    break;

    case 'c':

    digitalWrite(4, HIGH);

    break;

    case 'd':

    digitalWrite(5, HIGH);

    break;

    case 'e':

    digitalWrite(6, HIGH);

    break;

    default:

    // turn all the LEDs off:

    for (int thisPin = 2; thisPin < 7; thisPin++) {

    digitalWrite(thisPin, LOW);

    }

    },switch加defaut

    whilestatementconditional

    该程序通过while实现校准最大最小值,当读到按钮按下,开始校准,while (digitalRead(buttonPin) == HIGH) {

    calibrate();

    }

    void calibrate() {

    // turn on the indicator LED to indicate that calibration is happening:

    digitalWrite(indicatorLedPin, HIGH);

    // read the sensor:

    sensorValue = analogRead(sensorPin);

    // record the maximum sensor value

    if (sensorValue > sensorMax) {

    sensorMax = sensorValue;

    }

    // record the minimum sensor value

    if (sensorValue < sensorMin) {

    sensorMin = sensorValue;

    }

    }

    sensor

    adxl3xx

    可以将模拟或者数字引脚定义为vcc和gnd,先设为输出out,digitalWrite(18, LOW);

    digitalWrite(19, HIGH);

    }即将a4设为gnd,a5设为vcc

    knock

    Memsic2125

    pulsein(pin,value)pin为int类型,value为high或者low,timeout可选参数,返回值为脉冲的时间单位us,为unsigned long,或者如果没有脉冲返回0,timeout类型为unsigned long,默认为1s,等待脉冲完成的时间。

    脉冲宽度转换为加速度的计算方法,

    ping

    340m/s可转化为29us/cm,则t/29/2即的距离单位cm,1m等于39.37inch,则340m/s转换为74us/inch,t/74/2即为距离单位inch,t的单位为us。long型,自定义函数带参数,有返回值,用return

    long microsecondsToCentimeters(long microseconds) {

    // The speed of sound is 340 m/s or 29 microseconds per centimeter.

    // The ping travels out and back, so to find the distance of the

    // object we take half of the distance travelled.

    return microseconds / 29 / 2;

    }为long型返回值。millisecond毫秒ms,microseconds微秒us

    display

    bargraph

    柱状图,通过运用数组的知识,实现小于动态值亮,低于动态值得灭,

    for (int thisLed = 0; thisLed < ledCount; thisLed++) {

    // if the array element's index is less than ledLevel,

    // turn the pin for this element on:

    if (thisLed < ledLevel) {

    digitalWrite(ledPins[thisLed], HIGH);

    }

    // turn off all pins higher than the ledLevel:

    else {

    digitalWrite(ledPins[thisLed], LOW);

    }

    }

    rowcolumnscanning

    const int row[];和const int row[8];int row[];这三种都是错误的,int row[8]是对的。可能和const有关。

    const int row[8] = {

    2, 7, 19, 5, 13, 18, 12, 16

    };或者int row[8]; 数组的另一种定义,方括号的8可有可无。

    int pixels[8][8];8必须有没有赋值的数组定义。二维数组

    8*8点阵控制,for (int x = 0; x < 8; x++) {

    for (int y = 0; y < 8; y++) {

    pixels[x][y] = HIGH;

    }全部置高灭。

    }二维数组初始化,二维数组所有值赋值为高,点阵全灭,

    readSensors()该函数实现传感器定位点阵中某个led,不显示,refreshscreen()该函数实现点阵的刷新,即将传感器读到的显示出来。

    void refreshScreen() {

    // iterate over the rows (anodes):

    for (int thisRow = 0; thisRow < 8; thisRow++) {

    // take the row pin (anode) high:

    digitalWrite(row[thisRow], HIGH);

    // iterate over the cols (cathodes):

    for (int thisCol = 0; thisCol < 8; thisCol++) {

    // get the state of the current pixel;

    int thisPixel = pixels[thisRow][thisCol];

    // when the row is HIGH and the col is LOW,

    // the LED where they meet turns on:

    digitalWrite(col[thisCol], thisPixel);

    // turn the pixel off:

    if (thisPixel == LOW) {

    digitalWrite(col[thisCol], HIGH);

    }

    }

    // take the row pin low to turn off the whole row:

    digitalWrite(row[thisRow], LOW);

    }

    }一排然后所有列,二排所有列,等等,将每个坐标用digitalwrite()写一遍,低电平的就亮了int thisPixel = pixels[thisRow][thisCol];pixels[x][y] = LOW;亮过之后写高灭,然后将第一排置低,不使能。第二排开始。

    digitalWrite(col[thisPin], HIGH);setup()函数中,表示列为二极管的负端,只要,负端置高,点阵全灭。

    x = 7 - map(analogRead(A0), 0, 1023, 0, 7);这种表示方法,可将头尾倒置,

    string

    characteranalysis

    Serial.print("You sent me: \'");这句程序表示打印出,you send me:'。用一个\后加你想打印出的字符,表示如何将一个'打印出来。

    Serial.write(thisChar);

    Serial.println(thisChar);有区别

    if (isDigit(thisChar))数字,if (isAlphaNumeric(thisChar))字母数字的,if (isAlpha(thisChar))字母的,if (isAscii(thisChar))ascii判断,if (isWhitespace(thisChar))空格,if (isControl(thisChar))控制字符,if (isGraph(thisChar)),if (isLowerCase(thisChar))小写字母,if (isPrintable(thisChar))可打印的,if (isPunct(thisChar))可发音的,if (isSpace(thisChar))空格,if (isUpperCase(thisChar))大写字母,if (isHexadecimalDigit(thisChar))16进制判断。

    while (true);死循环,Serial.println("\n\nAdding strings together (concatenation):");先空两行。

    Serial.println("\nAdding strings together (concatenation):");先空一行

    stringThree =  stringOne + 123;字符串加数字,得到字符串,stringThree =  stringOne + 'A';字符串加单个字符,stringThree =  stringOne +  "abc";字符串加字符串。long currentTime = millis();millis()函数返回值的类型,unsign long型

    stringaddtionoperator

    stringTwo = "The millis(): ";stringTwo.concat(millis());得到the millis():191,可以看出string.connect()函数可以将字符串与参数连接起来。

    stringcasechange

    String stringOne = "<html<head><body>";stringOne.toUpperCase();将srtringone中的字母转换为大写字母。返回值即改变原值。stringTwo.toLowerCase();该函数是小写转换,功能与上述函数一样。

    stringcharacter

    String reportString = "SensorReading: 456";char mostSignificantDigit = reportString.charAt(15);

    string.charat(15)为从0开始将15那个字符取出来,即第16个,不改变原值。reportString.setCharAt(13, '=');从0开始将13位的那个字符替换为等号。即将:替换为等号。

    stringcomparisionoperators

    Serial.println("StringOne == \"this\"");打印出stringone=="this",if (stringOne.equals(stringTwo))判断两个字符串是否相等。if (stringOne.equalsIgnoreCase(stringTwo))表示stringone忽略大写和string是否相等。不改变原值,if (stringOne.toInt() == numberOne)将stringone转换为int型,改变原值。stringOne = "2";

    stringTwo = "1";

    if (stringOne >= stringTwo) {

    Serial.println(stringOne + " >= " + stringTwo);

    }数字型的字符串也可进行比较。stringOne = String("Brown");

    stringOne = String("Brown");

    if (stringOne >"Charles") {

    Serial.println(stringOne + " < Charles");

    }字符串也可进行比较,通过首字母排序,若首字母一样,则比较第二个字母,依次向下。"Brown"和"Adams"前者大于后者,"Browle"和"Brown"前者小于后者。

    if (stringOne.compareTo(stringTwo) < 0)字符串1和字符串2比较,主要通过ascii码比较,从第一个字符开始比较,a是在A之后的,依次比较下去。

    stringconstructors

    stringOne =String(analogRead(A0), DEC);stringOne =  String(13);stringOne =  String(45, HEX);

    stringOne =  String(255, BIN);stringOne =  String(millis(), DEC);stringOne = String(5.698, 3);返回5.698。stringOne = String(5.698, 2);返回为5.70

    stringindexof

    String stringOne = "<html><head><body>";int firstClosingBracket = stringOne.indexOf('>');查找第一个>符号的位置。从0开始到5,int secondOpeningBracket = firstClosingBracket + 1;

    int secondClosingBracket = stringOne.indexOf('>', secondOpeningBracket);切换位置,从6开始查找下一个>符号。返回位置。

    int bodyTag = stringOne.indexOf("<body>");直接返回该字符串第一个字符所在位置。

    int firstListItem = stringOne.indexOf("<li>");

    int secondListItem = stringOne.indexOf("li", firstListItem + 1);第一个变量加1,主要目的为了查找第二个字符串。

    int lastOpeningBracket = stringOne.lastIndexOf('<');直接查找最后一个<符号所在位置,字符也可以换为字符串。

    int lastParagraph = stringOne.lastIndexOf("<p");
    int secondLastGraf = stringOne.lastIndexOf("<p",lastParagraph - 1);第一个变量位置为为倒数第一个<p字符的位置,减一之后为查找倒数第二个<p字符服务。

    stringlength

    String txtMsg = "";定义空字符串,String("Brown");txtMsg.length();返回字符串的长度。

    stringlengthtrim

    String stringOne = "Hello!      ";空格也是字符。stringOne.trim();可将空格去掉。改变原值。

    stringreplace

    String stringOne = "<html><head><body>";字符串定义。stringTwo.replace("<", "</");字符串替换。String leetString = normalString;

    leetString.replace('o', '0');

    leetString.replace('e', '3');

    stringstartswithendswith

    if (stringOne.startsWith("HTTP/1.1")) {

    Serial.println("Server's using http version 1.1");

    }字符串开始以"HTTP/1.1"条件判断。默认的第二个参数为位置0,

    if (stringOne.startsWith("200 OK", 9)) {

    Serial.println("Got an OK from the server");

    }从9位置开始判断200 ok或者其他字符串,是否完全一致。

    if (sensorReading.endsWith("0"))判断该字符串是否以0结尾,

    stringsubstring

    if (stringOne.substring(19) == "html")字符串从19到最后,是否为"html",if (stringOne.substring(14, 18) == "text")判断14位到18位是否为"text"。

    stringtoint

    串口监视器, no line ending没有结束符,newline换行符,carriage return回车符,both nl&cr二者兼有。

    \n表示换行符,int inChar = Serial.read();

    if (isDigit(inChar)) {

    // convert the incoming byte to a char

    // and add it to the string:

    inString += (char)inChar;

    }判断读到的值是否为数字,是的话执行,转换为字符串加起来,if (inChar == '\n')表示读到换行符时,Serial.println(inString.toInt());将字符串转换为int型打印出来。转换改变原值为int型。while (Serial.available() > 0) {},

    usb该目录下的实例主要不是uno。

    keyboard

    keyboardlogout

    该实例针对leonardo或者micro

    switch (platform) {

    case OSX:

    Keyboard.press(KEY_LEFT_GUI);

    // Shift-Q logs out:

    Keyboard.press(KEY_LEFT_SHIFT);

    Keyboard.press('Q');

    delay(100);

    Keyboard.releaseAll();

    // enter:

    Keyboard.write(KEY_RETURN);

    break;

    case WINDOWS:

    // CTRL-ALT-DEL:

    Keyboard.press(KEY_LEFT_CTRL);

    Keyboard.press(KEY_LEFT_ALT);

    Keyboard.press(KEY_DELETE);

    delay(100);

    Keyboard.releaseAll();

    //ALT-l:

    delay(2000);

    Keyboard.press(KEY_LEFT_ALT);

    Keyboard.press('l');

    Keyboard.releaseAll();

    break;

    case UBUNTU:

    // CTRL-ALT-DEL:

    Keyboard.press(KEY_LEFT_CTRL);

    Keyboard.press(KEY_LEFT_ALT);

    Keyboard.press(KEY_DELETE);

    delay(1000);

    Keyboard.releaseAll();

    // Enter to confirm logout:

    Keyboard.write(KEY_RETURN);

    break;

    },switch中不用default的情况。

    starterkit_basickit

    p02_spaceshipinterface

    p03_loveomter

    float voltage = (sensorVal / 1024.0) * 5.0;模拟口电压转换,为float类型

    p04_colormixinglamp

    p05_servomoodindicator

    Servo myServo;  // create a servo object创建一个对象,myServo.attach(9); // attaches the servo on pin 9 to the servo object引脚绑定,angle = map(potVal, 0, 1023, 0, 179);舵机角度整定,myServo.write(angle);写角度,

    p06_lighttheremin

    while (millis() < 5000) {

    // record the maximum sensor value

    sensorValue = analogRead(A0);

    if (sensorValue > sensorHigh) {

    sensorHigh = sensorValue;

    }

    // record the minimum sensor value

    if (sensorValue < sensorLow) {

    sensorLow = sensorValue;

    }

    }花5秒整定最大最小值。

    p07_keyboard

    noTone(8);为关闭蜂鸣器。

    p08_digitalhuorglass

    lcdcrystal

    autoscroll

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//rs,en,d4,d5,d6,d7初始化对象r/w接地,lcd.begin(16, 2);初始化列和行lcd.setCursor(0, 0);设置光标位置为(0,0),lcd.print(thisChar);lcd显示字符,lcd.clear();清屏,lcd.autoscroll();
    lcd.noAutoscroll();关闭滚动模式。lcd.setCursor(16, 1);设置光标到1行16列。

    blink

    lcd.autoscroll(),打开滚动模式,lcd.noBlink();光标停止闪烁,lcd.blink();闪烁光标。

    lcd.print("hello, world!");在屏幕上显示内容

    cursor

    lcd.noCursor();隐藏光标,lcd.cursor();显示光标。

    customcharacter

    byte heart[8] = {

    0b00000,

    0b01010,

    0b11111,

    0b11111,

    0b11111,

    0b01110,

    0b00100,

    0b00000

    };二进制数组定义。

    lcd.createChar(0, heart);自造字符,最多5*8像素,编号0-7,lcd.write(byte(0));

    display

    lcd.noDisplay();关闭显示,lcd.display();打开显示,lcd.setCursor(0, 1);设置光标位置,坐标的第一个数为列,第二个数为行。


    helloworld

    scroll

    lcd.scrollDisplayLeft();把显示的内容向左滚动一格,lcd.scrollDisplayRight();把显示的内容向右滚动一格。

    serialdisplay

    if (Serial.available())

    while (Serial.available() > 0) {

    // display each character to the LCD

    lcd.write(Serial.read());

    }。用lcd写出来。

    serial.available()函数返回值,the number of bytes available to read

    setcursor

    lcd.setCursor(thisCol, thisRow);设置坐标的位置。lcd.write(thisLetter);将数据写到屏幕上。

    textdirection

    lcd.cursor();光标显示打开。

    lcd.leftToRight(),该函数从左往右显示。lcd.home();把光标移回左上角。

    onewire

    ds18x20_temperature

    OneWire  ds(2);定义一个对象,

    宏定义

    #define Aims_Range 30

    #define Barrier_Range    30

    #define Scanning_Range    10

    #define Alarm            1

    #define Safety            0

    枚举类型的数据结构

    typedef enum

    {

    Arm_Start,

    Arm_Turn_Left,

    Arm_Turn_Right,

    Arm_Stretch1,              //后,初始位置

    Arm_Stretch2,              //中,检测位置

    Arm_Stretch3,              //钱,抓取位置

    Arm_Up,

    Arm_Down,

    Hand_Up,

    Hand_Down,

    Hand_Open,

    Hand_Close

    }Type_Machine_Hand;//Type_Run成为一种新的数据类型。

    Type_Run        Run;用Type_Run定义这种类型的变量。

    Type_DC_Motor    DC_Motor_Left;

    Servo servo_spin;初始化对象。

    int Deg_Buffer[3]={0,Servo_Spin_Init_Deg,Servo_Hand_Init_Deg};  //数组第一个没用为的是对其//定义一个数组。

    arduino核心库中定义了常数pi,int为32位,2的32为t,则-t/2----t/2-1,unsignde int (0----t-1),long 型为32位,和int的范围一样。unsigned long和unsigned int一样。short类型16位,范围为-t/2----t/2-1。

    字符型变量占一个字节。布尔占用一个字节空间。arduino中的浮点变量有两种类型。float和double,字符串有

    单个数码管,

    const unsigned char LED8Code[]={//共阳极数码管。位为零即亮。

    0xC0,    // 0

    0xF9,    // 1

    0xA4,    // 2

    0xB0,    // 3

    0x99,    // 4

    0x92,    // 5

    0x82,    // 6

    0xF8,    // 7

    0x80,    // 8

    0x90,    // 9

    0x88,    // A

    0x83,    // B

    0xC6,    // C

    0xA1,    // D

    0x86,    // E

    0x8E    // F

    };数码的16进制形式。

    j = bitRead( LED8Code[data],i);bitread函数读字节时从最低位置开始来读。所以引脚定义数组时,需要将引脚定义的dp放在最后,digitalWrite(LED8Pin[i], j);j = bitRead( LED8Code[data],i);因为数码管16进制是从dp-a,所以j也得从dp开始即将dp放在数组的最后端,即引脚是从(a-dp)pin。const unsigned char LED8Pin[]={

    6,7,8,10,11,13,12,9};//A B C D E F G Dp。

    return 关键字对测试一段代码很方便,不需“注释掉”大段的可能是错误的代码。将return放在错误的程序之前,错误的程序永远也不执行。

    终止一个函数,并向被调用函数并返回一个值,如果你想的话。这时你需要让return 加返回值。

    相关文章

      网友评论

        本文标题:arduino实例程序难点汇总

        本文链接:https://www.haomeiwen.com/subject/hrouzttx.html