Salve a tutti sono nuovo in questo mondo e avrei bisogno del vostro aiuto per un piccolo progetto che voglio realizzare .
Il mio progetto consiste semplicemente nel far funzionare un anello neopixel tramite lo strandtest continuamente e di accendere 11 led tramite un pulsante / interruttore con utilizzato di un solo arduino nano, i due codici sono utilizzati benissimo ma uniti no.
Cercando su internet ho capito che il problema potrebbe trovarsi nei delay () che bloccano il ciclo e sostituendoli con la funzione millis () dovrei risolvere il problema, qualcono sarebbe cosi gentile da aiutarmi a compiere questa operazione?
Buongiorno e benvenuto,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
fatto, grazie
Senza vedere cosa vuoi fare è un po' difficile rispondere, comunque, SI, la funzione delay() è una funzione così detta "bloccante" ... quando la chiami, per tutto il tempo che hai fissato, il programma NON può fare altro e resta fermo li.
Per ovviare a ciò si usano altre tecniche basate sulla funzione millis() ... prova a studiare quello che trovi QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ... vedrai che ti si chiariranno un po' di cose
Guglielmo
piccolo aggiornamento
sono riuscito a far funzionare insieme i due sketch ma mi fa accendere o spegnere i led solo all'inizio del loop
qualche suggerimento?
... come già ti ho detto ... se non metti il codice (...mi raccomando, in conformità al regolamento, punto 7, il codice va racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) come pretendi che ti aiutiamo?
Guglielmo
hai ragione scusami, questo è il codice che sto utilizzando
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Richiesto per Adafruit Trinket da 16 MHz
#endif
#define LED_PIN 9
// Quanti NeoPixel sono collegati ad Arduino?
#define LED_COUNT 24
// Dichiara il nostro oggetto strip NeoPixel:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
unsigned long interval=1000; // the time we need to wait
unsigned long previousMillis=0; // millis() returns an unsigned long.
unsigned long interval1=10; // the time we need to wait
unsigned long previousMillis1=0; // millis() returns an unsigned long.
int ledPin = 5;
int pulsantePin = 2;
int ledStato = LOW;
int pulsanteStato = LOW;
int attesaDebounce = 50;
unsigned long ultimoTempoDebounce = 0;
int ultimaLettura = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(pulsantePin, INPUT);
digitalWrite(ledPin, ledStato);
strip.begin(); // INIZIALIZZA l'oggetto striscia NeoPixel (RICHIESTO)
strip.show(); // Disattiva tutti i pixel al più presto
strip.setBrightness(50);
}
void loop() {
unsigned long currentMillis1 = millis(); // grab current time
// check if "interval" time has passed (1000 milliseconds)
if ((unsigned long)(currentMillis1 - previousMillis1) >= interval1) {
pulsante();
previousMillis1 = millis();
}
unsigned long currentMillis = millis(); // grab current time
// check if "interval" time has passed (1000 milliseconds)
if ((unsigned long)(currentMillis - previousMillis) >= interval) {
rainbow();// "toggles" the state
// sets the LED based on ledState
// save the "current" time
previousMillis = millis();
}
}
void pulsante(){
int lettura = digitalRead(pulsantePin);
if(lettura != ultimaLettura){
ultimoTempoDebounce = millis();
}
if((millis() - ultimoTempoDebounce) > attesaDebounce){
if(lettura != pulsanteStato and lettura == HIGH){
ledStato = !ledStato;
digitalWrite(ledPin, ledStato);
}
pulsanteStato = lettura;
}
ultimaLettura = lettura;
}
void rainbow() {
// Hue of first pixel runs 5 complete loops through the color wheel.
// Color wheel has a range of 65536 but it's OK if we roll over, so
// just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
// means we'll make 5*65536/256 = 1280 passes through this outer loop:
for (long firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 256) {
for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
// Offset pixel hue by an amount to make one full revolution of the
// color wheel (range of 65536) along the length of the strip
// (strip.numPixels() steps):
int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
// strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
// optionally add saturation and value (brightness) (each 0 to 255).
// Here we're using just the single-argument hue variant. The result
// is passed through strip.gamma32() to provide 'truer' colors
// before assigning to each pixel:
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
}
strip.show(); // Update strip with new contents
// Pause for a moment
}
}
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.