Ragazzi sto cercando di controllare tramite un singolo pulsante (pull up/down) 3 pezzi di strip neopixel collegate in pin differenti in modo tale da cambiarne le modalità e i giochi di colore, sfortunatamente non riesco a capire come mai non funzioni. grazie in anticipo per la risposta :o
// Primo tocco: led lampeggia ogni mezzo secondo
// Secondo tocco: led lampeggia ogni secondo
// Terzo tocco: led lampeggia ogni secondo e mezzo
// Quarto tocco: led si spegne
//...................................................
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define LED_PIN 5
#define LED_COUNT 3
// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
//....................................................
const int BUTTON = 52; // pin di input a cui è collegato il pulsante
const int LED_PIN = 5; // LED collegato al pin digitale 13
// Variabili globali (tutti interi)
int statoButton = 0; // stato del pulsante (inizialmente non premuto)
int lastStatoButton = 0; // ultimo stato del pulsante (per ora non premuto)
int countButton = 0; // Conteggio del bottone
// Avvio dell'applicazione
void setup()
{
pinMode(LED_PIN, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON, INPUT); // imposta il pin digitale come input
//..........................................
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
//......................................
}
// Avvio del loop
void loop()
{
// Verifico se l'utente ha premuto il bottone
if(digitalRead(BUTTON))
{
// Aspetto 15ms per far alzare il dito all'utente
delay(15);
// Cambio l'ultimo stato del bottone
if(lastStatoButton==0) lastStatoButton=1;
else lastStatoButton=0;
// Aumento il count del bottone
if(countButton<=3) countButton=countButton+1;
else countButton=0;
}
// In base allo stato del bottone scelgo l'azione del led
switch (countButton)
{
// Led lampeggia ogni mezzo secondo
case 1:
//....................................
// Fill along the length of the strip in various colors...
colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color( 0, 255, 0), 50); // Green
colorWipe(strip.Color( 0, 0, 255), 50); // Blue
// Do a theater marquee effect in various colors...
theaterChase(strip.Color(127, 127, 127), 50); // White, half brightness
theaterChase(strip.Color(127, 0, 0), 50); // Red, half brightness
theaterChase(strip.Color( 0, 0, 127), 50); // Blue, half brightness
rainbow(10); // Flowing rainbow cycle along the whole strip
theaterChaseRainbow(50); // Rainbow-enhanced theaterChase variant
//....................................
break;
// Led lampeggia ogni secondo
case 2:
digitalWrite(LED_PIN, HIGH); // accende il LED
delay(1000); // aspetta un secondo
digitalWrite(LED_PIN, LOW); // spegne il LED
delay(1000); // aspettaun secondo
break;
// led lampeggia ogni secondo e mezzo
case 3:
//.............................................
void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
strip.show(); // Update strip to match
delay(wait); // Pause for a moment
}
}//..........................................
break;
// Led si spegne
case 0:
delay(15);
digitalWrite(LED_PIN, LOW);
delay(5000); // aspetta un secondo
break;
}
}