Stap 4: Arduino IDE Code
De codering is niet te moeilijk samen te stellen. De eerste sectie van de code omvat van de vereiste libraries, definieert wat pinnen zullen worden gebruikt, initialiseert bepaalde waarden en maakt u de objecten voor elk onderdeel worden gecontroleerd.
#include <Adafruit_Neopixel.h> #include <avr/power.h> #include <StepperAK.h> #include <IRremote.h>
#define LEDPin 5 //LED strip pin 5 #define gearratio 64 //1:64 gear ratio for stepper motor #define NUMPIXELS 60 // How many NeoPixels are attached to the Arduino #define Pin1 8 //These set the pins for the Stepper Motor #define Pin2 9 #define Pin3 10 #define Pin4 11 Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, LEDPin, NEO_GRB + NEO_KHZ800);//This creates the Neopixel object strip int delayt = 500; // delay for half a second const int stepsPerRevolution = 2048;//2048 steps turn the motor one revolution Stepper myStepper(stepsPerRevolution, Pin1, Pin2, Pin3, Pin4);//Creates the Stepper Motor object int RECV_PIN = 3; //IR Receiver connected to Pin 3 IRrecv irrecv(RECV_PIN); //Create a IR receiver object decode_results results; //Create a decode_results object
Het setup-gedeelte van de code gewoon de IR-sensor, versnellingen beneden de stappenmotor, maakt en initialiseert alle LEDs op een weg staat.
void setup() { irrecv.enableIRIn(); //Enables the IR device myStepper.setSpeed(0.15*gearratio); //the motor appears to be geared down 1/64, strip.begin(); strip.show(); // Initialize all pixels to 'off' }
In de sectie lus ik gebruikte genest als verklaringen voor elke keer dat een signaal werd ontvangen door de IR-sensor, het spraaksystemen wat dat signaal was, en de corresponderende transactie die dat signaal doet. Voor elk signaal resultaat als verklaring, heb ik een paar logische of exploitanten, de eerste is voor de externe Arduino-kit, de tweede en derde zijn voor de Xbox 360-afstandsbediening. De reden dat ik heb twee verschillende signalen voor de externe 360 is omdat een ander signaal is stak als u de knop ingedrukt in tegenstelling tot gewoon te drukken. Ik heb dit in het programma om tegemoet voor deze discrepantie signaal gecodeerd. De functies aan de onderkant worden geleverd door Adafruit, en ze kunnen gemakkelijk worden aangepast afhankelijk van wat u op zoek bent om te doen met de LED-strip.
void loop() { if (irrecv.decode(&results)) {//has a transmission been received? if (results.value == 2148529177 || results.value == 2148496409 || results.value == 16738455){ //If the "0" button or the "stop" button is pressed, the LEDs all turn off. colorWipe(strip.Color(0,0,0), 20); } irrecv.resume(); // Receive the next value from the IR Sensor } if (irrecv.decode(&results)) {//has a transmission been received? if (results.value == 2148529164 || results.value == 2148496396 || results.value == 16753245){ //If the power button is pressed the LEDs all initialize to red colorWipe(strip.Color(255,0,0), 20); } irrecv.resume(); // Receive the next value from the IR Sensor } if (irrecv.decode(&results)) {//has a transmission been received? if (results.value == 2148529171 || results.value == 2148496403 || results.value == 16724175){ //If the "1" Button or the "x" button is pressed do the following: colorWipe(strip.Color(0,0,255), 20); } irrecv.resume(); // Receive the next value from the IR Sensor } if (irrecv.decode(&results)) { if (results.value == 2148496422 || results.value == 2148529190 || results.value == 16718055){ //If the "2" or "y" Button is pressed do the following: colorWipe(strip.Color(255,255,255), 20); } irrecv.resume(); } if (irrecv.decode(&results)) { if (results.value == 2148529185 || results.value == 2148496417 || results.value == 16743045) { //If the "3" button or "right arrow" is pressed do the following: theaterChaseRainbow(50); } irrecv.resume(); } if (irrecv.decode(&results)) { if (results.value == 2148529184 || results.value == 2148496416 || results.value == 16716015) { //If the "4" button or "left arrow" button is pressed do the following: rainbow(50); } irrecv.resume(); }
if (irrecv.decode(&results)) { if (results.value == 2148496418 || results.value == 2148529186 || results.value == 16726215) { //If the "5" button or "Ok" is pressed do the following: myStepper.step(stepsPerRevolution); //Rotates the stepper motor 1 revolution myStepper.step(stepsPerRevolution); } irrecv.resume(); } } // Fill the dots one after the other with a color<br>void colorWipe(uint32_t c, uint8_t wait) {
for(unit16_t I=0; I<strip.numPixels(); I++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
Theatre-style kruipen met regenboog effect ongeldig theaterChaseRainbow (uint8_t wachten) licht {voor (int j = 0; j < 256; j ++) {/ / cyclus van alle 256 kleuren in het wiel voor (int q = 0; q < 3; q ++) {voor (int i = 0; ik < strip.numPixels(); Ik = i + 3) {strip.setPixelColor (i + q, wiel ((i + j) % 255)); //turn elke derde pixel op} //Theatre-style crawling lights with rainbow effect void theaterChaseRainbow(uint8_t wait) { for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel for (int q=0; q < 3; q++) { for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, Wheel( (i+j) % 255));//turn every third pixel on } strip.show(); delay(wait); for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } } } // Input a value 0 to 255 to get a color value. // The colours are a transition r - g - b - back to r. uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } } void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { delay(wait); voor (int i = 0; ik < strip.numPixels(); Ik = i + 3) {strip.setPixelColor (i + q, 0); //turn elke derde pixel off strip.setPixelColor(i, Wheel((i+j) & 255); } } } / / Een invoerwaarde van 0 tot 255 om een kleurwaarde. De kleuren zijn een overgang r - g - b - terug naar r. uint32_t wiel (byte WheelPos) {WheelPos = 255 - WheelPos; if(WheelPos < 85) {return strip. Kleur (255 - WheelPos * 3, 0, WheelPos * 3); strip.show(); anders if(WheelPos < 170) {WheelPos-= 85; terugkeer strip. Kleur (0, WheelPos * 3, 255 - WheelPos * 3); delay(wait); else {WheelPos-= 170; terugkeer strip. Kleur (WheelPos * 3, 255 - WheelPos * 3, 0); }
}