Arduino: シリアル通信で LED 制御 & 割り込み処理

Mac から Arduino シリアル通信で LED のオンオフと、それに同期したエッジの割り込み検出を試してみた。

回路図。LED を付けてみた。

// ---------------------------------
// LED control 
// ---------------------------------
int ledpin = 13;
int state = LOW;
volatile int linebreak = 0;
int linebreak_max = 40;
int delaytime = 1000;

void setup(){
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);
  attachInterrupt(0, edgedetect, RISING); // Digital Input 3PIN
}

void loop(){
   if(Serial.available()>0){
      switch (Serial.read()){
        case '1':
          state = HIGH;
          digitalWrite(ledpin, state);
          break;  
        case '0':
          state = LOW;
          digitalWrite(ledpin, state);
          break;  
        default:
          break;
      }
    }
    
  switch (state){
    case 0:
      Serial.print('.');
      linebreak += 1;
      break;
    case 1:
      Serial.print('o');
      linebreak += 1;
      break;
    default:
      break;
  }
    delay(delaytime);
    if(linebreak > linebreak_max){
      Serial.println("");
      linebreak = 0;
    }
}

void edgedetect(){
  Serial.print("e");
  linebreak += 1;
}

同時に表示されるコンソール。