Arduino: Blinka med lampa (löst)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
RadioDJ
Inlägg: 402
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Arduino: Blinka med lampa (löst)

Inlägg av RadioDJ »

Just nu är jag som alla politiker.
Jag har lite otur när jag tänker.
Har provat både länge och väl, men ack nej.
Skulle vilja ha hjälp med lite kodexempel på en funktion som blinkar en lampa.
Dock har jag en del krav:
Ingen delay() får användas.
Det ska gå att bestämma hur länge den ska vara tänd samt hur länge den ska vara släckt. Tiderna ska inte var samma.
Det ska även gå att tala om att den ska Blinka ex. 3 ggr med dessa intervall.
Efter dessa gånger ska den förbli släckt tills nästa triggning, som sker via en knapp.

Hade varit tacksam så att jag kan bli mig själv igen och gå vidare i projektet som snart ska provköras på riktigt.
Detta är en av de sista restpunkterna. Det andra håller nu på att testas.

Håller dock på med lite omarbetning av kod då vissa minnen börjar ta slut.
Senast redigerad av RadioDJ 1 juli 2018, 20:42:07, redigerad totalt 1 gång.
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Arduino: Blinka med lampa

Inlägg av jah »

Finns ett exempel som visar principen för detta
File/Examples/02.Digital/BlinkWithoutDelay

/J
RadioDJ
Inlägg: 402
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: Blinka med lampa

Inlägg av RadioDJ »

Detta exempel har jag full koll på men det visar bara hur man använder millis().
Det är bara en del av lösningen, men resten.....
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Arduino: Blinka med lampa

Inlägg av Icecap »

Jag hade ju gjort en lösning där en timer-interrupt hade styrd själva blinkningen som en sekvens med parameter som tid-på, tid-av och antal cyklar som ska utföras.

Men aldrig att jag hade gjort det med Arduino!
jah
Inlägg: 659
Blev medlem: 16 januari 2009, 13:00:08
Ort: Eslöv

Re: Arduino: Blinka med lampa

Inlägg av jah »

Kod: Markera allt

int LED = 13;
int Button = 12;
int BlinkOn_ms = 100;
int BlinkOff_ms = 500;
int Blinks = 5;
int BlinkCounter = 0;
bool BlinkState = false;
long Now, Next;

void BlinkHandler(){
  if (BlinkCounter) {
    Now=millis();
    if (Now>Next) {
      if (BlinkState) {
        digitalWrite(LED, LOW); //LED off
        Next = Now + BlinkOff_ms;
        BlinkCounter -= 1;
      } else {
        digitalWrite(LED, HIGH);  //LED on
        Next = Now + BlinkOn_ms;
      }
      BlinkState = !BlinkState;
    }
  } else {
    if (!digitalRead(Button)) {
      BlinkCounter = Blinks;
    }   
  }
}


void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  pinMode(Button, INPUT_PULLUP);
}

void loop() {
  // put your main code here, to run repeatedly:
  BlinkHandler();
  
}
RadioDJ
Inlägg: 402
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: Blinka med lampa

Inlägg av RadioDJ »

Tack jah.
Var något sådant jag tänkt mig.
Ska kolla när jag kommer hem.
daer
Inlägg: 355
Blev medlem: 13 juni 2008, 22:15:27
Ort: Höör och Helsingborg, Skåne

Re: Arduino: Blinka med lampa

Inlägg av daer »

Denna lösning har bara ett litet problem. Vad händer om BlinkHandler kör när millis + BlinkTime "wrappar"?

Det är därför som tidsjämförelser görs på ett lite annorlunda sätt i exemplen ovan. T.ex.
if (currentMillis - previousMillis >= interval)

Vet inte hur stor millis är i Arduino, kanske int är något problem, kanske är det. Samtidigt beror på applikationen men det är alltid bra att göra "rätt".
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Arduino: Blinka med lampa

Inlägg av Micke_s »

millis rullar runt på ca 50 dagar, så det lär vara lungt
RadioDJ
Inlägg: 402
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: Blinka med lampa

Inlägg av RadioDJ »

Det är inga problem då projektet startar om varje dag. Som max går den 8 dagar utan omstart.
Koden fungerar, så nu ska jag bara koppla ihop den med resten.
Har lite andra problem också som måste lösas, som jag inte har någon koll på just nu.
Vissa saker uppför sig mycket lustigt.
Blir att tänka en runda till.
Tack för exemplet.
Skriv svar