シリアル通信
シリアル通信ができるってことは好きな言語で Arduino をコントロールできるってことなので試す。
以下 Arduino 側。シリアル通信で 'h' で LED オン、'l' で LED オフ。
// Serial - Gauche - Test - Arduino #define LED 13 int inByte; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { // Serial.println("x"); if (Serial.available() > 0) { inByte = Serial.read(); if (inByte == 'l') { digitalWrite(LED, LOW); } else if (inByte == 'h') { digitalWrite(LED, HIGH); } else if (inByte == 's') { delay(100); } Serial.print("AR: "); Serial.println(inByte, BYTE); Serial.print("\n"); delay(5); } }
以下は gauche 側。
;; 20090810 ;; gauche - arduino test (use gauche.termios) (define (arduino-info) (let ((arduino "/dev/cu.usbserial-A6008jmR")) (let* ((out (open-output-file arduino)) (termios (sys-tcgetattr out))) (format #t ";; speed: ~a~%" (sys-cfgetospeed termios)) (close-output-port out)))) (define (arduino-test msg) (let ((arduino "/dev/cu.usbserial-A6008jmR")) (let* ((out (open-output-file arduino)) (in (open-input-file arduino)) (termios (sys-tcgetattr out))) (format #t ";; speed: ~a~%" (sys-cfgetospeed termios)) (write-char msg out) (close-input-port in) (close-output-port out)))) ;; (arduino-test #\h) ;; (arduino-test #\l)
実はまだ挙動がおかしい。時々反応しなくなる。Arduino IDE でシリアルモニターを開くと治ったり。もう一息だなぁ。
多分いろいろと間違っている。