Arduino och bearbetning interagera. (4 / 5 steg)
Steg 4: Laddar programmet Arduino och bearbetning för att testa fountions
Här är Arduino koden:
Kopiera och klistra in dessa kod till Arduino IDE och ladda den till UNO
int bild = 0;
booleska vänster = false;
booleska center = false;
booleska höger = false;
int trignPin1 = 4;
int trignPin2 = 7.
int trignPin3 = 10;
int echoPin1 = 3;
int echoPin2 = 6;
int echoPin3 = 9;
int ledPin1 = 5;
int ledPin2 = 8;
int ledPin3 = 11;
int maxD = 20;
långa int lastTouch = -1; MS
int resetAfter = 2000. MS
int afterSlideDelay = 50; MS; alla bilder ignoreras efter lyckade bilden
int afterSlideOppositeDelay = 500.
vänstra bilderna ignoreras efter framgångsrika högra bilden
int SLIDELEFT_BEGIN = -1; Motion har identifierats från höger
int SLIDELEFT_TO_CENTER = -2; Motion har identifierats från höger till mitten
int SLIDENONE = 0; Ingen rörelse upptäcks
int SLIDERIGHT_BEGIN = 1; Motion har identifierats från vänster
int SLIDERIGHT_TO_CENTER = 2; Motion har identifierats från vänster till mitten
void setup() {
Serial.BEGIN(9600); bit/s
pinMode (ledPin1, produktionen);
pinMode (ledPin2, produktionen);
pinMode(ledPin3,OUTPUT);
}
void loop() {
vänster = echo (trignPin1, echoPin1, ledPin1);
Center = echo (trignPin2, echoPin2, ledPin2);
höger = echo(trignPin3,echoPin3,ledPin3);
om (vänster || center || rätt) {
lastTouch=millis();
}
om ((millis()-lastTouch) > resetAfter) {
bild = 0;
digitalWrite (ledPin1, låg);
digitalWrite (ledPin2, låg);
digitalWrite (ledPin3, låg);
Serial.println ("Återställ bild och timer");
}
om (bild > = SLIDENONE) {/ / endast om vi inte redan i motsatt flytta
om ((till vänster) & & (! rätt))
bild = SLIDERIGHT_BEGIN;
om (center & & (bild == SLIDERIGHT_BEGIN))
bild = SLIDERIGHT_TO_CENTER;
om (rätt & & (bild == SLIDERIGHT_TO_CENTER))
slideNow('R');
}
om (bild < = SLIDENONE) {
om (rätt & & (! vänster))
bild = SLIDELEFT_BEGIN;
om (center & & bild == SLIDELEFT_BEGIN)
bild = SLIDELEFT_TO_CENTER;
om (vänster & & bild == SLIDELEFT_TO_CENTER) {
slideNow('L');
}
}
Delay(50);
}
booleska echo (int trignPin, int echoPin, int ledPin)
{
int d = getDistance (trignPin, echoPin); cm
booleska pinActivated = false;
Serial.Print(d);
om (d < maxD) {
digitalWrite (ledPin, hög);
pinActivated = sant;
} annat {
digitalWrite (ledPin, låg);
pinActivated = false;
}
återvända pinActivated;
}
int getDistance (int trignPin, int echoPin)
{
lång varaktighet, tum, cm;
pinMode (trignPin, produktionen);
digitalWrite (trignPin, låg);
delayMicroseconds(2);
digitalWrite (trignPin, hög);
delayMicroseconds(5);
digitalWrite (trignPin, låg);
pinMode (echoPin, ingång);
längd = pulseIn (echoPin, hög);
tum = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Return(cm); Du kan även returnera inches
}
void slideNow(char direction) {
om ("R" == riktning)
Serial.println("F");
digitalWrite(ledPin1,HIGH);
om ("L" == riktning)
Serial.println("B");
digitalWrite (ledPin3, hög);
Delay(afterSlideDelay);
bild = SLIDENONE;
}
lång microsecondsToInches(long microseconds) {
återvända mikrosekunder / 74 / 2;
}
lång microsecondsToCentimeters(long microseconds) {
återvända mikrosekunder / 29 / 2;
}
Här är bearbetning koden:
Kopiera och klistra in dessa koden till bearbetning IDE köra när UNO kontakt med datorn.
import processing.serial.*;
int slideStep = 75. Hur många pixlar att glida in/ut
Den aktuella bilden och nästa bilden som ska visas
PImage currentImage, nextImage;
Index för den aktuella bilden.
int imgIndex = 0;
Håller reda på den övergripande bild positionen. Ett negativt tal
anger glidande i från vänster.
int slideOffset;
Alla bildfiler Funna i denna skiss data / katalogen.
String [] Filförteckning;
En serieport som vi använder för att tala med Arduino.
Seriella myPort;
Den här klassen används för att filtrera listan över filer i datakatalogen
så att listan innehåller endast bilder.
klass FilterImages implementerar java.io.FilenameFilter {
offentliga boolean acceptera (filen dir, sträng fname) {
String [] tillägg = {"png", ".jpeg", ".gif", ".tga", ".jpg"};
Acceptera inte en fil om det inte har något av angivna filtillägg
för (int jag = 0; jag < extensions.length; i ++) {
om (fname.toLowerCase () .endsWith (extensions[i])) {
return true;
}
}
returnera false;
}
}
Detta laddar filnamnen till Filförteckning
void loadFileNames() {
java.io.File dir = nya java.io.File(dataPath(""));
Filförteckning = dir.list (nya FilterImages());
}
Den bearbetning installationsmetod som körs en gång
void setup() {
storlek (displayWidth, displayHeight); Gå fullscreen
loadFileNames(); Ladda filnamnen
/ * Detta centers bilder på skärmen. Att fungera korrekt med
Detta läge vi kommer att använda bilden koordinater från center
av skärmen (1/2 av skärmhöjd och bredd).
*/
imageMode(CENTER);
Ladda bilden och ändra storlek på den.
println(filelist[0]);
currentImage = loadImage(dataPath("") + "\\" + fileList[0]);
currentImage.resize (0, höjd);
println(Serial.list());
myPort = ny följetong (denna, Serial.list() [0], 9600);
}
Gå till nästa bild
void advanceSlide() {
imgIndex ++; gå till nästa bild
om (imgIndex > = fileList.length) {/ / se till att vi är inom gränserna
imgIndex = 0;
}
slideOffset = bredd; Börja skjuta i från höger
}
void reverseSlide() {
imgIndex--; gå till föregående bild
om (imgIndex < 0) {/ / se till att vi är inom gränserna
imgIndex = fileList.length - 1;
}
slideOffset = bredd * - 1; Börja skjuta i från vänster
}
void draw() {
Sätta upp en svart bakgrund och Visa bilden.
Background(0);
bild (currentImage, bredd/2, höjd/2);
Ska bilden vara glidande?
om (slideOffset! = 0) {
Ladda nästa bild vid angiven förskjutning.
bild (nextImage, slideOffset + bredd/2, höjd/2);
om (slideOffset > 0) {/ / Skjut från höger (nästa)
slideOffset-= slideStep;
om (slideOffset < 0) {
slideOffset = 0;
}
}
om (slideOffset < 0) {/ / Skjut från vänster (föregående)
slideOffset += slideStep;
om (slideOffset > 0) {
slideOffset = 0;
}
}
om (slideOffset == 0) {
currentImage = nextImage;
}
}
annat {
Om vi inte glidande, Läs den seriella porten.
om (myPort.available() > 0) {
char inByte = myPort.readChar();
Print(inByte); Visar tecknet som lästes
om (inByte == "F") {/ / framåt
advanceSlide();
}
om (inByte == 'B') {/ / bakåt
reverseSlide();
}
Ladda och ändra storlek på nästa bild
nextImage = loadImage(dataPath("") + "\\" + fileList[imgIndex]);
nextImage.resize (0, höjd);
}
}
}