Hallo zusammen,
beschäftige mich seit kurzem mit dem Arduino und bekomme die Kommunikation zwischen Arduino und PC nicht so richtig hin.
Zum Einstieg baue ich die Aufgaben/ Tutorials von der Webseite www.mr.intermediadesign.de nach. Bei Kapitel 3.1.3 Aufgabe 6 komme ich leider nicht weiter.
Auf der Webseite steht das einfach bei dem Arduino Code und in dem Processing Code jeweils ein delay von 100 gesetzt wird.
Bei mir funktioniert dies aber nicht. Bei einem delay von 100 passiert bei den LED's einfach nichts. Erst wenn ich im Processing Code ein delay von 900 setzte, wird das Signal scheinbar richtig von dem Arduino erkannt.
Habe ich vielleicht einen typischen Fehler gemacht? Etwas nicht eingestellt?
Benutze den Arduino Mega. Im folgenden mal mein Code, da ich ihn nicht ganz so habe wie auf der genannten Webseite.
Processing
import processing.serial.*;
Serial myPort;
int ANZAHL_LEDS = 8;
Rect[] rectangle;
int size = 20;
int curid;
void setup()
{
size(350,130);
println(Serial.list());
String portName = Serial.list()[1];
myPort = new Serial(this, portName, 9600);
rectangle = new Rect[ANZAHL_LEDS+1];
for(int id=1;id<9;id++){
rectangle[id] = new Rect(20+(id*30),20,id);
}
}
int i = 0;
void draw()
{
for(int i=1;i<9;i++){
rectangle[i].drawRect();
}
println(curid);
myPort.write(curid);
delay(100); //Wenn ich hier den Delay höher 900 setzte funktioniert es (Anwendung reagiert dann logischerweise aber auch langsam)
}
void mousePressed()
{
for(int i=1;i<rectangle.length;i++)
{
rectangle[i].toogle();
}
}
//Klasse Rect
class Rect
{
int x;
int y;
int id;
boolean istInnerhalb = false;
//Konstruktor
Rect(int x, int y, int id)
{
this.x=x;
this.y=y;
this.id=id;
}
void drawRect()
{
if(istInnerhalb)
{
fill(0,0,255);
rect(x,y,size,size);
}
else
{
fill(255,255,255);
rect(x,y,size,size);
}
}
void toogle()
{
if(dist(mouseX,mouseY,x+10,y+10)<(size/2))
{
istInnerhalb =! istInnerhalb;
if(istInnerhalb==true){
curid = this.id;
}else{
curid = 0;
}
}
}
}
Arduino-Code
const int clockPin = 3;
const int latchPin = 4;
const int dataPin = 5;
void setup(){
pinMode(clockPin,OUTPUT);
pinMode(latchPin,OUTPUT);
pinMode(dataPin,OUTPUT);
Serial.begin(9600);
}
int input = 0;
void loop(){
if(Serial.available())
{
input = Serial.read();
Serial.print(input);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, input);
digitalWrite(latchPin, HIGH);
}
delay(100);
}
Ich hoffe mir kann dabei jemand einen Tipp geben. Vielen Dank schonmal.
Grüße
Edit: Auch der Quellcode 1:1 von der Webseite funktioniert bei mir erst ab einem Delay von 900.