Temperatur-Anzeige in Processing
Der Arduino-Sketch muss auf den Arduino geladen werden, damit der Processing-Sketch funktionieren kann!
Arduino
// Arduino Project Book, Seite 43ff
// ACHTUNG: Der Serial-Monitor von Arduino muss geschlossen sein
// sonst funktioniert die Kommunikation mit Processing nicht!
// Umgekehrt muss das Processing-Applet beendet werden, bevor man wieder etwas auf den Arduino hochladen kann
// Analoger Eingang 0
int sensorPin = A0;
// die LED
int ledPin = 13;
// Grenzwert-Temperatur, wenn LED an/ausgehen soll
float grenzwert = 23.0;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// roher Sensor-Wert
int sensorVal = analogRead(sensorPin);
// Umrechung in Volt (muss zwischen 0V und 5V liegen!)
float voltage = (sensorVal / 1024.0) * 5.0;
// Temperatur in Celsius
float temperature = (voltage - 0.5) * 100;
Serial.println(temperature);
// Wenn die Temperatur unter einen bestimmten Wert fällt
// soll die LED angehen
if (temperature < grenzwert){
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
// Messung alle 0.5 sek
delay(500);
}
Processing
// ACHTUNG: Der Serial-Monitor von Arduino muss geschlossen sein
// sonst funktioniert die Kommunikation mit Processing nicht!
// https://learn.sparkfun.com/tutorials/connecting-arduino-to-processing
import processing.serial.*;
Serial myPort; // Create object from Serial class
String val; // Data received from the serial port
String Ausgabe = ""; // die Textaufgabe
float v = 22.0; // Float-Wert aus dem String, erst mal mit Platzhalter.-Wert belegt
float grenzwert = 23.0; // wie bei Arduino
void setup() {
size(440, 440);
frameRate(2); // nicht zu hoch, sonst gibt es Kommunikationsprobleme!
// Abfrage aller Ports, hier sollte der gleiche Port auftauchen, den Ihr bei Arduino verwendet!
// am Mac heisst dieser so etwas wie „dev/tty.usbmodem1411
printArray(Serial.list());
// bei mir ist der rel. Port an 5. Stelle
String arduinoPort = Serial.list()[5];
myPort = new Serial(this, arduinoPort, 9600);
}
void draw() {
// je nach Temperatur ändert sich Hintergrund- und Strichfarbe
if (v < grenzwert){
background(0);
stroke(255, 0, 0);
} else {
background(255,0,0);
stroke(0);
}
// Einlesen der Arduino-Werte, falls diese vom Arduino geschickt werden können
if ( myPort.available() > 0) {
val = myPort.readStringUntil('\n');
v = float(val.trim()); // das trim ist ganz wichtig!
}
// Ausgabe von val und v in der Konsole
// println(val);
println(v);
// Textausgabe des Wertes auf dem Screen
String Anfang = "Temperatur: ";
String Ausgabe = Anfang + val;
text(Ausgabe, 10, v);
// keine Füllfarbe bei der Ellipse
noFill();
// Durchmesser erhöht, damit man Änderungen besser sieht
ellipse(width/2, height/2, v*6, v*6);
}
Läuft der Arduino-Sketch und startet man das Processing-Applett, sollten jetzt die Temperatur-Werte auf dem Screen sichtbar sein…