Arduino en Processing
Voor dit voorbeeld gebruiken we het voorbeeld met de temperatuursensor.
import processing.serial.*;
Serial myPort; // Maak een object voor de seriële poort
String inputData = ""; // String om de binnenkomende gegevens op te slaan
float temperature = 0; // Variabele om de temperatuur op te slaan
void setup() {
size(400, 400); // Grootte van het venster
// Selecteer de juiste seriële poort
String portName = "/dev/cu.usbmodem141401"; // Pas aan naar de juiste poort
myPort = new Serial(this, portName, 9600); // Open de seriële poort op 9600 baud
textSize(16);
fill(0); // Zwarte tekstkleur voor tekst
}
void draw() {
background(255); // Witte achtergrond
// Controleer of er seriële data binnenkomt
if (myPort.available() > 0) {
inputData = myPort.readStringUntil(' ');
// Als er data binnenkomt, verwerk het
if (inputData != null) {
inputData = trim(inputData); // Verwijder witruimte rondom de string
println(inputData); // Debug: toon de ontvangen string in de console
// Probeer de temperatuurwaarde uit de string te halen
if (inputData.contains("graden C: ")) {
// Split de string om alleen het numerieke deel van de temperatuur te krijgen
String[] parts = split(inputData, "graden C: ");
if (parts.length > 1) {
try {
// Converteer het temperatuurdeel naar een float
temperature = float(parts[1]);
} catch (NumberFormatException e) {
println("Kon temperatuur niet converteren: " + parts[1]);
}
}
}
}
}
// Toon de laatste ontvangen temperatuurwaarde
text("Temperatuur: " + nf(temperature, 1, 2) + " °C", 10, 50);
// Kleur aanpassen op basis van de temperatuur
if (temperature > 25) {
fill(255, 0, 0); // Rood
} else if (temperature >= 22 && temperature <= 25) {
fill(255, 165, 0); // Oranje
} else {
fill(0, 0, 255); // Blauw (onder 20°C)
}
// Bereken de hoogte van de rechthoek op basis van de temperatuur
float rectHeight = map(temperature, 0, 50, 0, height - 100); // Schaal de hoogte van de rechthoek
rect(50, height - rectHeight, 50, rectHeight); // Teken de rechthoek
}