SoftwareSerialを実装してみたい

というわけで、簡単にRXを覗き見できたら良いのに・・・。

RXは、0番pinと接続されているので、
0番pinの立ち上がりを組み込みLED(たぶん13番pin)に反映すれば、
RXのLEDと同じ感じで点灯するのでは?
って思って書いたコードがこちら。

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode( 0, INPUT );
}

// the loop function runs over and over again forever
void loop() {
  int val = 0;
  while (1) {
    const int tmp = digitalRead(0);
    if ( val != tmp && tmp ) {
      digitalWrite(LED_BUILTIN, HIGH);
      delay(1);
      digitalWrite(LED_BUILTIN, LOW);
      delay(1);
    }

    val = tmp;
  }
}

シリアルモニタでボーレートを300まで落として、
「@」だけの長い文字列を送ると、だいたい思った通りの結果が得られた。
「@」を選んだのは、0x40なら立ち上がりが少ないから分かりやすいかなって。

あとは、適当にタイマーを使って、
SoftwareSerialを実装することになるんだけど、
やりたいのはMIDIの送受信なので、いつになることやら・・・。

追記 2019/06/23
組み込みLEDの光り方を、もう少しRXに寄せようと思って調整しました。
立ち下がりで光るようにしたバージョンです。

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode( 0, INPUT );
}

volatile int i;

// the loop function runs over and over again forever
void loop() {
  int val = 1;
  while (1) {
    const int tmp = digitalRead(0);
    if ( !tmp && val ) {
      digitalWrite(LED_BUILTIN, HIGH);
      for (i=0; i<768; i++) {
        int a = 0;
      }
      digitalWrite(LED_BUILTIN, LOW);
    }

    val = tmp;
  }
}

volatile int i;の位置、検討の余地ありありですね。
条件文の辺りも、もう少し何とかできそうだけど、この件はこれにて。
— ここまで —

おしまい。

Leave a Comment