Kört fast, styrning belysning på LCD display (Arduino)

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
PeterH
Inlägg: 8614
Blev medlem: 15 mars 2006, 15:57:10
Ort: Gävle/Valbo

Kört fast, styrning belysning på LCD display (Arduino)

Inlägg av PeterH »

Har kört fast och kan behöva en spark i rätt riktning... Kan börja med att säga att jag är kass på programmering så jag har antingen tänkt helt fel eller så är det nåt som Ni ser på en gång...

Jag försöker komplettera en befintlig kod (Arduino) att styra bakgrundsbelysningen på en display. Belysningen styrs via en MOSFET och den elektriska kopplingen fungerar bra, jag kan tända och släcka samt dimma, så där är inte problemet. Lägger in den delen av koden som jag jobbar på, tanken är att tända belysningen när man trycker på en knapp som startar en mätning...

"measState" kommer från befintlig kod och aktiveras när knappen trycks in. Tanken är att tända displayen och låta den vara tänd så länge som "backlightDelay" säger (just nu 3000ms), för att sedan dimmas ner till noll och förbli släkt. Det som händer är att displayen tänds, mätningen utförs och enheten återgår till att vänta på ny knapptryckning, men displayen slocknar aldrig... Jag har testat och fått dimnings-funktionen att fungera separat, men inte här :humm:

Kod: Markera allt

// Step the current state.
measState = (measState + 1) % 4;

// Turn on backlight and fade down -----------
if (measState <= 1)                              // Check status
  {
   startTime = millis();                         // Get time stamp 
   digitalWrite(backlightPin, HIGH);             // Turn on backlight
           
   if ((millis() - startTime) > backlightDelay)  // Check delay time since status change
     {
      for (i = 255; i > 0; --i){                  // loop from 254 to 0 (fade out)
      brightness = i;
      analogWrite(backlightPin, brightness);
      delay(fadeDownDelay);}
      }
    }
// End backlight function  --------------------
Skogen
Inlägg: 904
Blev medlem: 5 januari 2013, 22:50:34
Ort: Alingsås

Re: Kört fast, styrning belysning på LCD display (Arduino)

Inlägg av Skogen »

Så som jag ser det:
Om "measState <=1" så startar du timern och tänder backlight, om och om igen.
Om "measState >1" så händer ingenting, backlight dimmas ej.
Borre
Inlägg: 4572
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Kört fast, styrning belysning på LCD display (Arduino)

Inlägg av Borre »

Problemet är väl att du har bägge if-satserna efter varandra.
Så när displayen ska släckas och första if-satsen är sann, då nollas ju timern igen med

Kod: Markera allt

startTime = millis();                         // Get time stamp
Så när du kommer till andra if-satsen har ju tiden knappt hunnit gått och den blir aldrig sann.
Användarvisningsbild
PeterH
Inlägg: 8614
Blev medlem: 15 mars 2006, 15:57:10
Ort: Gävle/Valbo

Re: Kört fast, styrning belysning på LCD display (Arduino)

Inlägg av PeterH »

Hmm... jag _tror_ jag förstår vad ni försöker säga, ska suga lite och försöka tänka om (är som sagt NOOB :oops: ) Det är alltså så att jag inte kan köra en if sats i en annan, trodde den "innersta" if-satsen kördes klart innan den gick ut i den "yttre" if-satsen igen...

Vilka alternativ finns till if-satsen, jag har gjort lite lama försök med att skapa en funktion för "fade" men jag kunde inte ropa på funktionen eftersom jag inte fick till så att funktionen räknade ner när den inte låg i loopen... :vissla:
Skogen
Inlägg: 904
Blev medlem: 5 januari 2013, 22:50:34
Ort: Alingsås

Re: Kört fast, styrning belysning på LCD display (Arduino)

Inlägg av Skogen »

"Det är alltså så att jag inte kan köra en if sats i en annan"
Visst kan du det!

" trodde den "innersta" if-satsen kördes klart innan den gick ut i den "yttre" if-satsen igen..."
Fel. Den kör bara en gång om if-satsen är sann.

Lägg backlight-dimning utanför if-satsen "measState" .
Skriv svar