IM920sLとarduinoを使って文字の送受信をしたい
解決したいこと
送信側・受信側をarduinoにのせて、ボタンを押すと文字が送信され、受信側が特定の文字を受信したらLEDを点灯させるようにしたいのですが、どのボタンを押しても-1を受信し続けて、if(IM920Serial.available())の中に進むことができません。
解決方法を教えて頂きたいです。
※送信側・受信側は両方ともarduino→IM無線シールド→IM920c用変換アダプタ→IM920sL のようにモジュールをのせていています。
送信側
#include <SoftwareSerial.h>
SoftwareSerial IM920Serial(8,9); // RX, TX
void setup() {
IM920Serial.begin(19200);
Serial.begin(19200);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
}
void loop() {
IM920Serial.print("ECIO\r\n");
if(digitalRead(4)==LOW){
IM920Serial.print("TXDU 0002,");
IM920Serial.print('A');
IM920Serial.print("\r\n");
delay(50);
}
if(digitalRead(5)==LOW){
IM920Serial.print("TXDU 0002,");
IM920Serial.print('W');
IM920Serial.print("\r\n");
delay(50);
}
if(digitalRead(6)==LOW){
IM920Serial.print("TXDU 0002,");
IM920Serial.print('D');
IM920Serial.print("\r\n");
delay(50);
}
if(digitalRead(7)==LOW){
IM920Serial.print("TXDU 0002,");
IM920Serial.print('S');
IM920Serial.print("\r\n");
delay(50);
}
}
受信側
#include <SoftwareSerial.h>
SoftwareSerial IM920Serial(8, 9);
char i[100];
int j = 0;
void setup() {
Serial.begin(19200);
IM920Serial.begin(19200);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(10, INPUT); //busy
digitalWrite(4, HIGH); //確認
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
delay(1000);
Serial.println("START");
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
IM920Serial.print("ECIO\r\n");
}
void loop() {
if (IM920Serial.available()) {
while (Serial.available() || Serial.read() != '\n') {
i[j] = IM920Serial.read();
j++;
}
j = 0;
if (i == 'A') {
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
if (i == 'W') {
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
if (i == 'D') {
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
}
if (i == 'S') {
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
}
delay(50);
}
自分で試したこと
送信側の送信コマンドを1つにまとめたり、DCIO設定にしてもTXDAにしても変化なし。
PCにteratermで表示するのはうまくいって、ボタンを押すと送信した文字が表示されていました。
0