Sida 1 av 1

Ingen uppdatering av visat värde.

Postat: 18 september 2020, 13:43:08
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);
  }

}

Re: Ingen uppdatering av visat värde.

Postat: 18 september 2020, 14:14:41
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...

Re: Ingen uppdatering av visat värde.

Postat: 20 september 2020, 23:35:01
av sodjan
Tja, hur som helst... Hoppas att det löste sig.

Re: Ingen uppdatering av visat värde.

Postat: 21 september 2020, 08:22:24
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:)

Re: Ingen uppdatering av visat värde.

Postat: 21 september 2020, 12:34:34
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...

Re: Ingen uppdatering av visat värde.

Postat: 21 september 2020, 17:45:48
av TomasL
Lämpligen gör du en loop som uppdaterar displayen 1 gång per sekund eller så

Re: Ingen uppdatering av visat värde.

Postat: 23 september 2020, 07:24:26
av EonX
Tack för förslagen:) jag skall prova detta.