Blink without Delay al posto del led un variabile

volele chiede come posso fare per sostituire il led lampeggiante in Blink without Delay

con una semplice variabile tipo al posto di led acceso "variabile"=1 al posto di led spento "variabile"=o

questo per poter risparmiare un pin in caso servisse per altro, e invece di confrontare == il led acceso

confronto == variabile

Non capisco la tua domanda. c'é giá una varbile ledState.

/* Blink without Delay
  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 */


const int ledPin =  13;      // the number of the LED pin
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
   pinMode(ledPin, OUTPUT);      
}

void loop()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
     previousMillis = currentMillis;  
   if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    digitalWrite(ledPin, ledState);
  }
}

ok grazie mille ho risolto con il tuo "indizio"

(purtroppo sembra che ancora sono cronicamente afflitto da mancanza di pin nei miei progetti/studio)

sono riuscito a liberare il pin 13 dal lampeggio mettendo questo codice mi ritrovo ledstate che passa da 0 a 1 :slight_smile:

     // the number of the LED pin
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
}

void loop()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
     previousMillis = currentMillis;  
   if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
  }
}

se non sbaglio si potrebbe ottenere la stessa cosa portando una variabile a 1 se millis < 1000 e quando millis e >2000 resettarlo a zero

GINGARDU:
ok grazie mille ho risolto con il tuo "indizio"

(purtroppo sembra che ancora sono cronicamente afflitto da mancanza di pin nei miei progetti/studio)

sono riuscito a liberare il pin 13 dal lampeggio mettendo questo codice mi ritrovo ledstate che passa da 0 a 1 :slight_smile:

     // the number of the LED pin

int ledState = LOW;            // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

long interval = 1000;          // interval at which to blink (milliseconds)

void setup() {
}

void loop()
{
  unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 
  if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
  }
}




se non sbaglio si potrebbe ottenere la stessa cosa portando una variabile a 1 se millis < 1000 e quando millis e >2000 resettarlo a zero

si è lo stesso praticamente...
ma non ho capito bene quale è il problema, vuoi fare il blink sul pin 13, o no? così come è il codice l'arduino calcola e basta, non accende e spegne niente...

?R:

GINGARDU:
se non sbaglio si potrebbe ottenere la stessa cosa portando una variabile a 1 se millis < 1000 e quando millis e >2000 resettarlo a zero

volevo un "qualcosa" che varia di stato una volta al secondo su cui appoggiarmi per fare degli if senza impegnare uscite di arduino e senza delay

Prova con la nuova libreria LeOS di Leo.

beh prova a fare il resto del codice, poi si vede come è meglio fare...
comunque da quel che ho capito ti servirebbe una cosa così:

byte function=0;
unsigned long time=0;

void setup()
{
 time=millis();
}

void loop()
{
 if(millis()-time>=1000)
 {
  time=millis();

  if(function<=4) function++;
  else function=0;
 }
 
 switch(function);
 {
  case 0:{...}break;
  
  case 1:{...}break;
  
  case 2:{...}break;
  
  case 3:{...}break;
  
  case 4:{...}break;
 }
}

con questo codice il programma cambia funzione ogni secondo, una volta fatta la 5^ riparte dalla prima... spero di esserti stato d'aiuto :wink: