#include <rxduino.h>void setup() {Serial.begin( 9600 ); // 9600bpsでポートを開くSerial.print("start"); // とりあえずスタート}void loop() { char c;int i = 0; // ループ用char str[20]; // 文字列格納用int a; for(;;){while(1) {if ( Serial.available() > 0 ) {c = Serial.read();if (c >= '0' && c <= '9') { // 数字の時は文字列追加str[i] = c;i++;if (i == 20-1) { // バッファが一杯になったときも終了str[i] = '\0'; // 文字列を終わらせるbreak;}} else if (i>0) { // 1文字以上受信していて数字以外の文字を受信した時は文字列受信終了str[i] = '\0'; // 文字列を終わらせるbreak;}}}int a = atoi(str); // int型に変換Serial.println( a ); // 出力}}
先ほど質問したものです。有難うございました。また質問です。笑
複数桁の数値を入力して、画面上に出すプログラムを書きました。(ネットからひっぱて来ました)
実際にやってみると、
①”start”と表示されない。
②1を入力して、エンターキー → 出力画面に1とでる。
次に1と入力すると、画面に11と出てしまう。
なぜでしょうか・・・。
度々の質問申し訳ありません。当方かなりプログラミングが苦手です。・・・
1.TeraTermの準備ができていない状態で送信している→Waitを置いてから送信する
2.改行コードの送信がCRになっている→ CR+LFにする
一部修正したものを掲示します。参考までに。
/*GR-SAKURA Sketch Template Version: V1.08*/#include <rxduino.h>#include <ctype.h>#define INTERVAL 100void 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 (isdigit( c )) { // 数字の時は文字列追加 cStr[i++] = c; /* 文字格納後、インデックスインクリメント*/ cStr[i] = '\0'; /* 終端処理 */ if (i + 1 == sizeof(cStr)) { // バッファが一杯になったときも終了 break; } }else if (i) { // 1文字以上受信していて数字以外の文字を受信した時は文字列受信終了 break; } } } Serial.println( cStr ); // 出力}
ソースとTeraTerm動作についてはもう少し踏み込んでブログの方で解説しています。(Profileからご参照ください)
それにしてもエディタが使いにくい…
ご連絡ありがとうございます。
delaytime(cStr)といった風に、delaytime()の()に任意の数字を入力したいのですが
どうしたらいいですか?
int a;
a=atoi(cStr);
delaytime(a);
これでできました!!合ってるかわかりませんが・・