シリアル通信 初心者です。教えてください。

#include <rxduino.h>
void setup({
Serial.begin9600 )// 9600bpsでポートを開く
Serial.print("start")// とりあえずスタート
}
void loop() { 
char c;
int 0// ループ用
char str[20]// 文字列格納用
int a;
 for(;;){
while(1{
if Serial.available({
Serial.read();
if (>= '0' && <= '9'// 数字の時は文字列追加
str[ic;
i++;
if (== 20-1// バッファが一杯になったときも終了
str[i'\0'// 文字列を終わらせる
break;
}
else if (i>0// 1文字以上受信していて数字以外の文字を受信した時は文字列受信終了
str[i'\0'// 文字列を終わらせる
break;
}
}
}
int atoi(str)// int型に変換
Serial.println)// 出力
}
}

先ほど質問したものです。有難うございました。また質問です。笑

複数桁の数値を入力して、画面上に出すプログラムを書きました。(ネットからひっぱて来ました)

実際にやってみると、

①”start”と表示されない。

②1を入力して、エンターキー → 出力画面に1とでる。

  次に1と入力すると、画面に11と出てしまう。

なぜでしょうか・・・。

度々の質問申し訳ありません。当方かなりプログラミングが苦手です。・・・

Parents
  • 1.TeraTermの準備ができていない状態で送信している→Waitを置いてから送信する

    2.改行コードの送信がCRになっている→ CR+LFにする

    一部修正したものを掲示します。参考までに。

    /*GR-SAKURA Sketch Template Version: V1.08*/
    #include <rxduino.h>
    #include <ctype.h>

    #define INTERVAL 100

    void setup(){

        pinMode(PIN_LED1, OUTPUT);
        Serial.begin(9600); // for USB CDC
        for(;digitalRead(PIN_SW) == 1;){
            digitalWrite(PIN_LED1, 1);                /* TeraTaermを起動・接続してからSwを押すこと */
            delay(500);
            digitalWrite(PIN_LED1, 0);
            delay(500);
        }
    }

    void loop(){
        char c;
        int i = 0; // ループ用
        char cStr[20]; // 文字列格納用
        
        Serial.println("start"); // 出力
        for(i = 0; i < sizeof(cStr);){
            if ( Serial.available() > 0 ) {
                c = Serial.read();
                if (isdigitc )) { // 数字の時は文字列追加
                    cStr[i++] = c;    /* 文字格納後、インデックスインクリメント*/
                    cStr[i] = '\0';   /* 終端処理 */
                    if (== sizeof(cStr)) { // バッファが一杯になったときも終了
                        break;
                    }
                }else if (i) { // 1文字以上受信していて数字以外の文字を受信した時は文字列受信終了
                    break;
                }
             }
        }
        Serial.println( cStr ); // 出力
    }


    ソースとTeraTerm動作についてはもう少し踏み込んでブログの方で解説しています。
    (Profileからご参照ください)

    それにしてもエディタが使いにくい…

  • ご連絡ありがとうございます。

    delaytime(cStr)といった風に、delaytime()の()に任意の数字を入力したいのですが

    どうしたらいいですか?

Reply Children