Go Down

Topic: Blink without Delay al posto del led un variabile (Read 875 times) previous topic - next topic

gingardu

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
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

uwefed

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

Code: [Select]
/* 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);
  }
}

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   :)

Code: [Select]


     // 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
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

ƎR



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   :)

Code: [Select]


     // 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...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

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
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...


ƎR

#6
Aug 10, 2012, 03:17 pm Last Edit: Aug 10, 2012, 03:19 pm by ?R Reason: 1
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ì:

Code: [Select]

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 ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Go Up