2018年3月6日 星期二

關於及arduino的一些瑣碎小事

  • 使用arduino IDE的範例程式Fade, 使用D13作為LED。
    • arduino nano只會顯示亮暗, 沒有漸進變化過程
    • arduino micro能以on-board LED顯示漸亮漸暗
    • 原因分析:
      nano 的 D13 不支援PWM
      micro 的 D13支援PWM
  • arduino接上ubs電源時, on-board LED 一直快速閃爍, 線路連接的電子零件沒有通電運作
    • 這是透過USB供電時, 短路防護的信號
    • 但要留意, 若是透過RAW供電時, 則沒有短路防護。
  • 使用Serial.printf("%4.2f", floatVar) 得到結果為 ?
    • 原因分析:
      arduino IDE只支援C語法, 但是不支援float的格式語法, 必須另外寫程式來格式化輸出
    • 我的解決方法: (可以放在setup段來測試)
        Serial.begin(9600);
        //sprintf format test loop
        float celsius=-55.25;
        float fahrenheit;
        while(celsius<=155){
       
          fahrenheit = celsius * 1.8 + 32.0;
          Serial.print(celsius);Serial.print(" ");
          Serial.print(fahrenheit);Serial.print("  ");

          char *numC=(char *)"000.00C ";
          char *numF=(char *)"000.00F ";
          //arduino的printf format不支援float, double的格式, ex: %4.2f , 輸出會出現?
          //Serial.printf("%4.2fC  %4.2fF", celsius, fahrenheit);
          sprintf(numC, "%4i.%02i", int(celsius), int(abs(celsius-int(celsius))*100));
          sprintf(numF, "%4i.%02i", int(fahrenheit), int(abs(fahrenheit-int(fahrenheit))*100));
          Serial.print(numC);Serial.print(" ");Serial.print(numF);Serial.println(" ");
          celsius+=3.97;
        }
       
  • 在LCD上, 以單一字元顯示 ℃ 或 ℉
    • 定義℃ 或℉ 符號
    • 在LCD上印出自定符號
    • //在程式宣告段
      byte degC[8] = {
        B01000,
        B10100,
        B01000,
        B00011,
        B00100,
        B00100,
        B00011,
      };
      byte degF[8] = {
        B01000,
        B10100,
        B01000,
        B00111,
        B00100,
        B00111,
        B00100,
      };

      //在setup()段,
        lcd.createChar(0, degC);
        lcd.createChar(1, degF);

      //要印出字元時
      lcd.write(byte(0));  //印出 ℃
      lcd.write(byte(1));  //印出 ℉