Die LED 13 auf dem Arduino Board soll nun von einem Processing Fenster aus umgeschaltet werden per Maus. Danach gibt der Arduino den Status der LED zurück in das Processing Fenster.
Das Processing Fenster reagiert einmalig auf den Mausklick in das Fenster und sendet dann abwechselnd eine 0 oder 1 an den Arduino. Dieser schaltet die LED um und gibt den LED Status als String zurück. Der String vom Arduino aus println hört mit \n auf. Das wird in Processing auch als Ende des Strings erkannt mit readStringUntil(‚\n‘).
Das Processing Text Ausgabe Feld im Windows Fenster muss erst mit einem leeren Rechteck abgedeckt werden und dann wird neuer Text drüber geschrieben.
Hier das Arduino Programm
// Arduino LED bei Mausklick umschalten // aus einem Processing 3+ Fenster // mit Status Rückmeldung vom Arduino // // Matthias Busse 19.3.2017 Version 2.0 char wert; // Daten von der seriellen Schnittstelle int led = 13; // Board LED vom Arduino Uno void setup() { pinMode(led, OUTPUT); Serial.begin(38400); } void loop() { while (Serial.available()) { // Wenn serielle Daten kommen, dann lesen wert = Serial.read(); // Daten in wert speichern if (wert== '1') { // 1 heisst einschalten digitalWrite(led, HIGH); // LED einschalten Serial.println("LED ist an"); // Rückgabe } else { digitalWrite(led, LOW); // LED ausschalten Serial.println("LED ist aus"); // Rückgabe } } }
Das Processing 3.3 Programm
// Arduino LED bei Mausklick umschalten // aus einem Processing 3+ Fenster // mit Status Rückmeldung vom Arduino // // Matthias Busse 19.3.2017 Version 2.0 import processing.serial.*; Serial myPort; // Serial Objekt anlegen int ledAn=0; String ledStatus = null; void setup() { textSize(16); size(400,200); //Fenstergröße festlegen String portName = Serial.list()[0]; // Seriellen Port festlegen 0, 1, 2 ... myPort = new Serial(this, portName, 38400); surface.setTitle("klick mich"); // Fenster Titel fill(200); // grau wie der Hintergrund rect(15,58,40,20); // Soll Rchteck rect(15,153,40,20); // Ist Rechteck rect(60,153,120,20); // Status Ausgabe Rechteck fill(0); // schwarz Textfarbe text("Soll:",20,75); text("Ist:",20,170); } void draw() { if(ledAn==1) fill(204, 102, 0); // orange > an else fill(200); // grau > aus ellipse(120,70,120,120); // Kreis ausgeben while ( myPort.available() > 0) { ledStatus = myPort.readStringUntil('\n'); if(ledStatus != null) { println(ledStatus); fill(200); // grau rect(60,153,120,20); // Status Ausgabe Rechteck überschreiben / leeren fill(0); // schwarz text(ledStatus,75,170); } } } void mouseClicked() { if(ledAn==1) { myPort.write('0'); //sende 0 zum ausschalten ledAn=0; } else { myPort.write('1'); //sende 1 zum einschalten ledAn=1; } }
Und das Windows Fenster
Verwendet wurden:
– Arduino SW Stand 1.8.0
– Processing 3.3
– Arduino Uno Board
von Matthias Busse
Arduino kann die gesendete 1 nicht verarbeiten,der Status Led aus wird üertragen.