mfstuy
@mfstuy

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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

1Answer

Arduino なになにを使っているのか分かりませんが、UARTなので、割り込みが使えるピンを指定する必要があります。
SoftwareSerial IM920Serial(8,9); // RX, TX
8, 9番ピンは割り込みが使えるピンでしょうか? Arduinoなんですか?

0Like

Your answer might help someone💌