arduino-processing
  • merhaba arkadaşlar, arduino ya yeni başladım processingden serial port aracılığıyla ledleri kontrol etmeye çalışıyorum fakat 2 ledi aynı anda yakamıyorum mesela klavyeden 'w' komutu gönderdiğimde bir led yanıyor aynı şekilde 's' komutu gönderdiğimde bir led yanıyor fakat w ve s komutunu aynı anda gönderemiyorum. Birde elimi tuştan çektiğimde yanan ledin sönmesini istiyorum yardımlarınızı bekliyorum arkadaşlar. arduino ve processing kodunu aşağıda verdim.

    ARDUINO CODE:

    char val;

    void setup()
    {
    pinMode(13, OUTPUT);
    pinMode(12, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(10, OUTPUT);

    Serial.begin(9600);
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    }

    void loop() {
    val = Serial.read();
    if(val!=-1)
    {
    switch(val)
    {
    case 'w':
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    break;

    case 's':
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, HIGH);
    digitalWrite(10, HIGH);
    break;

    case 'd':
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    break;

    case 'a':
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, HIGH);
    break;

    }
    }

    PROCESSING CODE:

    import processing.serial.*;PFont f;
    final static int NORTH = 1;
    final static int EAST = 2;
    final static int SOUTH = 4;
    final static int WEST = 8;
    int result;
    float x,y;
    Serial myPort;
    void setup() {
    size(512,400);
    frameRate(30);
    f = loadFont("CourierNew36.vlw");
    textAlign(CENTER);
    result = 0;
    x = width/2;
    y = height/2;
    println(Serial.list());
    myPort = new Serial(this, Serial.list()[0], 9600);
    myPort.bufferUntil('\n');
    }

    void draw() {
    background(0);
    switch(result) {
    case NORTH: y--; myPort.write("w"); break;
    case EAST: x++; myPort.write("d");break;
    case SOUTH: y++; myPort.write("s"); break;
    case WEST: x--; myPort.write("a");break;
    case NORTH|EAST: y--; x++; break;
    case NORTH|WEST: y--; x--; break;
    case SOUTH|EAST: y++; x++; break;
    case SOUTH|WEST: y++; x--; break;
    }
    fill(255);
    rect(x,y,10,10);
    }

    void keyPressed(){
    switch(key) {
    case('w'):case('W'):result |=NORTH;break;
    case('d'):case('D'):result |=EAST;break;
    case('s'):case('S'):result |=SOUTH;break;
    case('a'):case('A'):result |=WEST;break;
    }
    }

    void keyReleased(){
    switch(key) {
    case('w'):case('W'):result ^=NORTH;break;
    case('d'):case('D'):result ^=EAST;break;
    case('s'):case('S'):result ^=SOUTH;break;
    case('a'):case('A'):result ^=WEST;break;
    }
    }
  • aynı sorunu bende yasıyorum c# uzerınden arduıno ıle ledlerı kontrol etmem lazım trafık ısıkları ıcın fakat arduıno serı porttan gelen 3 deger aynı anda okumuyo
  • Switch methodu sadece tek bir durumu degerlendirir. Yani ikinci kavyeye basışınizda sadece son bastiğınız tusun komutlari calisir.
    Cözumu icin dongu ve tus basim kodlarinızı tekrar düzenlemelisiniz.
    Fiziksel kurgulamanizi yaptiktan sonra, bu kurguyu dogru sekilde koda donusturmelisiniz.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.