Python独習!

習得したPython知識をペイフォワード

Pythonでシリアル通信してArduinoをLチカさせる

とある測定器をRS232Cでリモートコントロールしたくて、Pythonのシリアル通信の仕方を学ぶ。まずは簡単なところからということで、Pythonから送られてきた数字(トリガー)をArduino側で識別してそれぞれに対してLチカの挙動を変える、というプログラムを作ってみた。

結果

0 : 消灯、1 : 点灯、2 : 5回点滅、その他 : 10回点滅、という条件分岐がちゃんとできている。
以下のPythonプログラムは"2"の動作のみ。

プログラム

Arduino
void setup(){
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop(){
  void flicker(int, int);
  int input = Serial.read();
  if(input != -1){
  Serial.println(input);
    switch(input){
      case '0':
        digitalWrite(LED_BUILTIN, LOW);
        break;
      case '1':
        digitalWrite(LED_BUILTIN, HIGH);
        break;
      case '2':
        flicker(5, 500);
        break;
      default:
        flicker(10, 100);
     }
  while(Serial.available())Serial.read();
  }
}

void flicker(int n, int intval){
  for(int i=0; i<n; i++){
    digitalWrite(LED_BUILTIN, HIGH);
    delay(intval);
    digitalWrite(LED_BUILTIN, LOW);
    delay(intval);
  }
}
Python
#SimpleSerial_001.py

import serial
from time import sleep 

ser = serial.Serial('COM3', 115200, timeout=0.1)
sleep(2)
ser.write(bytes('2', encoding='ascii'))
ser.close()
/* -----codeの行番号----- */