Miniatyr Allianz Arena (4 / 5 steg)
Steg 4: Arduino IDE kod
Kodningen är inte alltför svårt att sätta ihop. Den första delen av koden innehåller de nödvändiga biblioteken, definierar vad stift blir används, initierar vissa värden och skapar objekt för varje del som skall kontrolleras.
#include < Adafruit_Neopixel.h >
#include < avr/power.h >
#include < StepperAK.h >
#include < IRremote.h >
#define LEDPin 5 //LED strip stift 5
#define gearratio 64 //1:64 utväxling för stegmotor
#define NUMPIXELS 60 / / hur många NeoPixels är kopplade till Arduino
#define Pin1 8 //These in stiften för Stepper Motor
#define Pin2 9
#define Pin3 10
#define Pin4 11
Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUMPIXELS, LEDPin, NEO_GRB + NEO_KHZ800); //This skapar Neopixel objekt remsan
int delayt = 500. fördröjning för en halv sekund
CONST int stepsPerRevolution = 2048; //2048 steg vända motor en revolutionen
Stepper myStepper (stepsPerRevolution, Pin1, Pin2, Pin3, Pin4); //Creates objektet Stepper Motor
int RECV_PIN = 3; IR-mottagare ansluten till stift 3
IRrecv irrecv(RECV_PIN); Skapa en IR-mottagare objekt
decode_results resultat. Skapa ett decode_results-objekt
Den setup delen av koden helt enkelt kan IR-sensor, växlar ner stegmotor, och initierar alla lampor till ett läge där borta.
void setup() {
irrecv.enableIRIn(); Gör den IR-enheten
myStepper.setSpeed(0.15*gearratio); motorn verkar vara inriktad ner 1/64,
Strip.BEGIN();
Strip.show(); Initiera alla pixlar till "off"
}
I avsnittet slinga jag använde kapslade om-uttryck för varje gång en signal togs emot av IR-sensorn, det tolkar vad det signal var, och gör motsvarande operationen till den signalen. För varje signal resultatet om uttalande, jag har ett par logiska eller operatörer, den första är för Arduino kit fjärrkontroll, de andra och tredje är för Xbox 360-fjärrkontrollen. Anledningen till att jag har två olika signaler för 360 remote är eftersom en annan signal sätts ut om du håller knappen ner i stället för att trycka på den. Jag har kodat i programmet att rymma för denna signal diskrepans. Funktioner längst tillhandahålls av Adafruit, och de kan lätt ändras beroende på vad du vill göra med LED strip.
void loop() {
om (irrecv.decode (& resultat)) {//has en överföring har fått?
om (results.value == 2148529177 || results.value == 2148496409 || results.value == 16738455) {//If "0"-knappen eller på "stop"-knappen trycks, lysdioderna alla stänga av.
colorWipe (remsa. Color(0,0,0), 20);
}
irrecv.Resume(); Ta emot nästa värde från IR-Sensor
}
om (irrecv.decode (& resultat)) {//has en överföring har fått?
om (results.value == 2148529164 || results.value == 2148496396 || results.value == 16753245) {//If strömbrytaren trycks lysdioderna alla initiera till röda colorWipe (remsa. Color(255,0,0), 20);
}
irrecv.Resume(); Ta emot nästa värde från IR-Sensor
}
om (irrecv.decode (& resultat)) {//has en överföring har fått?
om (results.value == 2148529171 || results.value == 2148496403 || results.value == 16724175) {//If trycker på knappen "1" eller "x"-knappen gör du följande: colorWipe (remsa. Color(0,0,255), 20);
}
irrecv.Resume(); Ta emot nästa värde från IR-Sensor
}
om (irrecv.decode (& resultat)) {
om (results.value == 2148496422 || results.value == 2148529190 || results.value == 16718055) {//If "2" eller "y" knappen trycks gör du följande:
colorWipe (remsa. Color(255,255,255), 20);
}
irrecv.Resume();
}
om (irrecv.decode (& resultat)) {
om (results.value == 2148529185 || results.value == 2148496417 || results.value == 16743045) {//If på "3" eller "höger pil" trycks gör du följande: theaterChaseRainbow(50);
}
irrecv.Resume();
}
om (irrecv.decode (& resultat)) {
om (results.value == 2148529184 || results.value == 2148496416 || results.value == 16716015) {//If på "4" eller "vänsterpil" knappen trycks gör du följande:
Rainbow(50);
}
irrecv.Resume();
}
om (irrecv.decode (& resultat)) {
om (results.value == 2148496418 || results.value == 2148529186 || results.value == 16726215) {//If på "5" eller "Ok" är tryckt gör du följande:
myStepper.step(stepsPerRevolution); Roterar stepper motor 1 revolutionen
myStepper.step(stepsPerRevolution);
}
irrecv.Resume();
}
}
Fyll prickar en efter den andra med en färg < br > void colorWipe (uint32_t c, uint8_t vänta) {
för (unit16_t jag = 0; Jag < strip.numPixels(); I++) {
strip.setPixelColor (i, c);
Strip.show();
Delay(Wait);
}
}
Biosittning krypande lampor med regnbågseffekt
void theaterChaseRainbow (uint8_t vänta) {
för (int j = 0; j < 256; j ++) {/ / cykla alla 256 färger i hjulet
för (int q = 0; d < 3; q ++) {
för (int jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (i + q, rullar ((i + j) % 255)); //turn varje tredje pixel på
}
Strip.show();
Delay(Wait);
för (int jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (jag + q, 0); Inaktivera alla bildpunkter på tredje
}
}
}
}
Ange ett värde 0 till 255 att få ett färgvärde.
Färgerna är en övergång r - g - b - tillbaka till r.
uint32_t hjul (byte WheelPos) {
WheelPos = 255 - WheelPos;
IF(WheelPos < 85) {
returnera strip. Färg (255 - WheelPos * 3, 0, WheelPos * 3);
} annat if(WheelPos < 170) {
WheelPos-= 85.
returnera strip. Färg (0, WheelPos * 3, 255 - WheelPos * 3);
} annat {
WheelPos-= 170;
returnera strip. Färg (WheelPos * 3, 255 - WheelPos * 3, 0);
}
}
{Ogiltig rainbow (uint8_t vänta)
uint16_t i, j.
för (j = 0; j < 256; j ++) {
för (jag = 0; jag < strip.numPixels(); i ++) {
strip.setPixelColor (i, Wheel((i+j) & 255);
}
Strip.show();
Delay(Wait);
}
}