Börjar bearbetning - temperatur bildeffekter (5 / 7 steg)
Steg 5: Seriell kommunikation
Bearbetning kan kommunicera med andra fysiska enheter (till exempel mikrokontrollers) med seriell kommunikation. Under denna form av kommunikation skickar enheten (i vårt fall, en Arduino) data till bearbetning skissa en bit i taget. Antal bitar som skickats per sekund beror på överföringshastigheten. Som standard är överföringshastigheten för både Arduino och bearbetning miljö 9600. Du kan ändra detta, men kontrollera baudhastighet är detsamma för båda slutet-applikationer.
För att visa detta, kommer jag att använda en Arduino för att skicka data från en DHT11 temperatur/luftfuktighetsgivare till bearbetning skiss. Arduino koden bifogas härmed.
De flesta konstiga funktioner som du ser på Arduino skiss ingår i DHT11 bibliotek. Kolla exempel skissen som kommer med biblioteket för referens.
Det viktigaste att notera är hur vi skickar varje sträng av data. För det första, vi trycker temperatur värdet med Serial.print(). För det andra, vi skriva ett kommatecken, och sedan kommer fukt värdet, följt av en ny-line (Serial.println()). Därför vi genererar strängar bestående av två sensor värden, avgränsade med semikolon och varje rad avslutas med en ny-line karaktär.
Nu, låt oss han hur bearbetning tolkar strängarna. Här är en enkel skiss som bara visar sensor värdet:
importera det seriella biblioteket
import processing.serial.*;
Seriella myPort; seriella objekt
PFont teckensnitt; PFont objekt
globala variabler
int temp = 0;
int hum = 0;
void setup() {
size(400,400);
myPort = ny Serial(this,"COM3",9600);
myPort.bufferUntil('\n');
Font = loadFont ("ARESSENCE-48.vlw"); //created teckensnitt
textFont(font);
}
void draw() {
Background(255);
Fill(140);
text ("temperatur:" + temp, 72, 120);
text ("luftfuktighet:" + hum, 104, 220);
}
void serialEvent(Serial myPort) {
Läs den seriella buffert
String myString = myPort.readStringUntil('\n');
om (myString! = null) {
myString = trim(myString);
int sensorData [] = int(split(myString,','));
Temp = sensorData [0];
hum = sensorData [1].
}
}
Se resultatet ovan
Saker att notera:
- På behandling seriell bibliotek importeras högst upp
- En seriell typobjekt med namnet "myPort" skapas.
- I uppsättning extraherar "myPort.bufferUntil('\n')" den seriella data endast när den hittar en ny-line karaktär. Detta säkerställer att en seriell händelsen utlöses när en hela-sträng dras ut, inte någonstans i mitten.
- serialEvent() är en bearbetning inbyggda händelse funktion som anropas varje gång en seriell händelsen utlöses. När det kallas, läser den extraherade strängen från seriella bufferten, trimmar det och delar upp strängen i två sträng, båda har en sensor värde. Dessa värden sparas tillfälligt i en matris, och därefter tilldelas de globala variablerna "temp" och "hum" respektive.
- "PFont" är en inbyggd klass för att rita text. Använda detta, måste du göra ett teckensnitt med bearbetnings "Skapa typsnitt..." alternativ under verktyg. Efteråt, bara följa vad jag gjorde!
Seriell kommunikation är något ett omfattande ämne. Någon som vill dyka i ytterligare är starkt uppmuntras att kolla Tom Igoe fysiska Computing klass anteckningar.