Piranha Plant (13 / 16 steg)
Steg 13: Koden
För alla som inte vill ladda ner filen eller bara vill veta vad får de innan de får det, här är koden.
/ *** < Br > syfte: Piranha Plant
Skapad av Aldo Reigosa
DATUM: 12/2014
*******************************************/
#include / / bibliotek för proximity sensor
#include / / bibliotek för servo
#include / / bibliotek för stegmotor
#define gearratio 64 / / 1: 64 gear ratio
#define echoPin 5 / / detta är echo pin
#define triggerPin 6 / / Detta är trigger pin
#define servopin 7 / / detta är servo pin
#define ledpin 12 / / detta är LED stift
Servo myservo; instansiera en Servo-objekt med namnet "myservo"
int x; Heltal används för 1: a avstånd registreras
int y; Heltal används för 2: a avstånd registreras
flyktiga int z = 0; Heltal används i avbrottet
CONST int stepsPerRevolution = 2048; Antal steg för att slutföra en revolution
Stepper myStepper(stepsPerRevolution,8,9,10,11); Stift för stepper motor
Piranha distanceSensor(echoPin,triggerPin); Konstruktören att instansiera en sensor som heter "distanceSensor"
/***************************setup function*********************************/
void setup() {
Serial.BEGIN(115200); Starta seriell kommunikation
myservo.attach(servopin); Tillmäter objektet servo servo på stift 7
myStepper.setSpeed(0.8*gearratio); Anger hastigheten för stegmotor
attachInterrupt(1,Interrupt,RISING); Fäster på avbryta till stift 3 och aktiveras när det stiger
pinMode (ledpin, produktionen); Set LED stift som en utgångsstiftet
}
/***************************main loop**********************************************/
void loop() {
flyta distance1 = distanceSensor.readSensor(); Här kallar vi metoden "readSensor" för att bestämma avståndet
och ange det till distance1
om (distance1 > 0 & & distance1 < 100) {/ / här vi set x = 1 om avstånd tröskeln är uppfyllt
x = 1; Annat sätt x = 0
}
annat {
x = 0;
}
Serial.Print ("distance1:"); Skriver ut avståndet till den seriella monitorn.
Serial.println(Distance1);
Delay(1000); En 1 sekunders fördröjning
flyta distance2 = distanceSensor.readSensor(); Vi tar en annan avståndsmätning
om (distance2 > 0 & & distance2 < 100 & & x == 1) {/ / om både första och andra avståndet är inom tröskeln
myservo.write(180); Det kommer att aktivera servo till 180 graders position och värdet y 1
y = 1;
}
annat {/ / om antingen det första eller andra avståndet är inte inom tröskeln
myservo.write(0); servo kommer återgår till 0 och y 0
y = 0;
}
Serial.Print ("distance2:"); Skriver ut avståndet till den seriella monitorn.
Serial.println(distance2);
Delay(1000); En annan 1 sekunders fördröjning
flyta distance3 = distanceSensor.readSensor(); En sista avståndsmätning märkt som distance3
om (distance3 > 0 & & distance3 < 100 & & x == 1 & & y == 1 & & z == 1) {/ / om alla tre sträckor finns inom tröskeln och avbrottet
myStepper.step(stepsPerRevolution); har aktiverats (alltså ta bort säkerhet), det kommer att aktivera
Delay(2000); stegmotor och dröjsmål i 2 sekunder före resseting den
x = 0; variabler. Annars kommer det bara fördröja i 1 sekund och börja över.
y = 0;
}
annat {
Delay(1000);
}
Serial.Print ("distance3:"); Skriver ut avståndet till den seriella monitorn.
Serial.println(distance3);
}
void Interrupt() {/ / Detta är avbrottet
z =! z; Detta kommer att göra variabeln som ändrar till det motsatta värdet
om (z == 1) {/ / när z är lika med 1 det kommer att vända på den LED stift att fungera som en
digitalWrite (ledpin, hög); varnande varningslampa säger att det är redo att skjuta
}
annat {
digitalWrite (ledpin, låg);
}
Serial.Print(z);
}