Hvordan sende flere signaler fra Arduino til Processing

October 19  by Eliza

Det eneste som er bedre enn å sende signaler til Processing sender flere signaler, ikke sant? Sende flere signaler er ofte en snublestein, skjønt, fordi selv sende verdier fra flere sensorer er enkelt, håndtering dem i riktig rekkefølge i den andre enden kan ofte være vanskelig.

Du må ha:

  • En Arduino Uno
  • En brødfjel
  • To 10k ohm potensiometre
  • En trykknapp
  • En 10k ohm motstand
  • Jump ledninger

Kretsen er en kombinasjon av tre separate innganger. Selv om de alle bruker samme strøm og jord, kan du tenke på inngangene individuelt. To potensiometre gi to verdier. Disse er koblet på samme måte som du ville koble en temperatursensor, med den ene siden koblet til 5V og den andre kablet til analog inngang pin som leser det, så vel som til GND via en motstand.

Hvordan sende flere signaler fra Arduino til Processing

Disse kan faktisk bli erstattet med noen analoge innganger med de riktige motstander. Trykknappen gir en digital inngang i tillegg. Den ene siden av knappen er kablet til 5V og den andre er kablet til den digitale pin leser det, så vel som GND via en motstand.

Hvordan sende flere signaler fra Arduino til Processing

Hvordan sette opp Arduino kode

Etter at du montere din krets, må du den passende programvare for å bruke den. Fra Arduino-menyen og velg Arkiv → Eksempler → 04.Communication → SerialCallResponse. Denne skissen inneholder både Arduino kode og relevant Processing koden for skissen til å fungere. Den Processing kode under Arduino kode er kommentert ut for å unngå interferens med Arduino skisse.

/ *
Serie Call og Response
Språk: Kabling / Arduino
Dette programmet sender en ASCII A (byte av verdi 65) ved oppstart
og gjentar at før det blir noen data i.
Deretter venter det for en byte i serieporten, og
sender tre sensorverdier når det blir en byte i.
Takk til Greg Shakar og Scott Fitzgerald for forbedringer
Kretsen:
* Potensiometre festet til analoge innganger 0 og 1
* Trykknapp knyttet til digital I / O 2
Laget 26 september 2005
av Tom Igoe
endret 24 april 2012
av Tom Igoe og Scott Fitzgerald
Dette eksempelet kode er i den offentlige sfæren.
http://www.arduino.cc/en/Tutorial/SerialCallResponse
* /
int = 0 firstSensor; // Først analog sensor
int = 0 secondSensor; // Andre analog sensor
int = 0 thirdSensor; // Digital sensor
int = 0 inByte; // Innkommende serie byte
void setup ()
{
// Start seriell port på 9600 bps:
Serial.begin (9600);
while (! Serial) {
; // Vente for seriell port for å koble til. Trengs for Leonardo bare
}
pinMode (2, INPUT); // Digital sensor er på digital pin 2
establishContact (); // Sende en byte for å etablere kontakt til mottaker
// svarer
}
void loop ()
{
// Hvis vi får en gyldig byte, lese analoge moduler:
if (Serial.available () 0>) {
// Få innkommende byte:
inByte = Serial.read ();
// Lese først analog inngang, dividere med 4 for å gjøre området 0-255:
firstSensor = analogRead (A0) / 4;
// Forsinkelses 10ms å la ADC gjenopprette:
forsinkelse (10);
// Lese andre analog inngang, dividere med 4 for å gjøre området 0-255:
secondSensor = analogRead (1) / 4;
// Lese bryteren, kartlegge den til 0 eller 255L
thirdSensor = kartet (digitalRead (2), 0, 1, 0, 255);
// Sende sensorverdier:
Serial.write (firstSensor);
Serial.write (secondSensor);
Serial.write (thirdSensor);
}
}
ugyldig establishContact () {
while (Serial.available () <= 0) {
Serial.print ('A'); // Sende en kapital A
forsinkelse (300);
}
}

Last opp koden til din Arduino.

Hvordan sette opp Processing kode

Du finner den Processing koden innen multiline kommentar markører (/ * * /) på bunnen av Arduino SerialCallResponse skisse. Kopier koden innenfor kommentar markører inn i en ny Processing skisse og lagre med et passende navn.

// Dette eksempelet kode er i den offentlige sfæren.
importere processing.serial. *;
int bgcolor; // Bakgrunnsfarge
int fgcolor; // Fyll farge
Serie myPort; // Serieporten
int [] serialInArray = new int [3]; // Hvor vil vi sette det vi får
int = 0 serialCount; // En opptelling av hvor mange byte vi mottar
int XPOS, ypos; // Starter ballens posisjon
boolean Firstcontact = false; // Om vi ​​har hørt fra
// Mikrokontroller
void setup () {
størrelse (256, 256); // Stage størrelse
noStroke (); // Ingen grense på neste ting trukket
// Sett startposisjonen til ballen (midt på scenen)
XPOS = bredde / 2;
ypos = høyde / 2;
// Skriv ut en liste over serieportene, for debugging formål:
println (Serial liste ().);
// Jeg vet at den første porten i serie liste på min mac
// Er alltid min FTDI adapter, så jeg åpner Serial.list () [0].
// På Windows-maskiner, åpner dette vanligvis COM1.
// Åpne uansett port er den du bruker.
String portnavn = Serial liste () [0].;
myPort = ny Serial (dette, portnavn, 9600);
}
ugyldig draw () {
bakgrunn (bgcolor);
fylle (fgcolor);
// Tegn formen
ellipse (XPOS, ypos, 20, 20);
}
ugyldig serialEvent (Serial myPort) {
// Lese en byte fra serieporten:
int inByte = myPort.read ();
// Hvis dette er den første byte som mottas, og det er en A,
// Fjerne serie buffer og merk at du har
// Hadde første kontakt fra mikrokontrolleren.
// Ellers legger den innkommende byte til matrisen:
if (Firstcontact == false) {
if (inByte == 'A') {
myPort.clear (); // Fjerne seriell port buffer
Firstcontact = true; // Du har hatt første kontakt fra mikrokontrolleren
myPort.write ('A'); // Be om mer
}
}
else {
// Legg den siste byte fra serieporten til matrise:
serialInArray [serialCount] = inByte;
serialCount ++;
// Hvis vi har tre bytes:
if (serialCount> 2) {
XPOS = serialInArray [0];
ypos = serialInArray [1];
fgcolor = serialInArray [2];
// Skriver ut verdiene (for debugging formål):
println (XPOS + "\ t" + ypos + "\ t" + fgcolor);
// Send en kapital A be om nye sensoravlesninger:
myPort.write ('A');
// Tilbakestill serialCount:
serialCount = 0;
}
}
}

Klikk på Kjør-knappen for å utføre Processing skisse, og en applet vises. Den applet har en svart bakgrunn, og når du trykker på knappen, vises en hvit prikk. Flytt potensiometre å flytte dot horisontalt og vertikalt. Når du slipper knappen, forsvinner dot.