Sida 1 av 1

Arduino: Blinka med lampa (löst)

Postat: 28 juni 2018, 20:50:35
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.

Re: Arduino: Blinka med lampa

Postat: 28 juni 2018, 23:51:38
av jah
Finns ett exempel som visar principen för detta
File/Examples/02.Digital/BlinkWithoutDelay

/J

Re: Arduino: Blinka med lampa

Postat: 29 juni 2018, 00:13:15
av sodjan

Re: Arduino: Blinka med lampa

Postat: 29 juni 2018, 06:04:19
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.....

Re: Arduino: Blinka med lampa

Postat: 29 juni 2018, 07:42:30
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!

Re: Arduino: Blinka med lampa

Postat: 29 juni 2018, 11:32:45
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();
  
}

Re: Arduino: Blinka med lampa

Postat: 29 juni 2018, 14:47:28
av RadioDJ
Tack jah.
Var något sådant jag tänkt mig.
Ska kolla när jag kommer hem.

Re: Arduino: Blinka med lampa

Postat: 1 juli 2018, 12:08:52
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".

Re: Arduino: Blinka med lampa

Postat: 1 juli 2018, 12:41:47
av Micke_s
millis rullar runt på ca 50 dagar, så det lär vara lungt

Re: Arduino: Blinka med lampa

Postat: 1 juli 2018, 20:41:36
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.