Pages: [1]   Go Down
Author Topic: serielle Kommunikation zwischen Processing und Ard  (Read 928 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 1
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich möchte gern übers Processing die Laufgeschwindigkeit von 6 LEDs steuern. Hierzu habe ich den Knight Rider Code umgeschrieben.
Leider ist die Kommunikation zwischen dem Arduino und Processing sehr langsam. Auch wenn ich die Baud Rate erhöhe ändert dies nichts Geschwindigkeit.
Vielleicht weiss einer von euch wie ich dieses Problem lösen kann.
Processing Code:
import processing.serial.*;
import cc.arduino.*;
Serial myPort; // Create object from Serial class
int val; // Data received from the serial port
void setup()
{
size(200, 200);
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
}
void keyPressed() {
if (key == 's') {
val += 10;
} else
if (key == 'd'){
val -= 10;
}
}
void draw() {
myPort.write(val);
// if (val <= 0) {
// val = 0;
//}
println (val);
}
Arduino Code:
int pinArray[] = {
3, 5, 6, 9, 10,11};
int count = 0;
int Speed;
void setup(){
Serial.begin(9600);
for (count=0;count<6;count++) {
pinModde(pinArray[count], OUTPUT);
}
}
void loop() {
if (Serial.available()){
Speed = Serial.read ();
for (count=0;count<5;count++) {
digitalWrite(pinArray[count], HIGH);
delay(Speed);
digitalWrite(pinArray[count + 1], HIGH);
delay(Speed);
digitalWrite(pinArray[count], LOW);
delay(Speed*2);
}
for (count=5;count>0;count--) {
digitalWrite(pinArray[count], HIGH);
delay(Speed);
digitalWrite(pinArray[count - 1], HIGH);
delay(Speed);
digitalWrite(pinArray[count], LOW);
delay(Speed*2);
}
}
}
Logged

"The old Europe"
Offline Offline
Edison Member
*
Karma: 1
Posts: 2005
Bootloaders suck!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

als erstes wuerde ich den LED code aus der seriellen kommunikation rausschmeissen. so wie es jetzt ist, werden die LEDs nur angesteuert, wenn der arduino etwas empfaengt.

also

Code:
void setup(void) {
    char Speed = 0; /* Serial.read() empfaengt byte weise, int datentyp bringt somit nichts */

    /* usw. */
}

void loop(void) {
    if ( Serial.available() ){ Speed = Serial.read (); }

    /* LED dingsbums */
}
Logged

• Upload doesn't work? Do a loop-back test.
• There's absolutely NO excuse for not having an ISP!
• Your AVR needs a brain surgery? Use the online FUSE calculator.
My projects: RGB LED matrix, RGB LED ring, various ATtiny gadgets...
• Microsoft is not the answer. It is the question, and the answer is NO!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das einlesen von Seriellen Daten beim Arduino ist leider nicht sooo schnell. Ich würde den Processing Code so ändern dass er nur Daten schickt wenn eine Eingabe gemacht wurde.
Da du nur ein Byte auf enmal senden willst würde ich den Serial Buffer auf (1) setzen damit PRocessing den auch gleich rausschickt.
Der plintln(); Befehl ist auch nicht der schnellste, der sollte unbedingt entfernt werden.
Dann wie bereits erwähnt den Arduino Code so ändern dass die LEDs unabhängig vom Serial Eingang geschrieben werden.
« Last Edit: June 18, 2009, 01:30:04 am by balte » Logged

Pages: [1]   Go Up
Jump to: