Automatiserad godis Dispenser (5 / 6 steg)
Steg 5: Koden och bibliotek som krävs
Följande är den Arduino skiss har utvecklats för detta projekt och alla bibliotek som krävs för att köra den.
Se till att du packa upp alla bibliotek och placera dem i mappen Arduino bibliotek som finns i dokumentet/Arduino/biblioteket, på din hårddisk.
Ändra pin-koder för varje artikel till den pin-kod du har varje komponent ljudport på Arduino.
Den bifogade videon ger en beskrivning av Arduino skiss utvecklats för detta projekt.
Följande är en beskrivning av Arduino skiss.
Denna del av koden anropar alla bibliotek används:
#include "stepMotor28BYJ.h" //Includes Motor bibliotek
#include "IRremote.h" //Includes IR Senor bibliotek
#include "Adafruit_GFX.h" //Includes bibliotek för ledde matrisen
#include "Adafruit_NeoMatrix.h" //Includes bibliotek för ledde matrisen
#include "Adafruit_NeoPixel.h" //Includes bibliotek för ledde matrisen
Denna del initierar Motor, IR-sensorn och ledde matrisen, ange alla stift för varje enhet och konstruktörer:
#define pin1 8 //Motor Pin 1
#define pin2 9 //Motor Pin 2
#define pin3 10 //Motor Pin 3
#define pin4 11 //Motor stift 4
#define fördröjningstid 8 //Motor fördröjningstiden
stepMotor28BYJ stepper (pin1 PIN2-, pin3, pin4, fördröjningstid); Initierar Motor bibliotek
#define irPin 2 //IR givarstaven
IRrecv irrecv(irPin); Intitializes Motor bibliotek
decode_results resultat. Resultatet av IR behandlingen lagras i resultat
#define PIN 5 //LED Matrix Data ingångsstift
#define BOARDCOUNT 1 //Number av ledde matriser
Adafruit_NeoPixel strip = Adafruit_NeoPixel (64 * BOARDCOUNT, stift, NEO_GRB + NEO_KHZ800); Initierar antal lampor
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix (8, 8, PIN, //Initializes ledde matrisen
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + //Sets ledde matrisen orientering
NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE, //Sets hur indata är kodad
NEO_GRB + NEO_KHZ800); Ställer in ledde matrisen färginställningar
Denna matris initierar alla färger i matrisen LED, är den specifika färgen kommenterade i koden:
CONST uint16_t färger [] = {//Initializes färger som visas på ledde matrisen
Matrix. Färg (85, 85, 85), matrix. Färg (128, 0, 0), matrix. Färg (100, 40, 0), / / vit, röd, Orange
Matrix. Färg (85, 85, 0), matrix. Färg (0, 128, 0), matrix. Färg (0, 0, 128), / / gul, grön, blå
Matrix. Färg (85, 0, 85), //Purple
};
Dessa heltal används för svarvning ledde matrisen på och av, och ställa in läge standby-displayen:
int läge = 0; Variabeln som används för att spåra Remote Mode knappen, förändringar Standby display från kägla till M & M baserat på värde
int power = 0; Variabeln som används för att spåra Remote Power knappen, vänder ledde matrisen på och av baserat på värde
Denna del ställer in enheterna för de viktigaste loopen:
void setup() {//Setup initiering
irrecv.enableIRIn(); Gör IR-Sensor
Matrix.BEGIN(); Tillåter Data Output till matris
matrix.setTextWrap(0); //
matrix.setBrightness(30); Uppsättningar Matrix ljusstyrka
matrix.setTextColor(colors[0]); Definierar Matrix färg som vit, om inte annat anges
Serial.BEGIN(9600); Börjar seriell kommunikation
}
Detta är den viktigaste loopen. Först kontrolleras mot IR-sensorn om den tar emot en signal. Om signalen är från knapparna 1-9 på fjärrkontrollen, är jag inställd på motsvarande nummer. Om strömbrytaren trycks ledde matrisen återställs och power heltal är upprepade. Om du trycker på mode-knappen upprepade det läge heltalet. Om knappen trycks inte är en av de utsedda knappar på i heltalet sätts till 0. Nästa, IR-sensorn är inställd att återuppta normal drift. Så, jag är skickas till stepper motor rotera funktionen kommer att rotera den motor 1/6 av en revolution för varje värde i i. om motorn har roterat, visar funktionen Njut ordet "Njuta" rulla över ledde matrisen. Om IR-sensorn inte emot en signal funktionen godis utförs och visar antingen en kägla eller M & M beroende på värdet för mode.
void loop() {//Main Loop
int jag = 0; Anger antalet godis för att lämnas ut till 0
om (irrecv.decode(&results)) {//Executes om IR-sensorn får signal
IF(results.Value == 16724175) jag = 1; Fjärr-knappen 1
annat if(results.value == 16718055) jag = 2; Fjärr-knappen 2
annat if(results.value == 16743045) jag = 3; Fjärr-knappen 3
annat if(results.value == 16716015) jag = 4; Fjärr-knappen 4
annat if(results.value == 16726215) jag = 5; Fjärr-knappen 5
annat if(results.value == 16734885) jag = 6; Fjärr-knappen 6
annat if(results.value == 16728765) jag = 7. Fjärr-knappen 7
annat if(results.value == 16730805) jag = 8. Fjärr-knappen 8
annat if(results.value == 16732845) jag = 9. Fjärr-knappen 9
annat if(results.value == 16753245) {//Remote Power-knappen
matrix.fillScreen(0); Uppsättningar Input till matrisen till 0
Matrix.show(); Rensar matris
Power ++; Lägger till makten om strömbrytaren intryckt //Used Njut och godis funktioner, nedan
}
annat if(results.value == 16736925) läge ++; Remote Mode knappen //Used i godis funktion, nedan
annat jag = 0; Om ingen knapp trycks ner, anger antalet godis till 0
irrecv.Resume(); IR-Sensor vände tillbaka
stepper.rotate(i); Passerar antal godis för att lämnas ut till Stepper bibliotek, roterar Motor att avstå från angivet antal godis
IF(i!=0) enjoy(power); Om godis är förpackat, tar Display njuta på ledde matrisen, makten variabel som indata
}
annat candy(power,mode); Om inte godis är avstå från, Visa en bitar av cand på LED Matix, tar läge och makt som insatsvaror
}
Detta är enjoy-funktion som visar ordet "ENJOY". Den för loop används att rulla ordet över matrisen. Om när som helst en IR signal tas emot loop funktion är avslutat och återgår till den viktigaste loopen. Också, om det makt heltalet är udda ordet visas inte.
void enjoy(int power) {//Displays ordet Njut, beroende på power variabel
för (int jag = 8; jag > -30;--i) {//For loop att rulla Njut över ledde matrisen
om (power %2 == 1) bryta; Om variabeln makt är udda, visas bryter njuta eftersom ledde matrisen är inställt på
matrix.fillScreen(0); Rensar ledde matrisen Input
matrix.setCursor (i, 0); Ställer in LED Matrix markören till position i, detta gör Njut att rulla som for-loop körs
Matrix.Print(F("Enjoy")); Utskrifter Njut på ledde matrisen på definierade markörens position
Matrix.show(); Visar senaste uppdateringen till ledde matrisen ingång
Delay(125); Dröjsmål.125 sekunder innan flytta markören
}
}
Detta är funktionen godis. Om det läge heltalet är visas även en kägla, om udda en M & M visas. Om det makt heltalet är udda ingenting visas. Den för loop cyklar färgar av lappa av godis.
Annullera godis (int makt, int läge) {//Display bit godis blinkar olika färger på ledde matrisen, beroende på power variabel, godis typ beroende på läge variabel
matrix.fillScreen(0); Tydlig ledde matrisen Input
för (int jag = 1; jag < 7; i ++) {//For slinga för att ändra färg på godis, röd, ORANGE, gul, grön, blå och lila
om (irrecv.decode (& resultat)) bryta; Om IR-sensorn tar emot input, raster visas av godis
om (power %2 == 1) bryta; Om power variabeln är udda, raster godis Visa eftersom det ledde matrisen är inställt på
matrix.fillCircle(3,3,3,colors[i]); Skapar cirkel av angivna färgen från färger matris som tidigare angivits
matrix.setCursor (1, -1); Anger positionen för markören så antingen "eller är" kommer att visas i mitten av cirkel
om (läge %2 == 0) matrix.print(F("s")); Om läget variabel är även, ett ' skrivs ut för ledde matrisen, effektivt visar en kägla
annat matrix.print(F("m")); Om läget variabel inte ens, en är "skrivs ut för ledde matrisen, effektivt visar en M & M
Matrix.show(); Visar senaste uppdateringen till ledde matrisen ingång
Delay(750); Förseningar.75 sekunder innan du ändrar godis färg
}
}
Jag skrev en motor bibliotek för denna kod eftersom motorn inte kunde göras att rotera endast 1/6 varv i taget. Det är en vanlig stepper motor bibliotek med högt vridmoment inställningar. Korrigering till tillåta genom att rotera 1/6 en revolution utan att komma i centrum är i följande kod.
void stepMotor28BYJ::rotate (int lappar) {//Rotates motor att leverera användaren definierat antal bitar
för (_i = 0; _i
0; _steps--) _forward(); Räknar antal steg som tagits
_stepOff(); Inaktiverar spolar
_j++; Lägga till 1 i _j, räknas nämner av godis förpackat tills nästa korrigering
}
}
Koden är fullt kommenterade och bör vara ganska lätt att följa om du har erfarenhet programmering.