Eine LED mit Processing schalten und den Status zurück bekommen vom Arduino

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.