前提・実現したいこと
Arduinoへシリアル通信を使って周波数と長さのデータを送って音を鳴らしたいです。
送る形式は・・・周波数,長さ,・・・,周波数,長さ,
(例)100,1000,200,1000,300,500,
これで100Hzが1秒、200Hzが1秒、300Hzが0.5秒なります。
発生している問題・エラーメッセージ
途中で音が鳴らなくなってしまいます。
Serial.printを用いて色々調査したところ、画像のようになりました。
1000,1000,1000,1000,1000,1000,・・・1000,1000,
と送ったところ、7回実行でき、8回目はできませんでした。
配列の中身を一つづつ確認したところ、途中で打ち切られたようです。
7回目までは1 0 0 0 , 1 0 0 0 とbuf[i]に入っていたのですが、
8回目に行こうとするときに 1 0 0 でとまりました。
本当なら 1 0 0 0 , 1 0 0 0 , 実行回数8 ・・・
になるはずです。
該当のソースコード
Arduino
1#define PIN 12 2 3char buf[20]; 4int data[2], i, a, c; 5void setup() 6{ 7 Serial.begin(9600); 8 pinMode(PIN, OUTPUT); 9} 10 11void AP() 12{ 13 if (Serial.available()) 14 { 15 buf[i] = Serial.read(); 16 Serial.println(buf[i]); 17 if (buf[i] == ',') 18 { 19 i = i + 1; 20 a = a + 1; 21 if (a == 2) { 22 c = c + 1; 23 Serial.println(c); 24 a = 0; 25 Serial.println(buf); 26 data[0] = atoi(strtok(buf, ",")); 27 data[1] = atoi(strtok(NULL, ",")); 28 Serial.println(data[0]); 29 Serial.println(data[1]); 30 tone(PIN, data[0], data[1]); 31 delay(data[1]); 32 noTone(PIN); 33 i = 0; 34 } 35 }else 36 i++; 37 } 38} 39 40void loop() { 41 AP(); 42} 43
補足情報(FW/ツールのバージョンなど)
Arduino
一日かけても分からなかったので、教えていただけるとありがたいです。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/25 05:51
2018/11/25 08:25 編集