2016-07-20 25 views
0

Ich bin auf der Suche nach Arduino Controls und Processing Interface zu integrieren. In meinem Arduino-Code, gibt es drei Tasten an Pin a1, a0 und d0 (alle digitalRead).Integrieren von Arduino und Processing - Button-Counter

int x;// assigned to A0 input 
int y;// assigned to A1 input 
int z; //assigned to D0 input 
int votes[3]={0,0,0}; 

void setup() { 
    // initialize the serial communication 
    Serial.begin(9600); 

    while(!Serial); 
} 

void loop() { 
    // first we need to read the values from the BUTTONS 

    x = digitalRead(A0); 

    y = digitalRead(A1); 

    z = digitalRead(0); 

    if(digitalRead(A0) == HIGH) 
    { 
    Serial.print("cat1 ");     
    Serial.print(votes[0]=votes[0]+1); 
    Serial.print("\n"); 
    } 
    else if(digitalRead(A1) == HIGH) 
    { 
    Serial.print("cat2 "); 
    Serial.print(votes[1]=votes[1]+1); 
     Serial.print("\n"); 
    } 
    else if(digitalRead(0) == HIGH) 
    { 
    Serial.print("cat3 "); 
    Serial.print(votes[2]=votes[2]+1); 
    Serial.print("\n"); 
    } 

    delay(200); 
} 

Ich würde die Zähler wie jedes Mal, wenn die Taste in der Verarbeitung als Balkendiagramm wird zu erhöhen gedrückt und Display. Immer wenn die Taste gedrückt wird, wird das Balkendiagramm um einen bestimmten Betrag erhöht. In diesem Fall möchte ich eine der drei Linien (die zu drei Tasten gehören) zeichnen, wenn sie gedrückt wird.

Die Codeverarbeitung ist unter:

import processing.serial.*; 

// Serial Port variables 
Serial myPort; 
String buff = ""; 
String buff1 = ""; 
String buff2 = ""; 
int index = 0; 
int NEWLINE = 10; 
// Store the last 256 values from the sensors so we can draw them. 
int[] valuesx = new int[256]; 
int[] valuesy = new int[256]; 
int[] valuesz = new int[256]; 

void setup() 
{ 
    // set size of the window 
    size(512, 512); 
    // turn on anti-aliasing, this makes things look smoother 
    smooth(); 

    println(Serial.list()); // use this to determine which serial port is your Arduino 
    myPort = new Serial(this, Serial.list()[0], 9600); 
    myPort.bufferUntil('\n'); 
} 

// draw() happens every frame of the sketch. This is where all the calculations are made. 
// When draw() is finished executing, it executes again, over and over. 
void draw() { 
    // set the background to purple 
    background(87, 36, 124); 
    // set stroke weight(thickness of the line) to 5 pixels 
    strokeWeight(5); 

    for (int i = 0; i < 255; i++) { 

    stroke(247, i); 
    // draw the line (x1, y1, x2, y2) 
    line(1, valuesx[i], 1, valuesx[i + 1]); 
    line(5, valuesy[i], 5, valuesy[i + 1]); 
    line(10, valuesz[i], 10, valuesz[i + 1]); 
    } 

    // Check the Serial port for incoming data 
    while (myPort.available() > 0) { 
    // if there is data waiting... 
    // execute serialEvent() function. Look below to see how SerialEvent works. 
    serialEvent(myPort.read()); 
    } 
} 

// serialEvent controls how incoming serial data from the Arduino module is handled 
void serialEvent(int serial) 
{ 
    if (serial != NEWLINE) { 
    // Store all the characters on the line. 
    buff += char(serial); 
    } 
    else { 
    // The end of each line is marked by two characters, a carriage 
    // return and a newline. We're here because we've gotten a newline, 
    // but we still need to strip off the carriage return. 
    buff = buff.substring(0, buff.length()-1); 
    index = buff.indexOf(","); 
    buff1 = buff.substring(0, index); 
    buff2 = buff.substring(index+1, buff.length()); 

    // Parse the String into an integer. We divide by 4 because 
    // analog inputs go from 0 to 1023 while colors in Processing 
    // only go from 0 to 255. 
    int x = Integer.parseInt(buff1)/2; 
    int y = Integer.parseInt(buff2)/2; 

    // Clear the value of "buff" 
    buff = ""; 

    // Shift over the existing values to make room for the new one. 
    for (int i = 0; i < 255; i++) 
    { 
     valuesx[i] = valuesx[i + 1]; 
     valuesy[i] = valuesy[i + 1]; 
    } 

    // Add the received value to the array. 
    valuesx[255] = x; 
    valuesy[255] = y; 
    } 
} 

Leider ist hier der Fehler, dass ich, wenn ich eine Taste drücken. processing_error

Antwort

0

Es sieht aus wie Sie buff erwar ein Komma enthalten, aber es funktioniert nicht.

Wenn Sie indexOf(",") aufrufen, gibt es -1 um anzuzeigen, dass kein Komma gefunden:

index = buff.indexOf(","); 

Dann, wenn Sie substring() nennen, sind Sie in -1 als index vorbei, der kein gültiger Parameter ist :

buff1 = buff.substring(0, index); 

Das verursacht den Fehler. Nun wird Ihre nächste Frage lauten: Warum enthält buff kein Komma?

Und die Antwort darauf hängt davon ab, was Sie von Ihrem Arduino erwarten. Versuchen Sie, den Wert von buff auszudrucken, um zu sehen, was es ist.

Ich weiß nicht viel über Arduino, aber ich sehe nirgends in diesem Code, der ein Komma druckt.