Tekst na elkaar weergeven lukt niet

Ik ben aan het spelen met de starterkit, maar loop nu tegen een probleem aan waar ik niet uit kom.

Ik wil diverse ingangen uitlezen en deze waarde op het LCD scherm met een tussenpoos na elkaar weer laten geven. In het boek staat een voorbeeld die gebruik maakt van de “random” functie en de tilt sensor. Ipv daarvan wil ik dat de gegevens na elkaar wordt uitgelezen en bij de laatste waarde weer van voor af aan begint. Het probleem is nu dat steeds de laatste gegevens worden weergegeven op het LCD scherm en de gegevens na de intervaltijd worden geüpdatet. Ik weet niet wat er fout gaat, maar wil het wel graag weten.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 2, 3, 4, 5);              //Vertel de CPU op welke pinnen de LCD is aangesloten(Deze zijn anders dan in het boek)

const int LED_OUT = 10;                           //LED pin
const int contrast_OUT = 11;                   //Contrast pin

//De 3 analoge ingangen benoemen
const int ldrwaarde_IN = A0;                    //LDR sensor
const int potmeter_IN = A1;                       //Potentiometer
const int temperatuur_IN = A2;                //Temperatuur sensor

//Digitale ingang
int schakelaar_IN = 13;                           //Drukknop

//Variabelen voor de ingangen
int ldrwaarde_I = 0;
int potmeter_I = 0;
int temperatuur_I = 0;
int schakelaar_B = LOW;

//Variabelen voor de pulstimer en spring functie
long timeroud_L = 0;                     //Variabele voor timer functie en zet deze op 0
int timerstart_B = 0;
long timerinterval_L = 1000;      //Interval van knipperen (1000mili seconden)
int tekst_I = 0;                                  //Variabele voor stappenplan

void setup (){
  
  pinMode(LED_OUT, OUTPUT);                        //LED aansluiting als uitgang
  pinMode(contrast_OUT, OUTPUT);               //Contrast aansluiting als uitgang
  pinMode(schakelaar_IN, INPUT);                   //Drukknop als input instellen

//Start tekst voor als adruino wordt gestart of gereset.
  lcd.begin(16, 2);                                //Stel het aantal kolommen en regels in
  lcd.print("Even geduld: ");             //Tekst die direct wordt weergegeven
  lcd.setCursor(0, 1);                          //Verplaats de cursor naar het begin van de volgende regel
  lcd.print("gegevens laden");        //Tekst die onder de vorige regel wordt weergegeven
}

void loop () {

//Lees de ingangswaarden en zet ze in de juiste variabele

  potmeter_I = map(analogRead(potmeter_IN), 1024, 0, 0, 100);        //Waarde van potmeter gebruiken en bereik van contrast beperken en werking omkeren
  ldrwaarde_I = map(analogRead(ldrwaarde_IN), 0, 1024, 0, 150);      //Waarde van LDR gebruiken en bereik van lichtsterkte beperken
  temperatuur_I = analogRead(temperatuur_IN);                        //Lees de ingangswaarde en reken om naar graden celsius

//Rekenfactor voor temperatuursensor
  float spanning_F = (temperatuur_I/1024.0) * 5.0;                   //Ingangssignaal omrekenen naar spanning
  float temperatuur_F = ((spanning_F - .5) * 10.0) + 20.0;

//Aansturen van de LED uitgang en contrast
  analogWrite(LED_OUT, ldrwaarde_I);                                 //Aansturen van LED uitgang
  analogWrite(contrast_OUT, potmeter_I);                          //Aansturen van contrast

  unsigned long timer_L = millis ();                                 //Begin van pulstimer
  if (timer_L - timeroud_L > timerinterval_L) {
    timeroud_L = timer_L;
    if (timerstart_B == LOW)
      timerstart_B = HIGH;
    else
      timerstart_B = LOW;



/*Vanaf hier gaat het volgens mij fout.   */

  if(timerstart_B = LOW) {                                           //verhoog de waarde van tekst_I na interval en zet deze op 0 wanneer alle stappen zijn doorlopen(loop van tekst)
    tekst_I = tekst_I ++;
  if(tekst_I >= 4) {
    tekst_I = 0;
   }
  }  
//Hieronder komen de weer te geven teksten
  switch (tekst_I) {
  case 0:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Drukknop:");
    lcd.setCursor(0, 1);
    lcd.print(schakelaar_IN);
  case 1:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("LED waarde:");
    lcd.setCursor(0, 1);
    lcd.print(LED_OUT);
  case 2:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Contrastwaarde:");
    lcd.setCursor(0, 1);
    lcd.print(contrast_OUT);
  case 3:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temperatuur:");
    lcd.setCursor(0, 1);
    lcd.print(temperatuur_F);
  }
  }
}

De ingangswaardes worden wel goed uitgelezen en deze zijn via de seriële poort weer te geven. De delen met seriële communicatie heb ik uit het programma gehaald, omdat deze niet gebruikt wordt.
Tevens de vraag is het mogelijk om naast een variabele tekst weer te geven. (bijv temperatuursensor oC)

Mis je niet een 2e = teken?

		if (timerstart_B = LOW) { //verhoog de waarde van tekst_I na interval en zet deze op 0 wanneer alle stappen zijn doorlopen(loop van tekst)

Hou je er daarnaast rekening mee dat je een timer start? en dat deze weer opnieuiw wordt gecreerd als je bij het begin van loop() komt.
Ik zou de declaratie van die timers ff globaal maken.

Bedankt, Nico. Op meerdere plekken had ik de tweede = teken vergeten wat een deel van de problemen veroorzaakte. De variabele tekst_I blijft in de oude situatie altijd op 0. Na de aanpassing loopt deze op van 0 to 3 en gaat dan weer vanaf 0 beginnen zoals beoogd.

Het verspringen werkte daarna nog niet, ondanks dat de variabele de juiste waarde had. Door het programma te vergelijken met het programma uit het starterskit kwam ik erachter dat ik de "break" functie vergeten was te plaatsen bij elke case. Daardoor liep deze steeds naar de laatste stap.

switch(tekst_I) {
    case 0:                                  //Hier ontbreekt de break functie waardoor deze niet werkt.
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Drukknop:");
      lcd.setCursor(0, 1);
      lcd.print(schakelaar_IN);
    case 1:                                   //Hier is de break functie wel aanwezig en werkt het wel
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("LED waarde:");
      lcd.setCursor(0, 1);
      lcd.print(LED_OUT);
      break;

Klopt je moet altijd een break gebruiken bij de case anders loopt ie vrolijk door :grin: