Ingen uppdatering av visat värde.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Ingen uppdatering av visat värde.

Inlägg av EonX »

Hej igen!

Fick så galet snabb hjälp innan idag så jag provar igen. Återigen säkert lika enkel fråga för er som kan.

Jag har visning av olika värden på min oled.
Jag "togglar" mellan värdena med en knapp. (i denna kod är det bara 1 som är aktiv, dom andra är bara text än så länge)
När jag kör bara temperaturvisningen utan hela växlingskoden fungerar det mycket bra.

Mitt problem är att den inte vill uppdatera temperaturen kontinuerligt. Detta sker bara när jag "togglar" runt ett varv och visar det igen.

Finns det nått bra/lätt sätt att få värdet att uppdateras kontinuerligt?

det gäller funktionen "case1"

Kod: Markera allt

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h><br>#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 
Adafruit_SSD1306 display(OLED_RESET);
#define ONE_WIRE_BUS 4

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

const byte buttonPin = 8;

int buttonPushCounter = 0;   // counter for the number of button presses
boolean buttonState = LOW;         // current state of the button
boolean lastButtonState = LOW;     // previous state of the button

// lcd constructor made global in scope so the whole program can sse it


void setup()
{
  Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  pinMode(buttonPin, INPUT);
 sensors.begin();
}


void loop()
{
sensors.requestTemperatures(); 
float T = sensors.getTempCByIndex(0);  // let T be temperature in degC from sensor<br>// floating-point number, with a decimal point
String sT = String(T, 1);




  
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);
  // compare the buttonState to its previous state
  if (buttonState != lastButtonState)
  {
    if (buttonState == HIGH)
    {
      // if the current state is HIGH then the button
      // went from off to on:
      buttonPushCounter++;  // add one to counter
      delay (100);
      display.clearDisplay(); 
      if (buttonPushCounter > 4) // if couter over 3 reset the counter to 1 to show "Jon"
                                 // and not "Hello All"
      {
        buttonPushCounter = 1;
      }
      switch (buttonPushCounter) // choose what to display based on buttonPushCounter value
      {
        case 1:
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE); 
display.setCursor(0,0);
display.println("Vattentemp: ");   // display temperature in deg Celsius
display.setCursor(0,10);
display.setTextSize(3);
display.print(sT);
display.print(" ");
display.cp437(true);      // code page 437
display.write(167);       // character 167 is degree
display.println("C");
display.display();    // for the changes to make effect
          break;
       
        
        
        
        case 2:
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE); 
display.setCursor(0,0);
display.println("Yttertemp: ");   // display temperature in deg Celsius
display.setCursor(0,10);
display.setTextSize(3);
display.print("20.0");
display.print(" ");
display.cp437(true);      // code page 437
display.write(167);       // character 167 is degree
display.println("C");
display.display();    // for the changes to make effect
          break;
        
        
        
        
        
        case 3:
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE); 
display.setCursor(0,0);
display.println("Rokgastemp ");   // display temperature in deg Celsius
display.setCursor(0,10);
display.setTextSize(3);
display.print("360");
display.print(" ");
display.cp437(true);      // code page 437
display.write(167);       // character 167 is degree
display.println("C");
display.display();    // for the changes to make effect
          break;
        
        
        
        
        
        
        case 4:
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE); 
display.setCursor(0,0);
display.println("Tid sedan rening: ");   // display temperature in deg Celsius
display.setCursor(0,10);
display.setTextSize(3);
display.print("32");
display.print(" ");
display.println("min");
display.display();    // for the changes to make effect
          break;
      }
    }
    // save the current state as the last state,
    //for next time through the loop
    lastButtonState = buttonState;
    delay (100);
  }

}
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Ingen uppdatering av visat värde.

Inlägg av sodjan »

Något (otestat!) i stil med:

if (buttonState != lastButtonState)
{
(Ha enbart koden som räknar upp buttonPushCounter här...
}

Här har du samma kod som nu är inom if blocket ovan, men som
kommer att köras varje "varv" oavsett om knappen trycks eller inte.

switch (buttonPushCounter)
...
...

Du sa ju själv att du ville uppdatera oavsett om en knapp är tryckt eller inte...

Sen så är ju de flesta raderna i varje "case" likadana, så det behöver inte vara med inom "switch"'en.
Det räcker med att ha dessa en gång före eller efter switch blocket...
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Ingen uppdatering av visat värde.

Inlägg av sodjan »

Tja, hur som helst... Hoppas att det löste sig.
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Ingen uppdatering av visat värde.

Inlägg av EonX »

Jag har faktiskt inte hunnit prova din ide där, men jag tror den kan funka.


det går om intet tror ja att jag kommer nöja med att informationerna "rullar på skärmen med några sekunders intervall. Då uppdateras det ju varje visning ist:)
Användarvisningsbild
farbrorvattenmelon
Inlägg: 255
Blev medlem: 29 januari 2009, 21:38:21

Re: Ingen uppdatering av visat värde.

Inlägg av farbrorvattenmelon »

Som sodjan säger:
Din kod skriver ju bara till displayen om knappen har blivit påverkad, sen står det samma tills knappen påverkas igen.
Även om ingen trycker på knappen måste du ju skicka ny text till displayen kontinuerligt...
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Ingen uppdatering av visat värde.

Inlägg av TomasL »

Lämpligen gör du en loop som uppdaterar displayen 1 gång per sekund eller så
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Ingen uppdatering av visat värde.

Inlägg av EonX »

Tack för förslagen:) jag skall prova detta.
Skriv svar