osa1 feed

Arduino ile ilk denemeler

July 6, 2011 - Tagged as: python, pygame, tr.

Dün ilk Arduino’m elime geçti. Ne olup bittiğini biraz kavradıktan sonra bugün ilk denemelerimi yapmaya başladım. Aşağıdak, Python ile Arduino’ya serial port üzerinden komut gönderme denemelerimin ilki:

Arduino’nun yaptığı, serial port’u dinleyip, gelen verinin 0’dan büyük bir takam olduğunu varsayarak(val -= '0'), bu veriye göre ledleri yakıp söndürmek.

#define ledPin1 13
#define ledPin2 12
#define ledPin3 11

int val = 0;

void setup() {
    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
    Serial.begin(9600);
}

void loop () {
    if (Serial.available()) {
        val = Serial.read();
        val -= '0';

        if (val == 1) {
            digitalWrite(ledPin1, HIGH);
        } else if (val == 2) {
            digitalWrite(ledPin2, HIGH);
        } else if (val == 3) {
            digitalWrite(ledPin3, HIGH);
        } else if (val == 4) {
            digitalWrite(ledPin1, LOW);
        } else if (val == 5) {
            digitalWrite(ledPin2, LOW);
        } else if (val == 6) {
            digitalWrite(ledPin3, LOW);
        }
    }
}

Python ve Pygame ile de klavyeyi izleyip, tuşların basılması veya bırakılması durumlarında serial port’a gerekli verileri gönderdim:

import serial
import pygame

s = serial.Serial('/dev/ttyACM2', 9600)
screen = pygame.display.set_mode((100, 100))
clock = pygame.time.Clock()

keydwn = {pygame.K_LEFT : "1",
          pygame.K_RIGHT: "2",
          pygame.K_DOWN : "3"}

keyup  = {pygame.K_LEFT : "4",
          pygame.K_RIGHT: "5",
          pygame.K_DOWN : "6"}

running = 1
while running:
    screen.fill((00, 00, 00))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            s.write(keydwn.get(event.key, ""))
        elif event.type == pygame.KEYUP:
            s.write(keyup.get(event.key, ""))

    time = clock.tick(30)

İlk deneme için gayet basit ve güzel :) . Aslında amacım, Python ve Pygame ile yaptığım şeyleri Clojure ile(Pygame kısmı için AWT gerekecekti sanırım) yapmaktı ama sırt ağrım bir yerden sonra dayanılmaz hale geldi(zaten çalışma ortamım rahat değil, bir de Arduino için masaya eğilince) ve bir an önce bitirmeye çalıştım. Bundan sonraki denemelerimi Clojure ile yapmaya çalışacağım.

Onun dışında, Arduino kodunu Pardus ortamında bir türlü derleyemedim, gerekli kütüphaneler/bağımlılıklar yüzünden. Bir ara onunla uğraşacağım.