[Arduino] 在串口讀取多個字符串,並且轉換為數字數組


功能如題目。
在串口收到逗號分割的6串數字比如
100,200,45,4,87,99
然后在6個PWM端口3, 5, 6, 9, 10, 11輸出對應PWM值
代碼注釋很詳細了,就不再說明了。

 

//定義一個comdata字符串變量,賦初值為空值
    String comdata = "";
    //numdata是分拆之后的數字數組
    int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;
    void setup()
    {
    //定義0~6腳是輸出
      for(int i = 0; i < 6; i++) pinMode(PWMPin[i], OUTPUT);
      Serial.begin(9600);
    }
     
    void loop()
    {
    //j是分拆之后數字數組的位置記數
      int j = 0;
     
      //不斷循環檢測串口緩存,一個個讀入字符串,
      while (Serial.available() > 0)
      {
      //讀入之后將字符串,串接到comdata上面。
        comdata += char(Serial.read());
          //延時一會,讓串口緩存准備好下一個數字,不延時會導致數據丟失,
        delay(2);
        //標記串口讀過數據,如果沒有數據的話,直接不執行這個while了。
        mark = 1;
      }
     
      if(mark == 1)  //如果接收到數據則執行comdata分析操作,否則什么都不做。
      {
      //顯示剛才輸入的字符串(可選語句)
        Serial.println(comdata);
          //顯示剛才輸入的字符串長度(可選語句)
        Serial.println(comdata.length());
     
    /*******************下面是重點*******************/
    //以串口讀取字符串長度循環,
        for(int i = 0; i < comdata.length() ; i++)
        {
        //逐個分析comdata[i]字符串的文字,如果碰到文字是分隔符(這里選擇逗號分割)則將結果數組位置下移一位
        //即比如11,22,33,55開始的11記到numdata[0];碰到逗號就j等於1了,
        //再轉換就轉換到numdata[1];再碰到逗號就記到numdata[2];以此類推,直到字符串結束
          if(comdata[i] == ',')
          {
            j++;
          }
          else
          {
             //如果沒有逗號的話,就將讀到的數字*10加上以前讀入的數字,
             //並且(comdata[i] - '0')就是將字符'0'的ASCII碼轉換成數字0(下面不再敘述此問題,直接視作數字0)。
             //比如輸入數字是12345,有5次沒有碰到逗號的機會,就會執行5次此語句。
             //因為左邊的數字先獲取到,並且numdata[0]等於0,
             //所以第一次循環是numdata[0] = 0*10+1 = 1
             //第二次numdata[0]等於1,循環是numdata[0] = 1*10+2 = 12
             //第三次是numdata[0]等於12,循環是numdata[0] = 12*10+3 = 123
             //第四次是numdata[0]等於123,循環是numdata[0] = 123*10+4 = 1234
             //如此類推,字符串將被變成數字0。
            numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
          }
        }
        //comdata的字符串已經全部轉換到numdata了,清空comdata以便下一次使用,
        //如果不請空的話,本次結果極有可能干擾下一次。
        comdata = String("");
     
     
        //循環輸出numdata的內容,並且寫到PWM引腳
        for(int i = 0; i < 6; i++)
        {
          Serial.print("Pin ");
          Serial.print(PWMPin[i]);
          Serial.print(" = ");
          Serial.println(numdata[i]);
          analogWrite(PWMPin[i], numdata[i]);
          numdata[i] = 0;
        }
        //輸出之后必須將讀到數據的mark置0,不置0下次循環就不能使用了。
        mark = 0;
      }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 Arduino怎么連接多個字符串為一個長字符串,一次性沖串口 python中如何判斷一個字符串是否可以轉換為數字 C語言——輸入一個字符串,將連續數字字符轉換為數字學習筆記 C# List 轉換為List 、轉換為 string數組、轉換為一個字符串用分隔符 隔開 匹配多個字符串 python列表中的所有值轉換為字符串,以及列表拼接成一個字符串 C語言 字符二維數組(多個字符串)探討 求解 list中的所有值轉換為字符串,以及list拼接成一個字符串 python列表中的所有值轉換為字符串,以及列表拼接成一個字符串 在Python中,如何將一個字符串數組轉換成整型數組
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM