INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Mehrere If-Schleifen werden grundlos immer wieder durchlaufen
18.02.2021, 14:36
Beitrag #1
Mehrere If-Schleifen werden grundlos immer wieder durchlaufen
Hi,
ich habe folgenden Scetch geschrieben:
Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPinM = 8;
const int buttonPinL = 7;
const int buttonPinR = 6;
int buttonStateM = LOW;
int buttonStateL = LOW;
int buttonStateR = LOW;
int buttonStateHIGHM = 0;
int buttonStateHIGHL= 0;
int buttonStateHIGHR = 0;
int A=0;
int B=0;
int C=1;
int CA=1;
int CB=1;
int D=1;
int E=1;
int EA=1;
int EB=1;
int F=1;
int G=1;
int Z=1;
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Homescreen_A1()
{
  lcd.setCursor(0,0);
  lcd.print("--->Light");
  lcd.setCursor(0,1);
  lcd.print("Sound");
}
void Homescreen_A2()
{
  lcd.setCursor(0,0);
  lcd.print("Light");
  lcd.setCursor(0,1);
  lcd.print("--->Sound");
}
void Light_A1()
{
  lcd.setCursor(0,0);
  lcd.print("--->Mode");
  lcd.setCursor(0,1);
  lcd.print("Brightness");
}
void Light_A2()
{
  lcd.setCursor(0,0);
  lcd.print("Mode");
  lcd.setCursor(0,1);
  lcd.print("--->Brightness");
}
void Mode_A1()
{
  lcd.setCursor(0,0);
  lcd.print("--->1");
  lcd.setCursor(0,1);
  lcd.print("2");
}
void Mode_A2()
{
  lcd.setCursor(0,0);
  lcd.print("--->2");
  lcd.setCursor(0,1);
  lcd.print("3");
}
void Mode_A3()
{
  lcd.setCursor(0,0);
  lcd.print("--->3");
  lcd.setCursor(0,1);
  lcd.print("4");
}
void Mode_A4()
{
  lcd.setCursor(0,0);
  lcd.print("--->5");
  lcd.setCursor(0,1);
  lcd.print("6");
}
void Mode_A5()
{
  lcd.setCursor(0,0);
  lcd.print("--->6");
  lcd.setCursor(0,1);
  lcd.print("7");
}
void Mode_A6()
{
  lcd.setCursor(0,0);
  lcd.print("--->7");
  lcd.setCursor(0,1);
  lcd.print("8");
}
void Mode_A7()
{
  lcd.setCursor(0,0);
  lcd.print("--->8");
  lcd.setCursor(0,1);
  lcd.print("9");
}
void Mode_A8()
{
  lcd.setCursor(0,0);
  lcd.print("--->9");
  lcd.setCursor(0,1);
  lcd.print("10");
  
}
void Mode_A9()
{
  lcd.setCursor(0,0);
  lcd.print("--->10");
  lcd.setCursor(0,1);
  lcd.print("11");
}
//-------------------------------------------------------------------------------------------------------------------------------
void setup()                                                                                    
{
Serial.begin(9600);
pinMode(buttonPinM, INPUT);
pinMode(buttonPinL, INPUT);
pinMode(buttonPinR, INPUT);
buttonStateM = digitalRead(buttonPinL);
buttonStateL = digitalRead(buttonPinL);
buttonStateR = digitalRead(buttonPinR);

// set up the LCD's number of columns and rows:
  lcd.begin(16,2);
// Print a message to the LCD.
  lcd.setCursor(0,0);
  lcd.print(" By Lucas K\xF5hn");
  lcd.setCursor(0,1);  //Display position
  lcd.print("----------------");
  delay(2000);
  lcd.clear();

}
//---------------------------------------------------------------------------------------------------------------------------------
void loop()
{
Serial.println(Z);
buttonStateM = digitalRead(buttonPinM);
buttonStateL = digitalRead(buttonPinL);
buttonStateR = digitalRead(buttonPinR);

if ((buttonStateL == LOW && buttonStateR == LOW) && A == 0)
{
Homescreen_A1();

}

if (B == 0)
{

  if (buttonStateR == HIGH) //Runter
    {
      A++;
      buttonStateHIGHR = 1;
    }
  
    if (buttonStateR == LOW && buttonStateHIGHR == 1)
    {
      
      lcd.clear();
      Homescreen_A2();
      buttonStateHIGHR = 0;
      C=0;
      if(CB == 0)
      {
       CB=1;
       CA=0;
      }
      
    }
    
    if (buttonStateL == HIGH)
     {
      buttonStateHIGHL = 1;
     }
     if (buttonStateL == LOW && buttonStateHIGHL == 1)
     {
       lcd.clear();
       Homescreen_A1();
       buttonStateHIGHL = 0;
       C=0;
       if(CB == 0)
      {
       CA=0;
       CB=1;
      }
      if(CB == 1)
      {
        CA=0;
      }

      }

}      

if(C == 0)
{
  if(CA == 0)
  {
    
   if (buttonStateM == HIGH)
      {
      buttonStateHIGHM = 1;
      }
      if (buttonStateM == LOW && buttonStateHIGHM == 1)
      {
        lcd.clear();
        buttonStateHIGHM = 0;
        Light_A1();
        B=1;
        D=0;

      }
  }


}

if (D == 0)
{
   if (buttonStateR == HIGH) //Runter
    {
      buttonStateHIGHR = 1;
    }
  
    if (buttonStateR == LOW && buttonStateHIGHR == 1)
    {  
      lcd.clear();
      Light_A2();
      buttonStateHIGHR = 0;
    }


if (buttonStateL == HIGH)
     {
      buttonStateHIGHL = 1;
     }
   if (buttonStateL == LOW && buttonStateHIGHL == 1)
   {
     lcd.clear();
     Light_A1();
     buttonStateHIGHL = 0;
     E=0;
     C=1;
     if(EB == 0)
     {
     EA=0;
     EB=1;
     }
     if(EB == 1)
     {
     EA=0;
     }
    }
}

if (E == 0)
{
  if(EA == 0)
    {
      
     if (buttonStateM == HIGH)
        {
        buttonStateHIGHM = 1;
        }
        if (buttonStateM == LOW && buttonStateHIGHM == 1)
        {
          lcd.clear();
          buttonStateHIGHM = 0;
          Mode_A1();
          D=1;
          F=0;
  
        }
    }
}
if(F == 0)
{
  Z=1;
  if(Z=1)
    {
      Mode_A1();
    }
    if(Z=2)
    {
      Mode_A2();
    }
    if(Z=3)
    {
      Mode_A3();
    }
    if(Z=4)
    {
      Mode_A4();
    }
    if(Z=5)
    {
      Mode_A5();
    }
    if(Z=6)
    {
      Mode_A6();
    }
    if(Z=7)
    {
      Mode_A7();
    }
    if(Z=8)
    {
      Mode_A8();
    }
    if(Z=9)
    {
      Mode_A9();
    }
    

    

  if (buttonStateR == HIGH) //Runter
    {
      buttonStateHIGHR = 1;
    }
  
    if (buttonStateR == LOW && buttonStateHIGHR == 1)
    {
      Serial.println(Z);
      if(Z != 10)
      {
       Z++;
      }
      else
      {
       Z=10;
      }
      buttonStateHIGHR = 0;
    }


if (buttonStateL == HIGH)
     {
      buttonStateHIGHL = 1;
     }
   if (buttonStateL == LOW && buttonStateHIGHL == 1)
   {
    
     if(Z != 1)
     {
      Z--;
     }
     else
     {
      Z=1;
     }
     buttonStateHIGHL = 0;
     E=1;
    }
    
}
}
Damit soll man später mal die Modis von ws2812b LED-Streifen ändern können usw.

Aktuell hänge ich an diesen Teil des Scetches:
Code:
if(F == 0)
{
  Z=1;
  if(Z=1)
    {
      Mode_A1();
    }
    if(Z=2)
    {
      Mode_A2();
    }
    if(Z=3)
    {
      Mode_A3();
    }
    if(Z=4)
    {
      Mode_A4();
    }
    if(Z=5)
    {
      Mode_A5();
    }
    if(Z=6)
    {
      Mode_A6();
    }
    if(Z=7)
    {
      Mode_A7();
    }
    if(Z=8)
    {
      Mode_A8();
    }
    if(Z=9)
    {
      Mode_A9();
    }
    

    

  if (buttonStateR == HIGH) //Runter
    {
      buttonStateHIGHR = 1;
    }
  
    if (buttonStateR == LOW && buttonStateHIGHR == 1)
    {
      Serial.println(Z);
      if(Z != 10)
      {
       Z++;
      }
      else
      {
       Z=10;
      }
      buttonStateHIGHR = 0;
    }


if (buttonStateL == HIGH)
     {
      buttonStateHIGHL = 1;
     }
   if (buttonStateL == LOW && buttonStateHIGHL == 1)
   {
    
     if(Z != 1)
     {
      Z--;
     }
     else
     {
      Z=1;
     }
     buttonStateHIGHL = 0;
     E=1;
    }
    
}

Diese If-Schleifen sollten eigentlich einzeln aktiv sein, da "Z" immer nur ein Wert haben kann.
Aber es werden immer alle dieser If-Schleifen benutzt.
Das LCD-Display zeigt demzufolge uneserliche Zahlen an.

Könnt ihr mir bitte sagen, was ich falsch mache?Huh

Vielen Dank
(Und ja, der Scetch ist vielleicht etwas unübersichtlich, das soll sich jedoch, wenn er fertig ist noch ändern).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.02.2021, 14:48 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2021 14:49 von Tommy56.)
Beitrag #2
RE: Mehrere If-Schleifen werden grundlos immer wieder durchlaufen
1. Es gibt keine if-Schleifen, nur if-Abfragen
2. Lerne den Unterschied zwischen = und ==
3. Was gilt in C/C++ als true und was als false

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.02.2021, 15:12
Beitrag #3
RE: Mehrere If-Schleifen werden grundlos immer wieder durchlaufen
Einen großen Teil deiner if-Abfragen würde ich durch switch/case ersetzen.

Auch ist es nicht üblich nur einzelne Buchstaben als Variablenname zu verwenden.
Das ist sehr schwer lesbar und in einigen Wochen weißt du nicht mehr, wass sich dahinter verbirgt.
Verwende immer sprechende Namen und du machst dir vieles leichter.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.02.2021, 15:41
Beitrag #4
RE: Mehrere If-Schleifen werden grundlos immer wieder durchlaufen
(18.02.2021 14:48)Tommy56 schrieb:  1. Es gibt keine if-Schleifen, nur if-Abfragen
2. Lerne den Unterschied zwischen = und ==
3. Was gilt in C/C++ als true und was als false

Gruß Tommy

Oh misst... Danke.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Sketch wieder auslesen Renti 10 905 16.04.2021 08:27
Letzter Beitrag: MicroBahner
  Fortschritt automatisch durchlaufen schulz 9 677 16.04.2021 07:43
Letzter Beitrag: schulz
  Nano. Sketch kann nicht hochgeladen werden 4heiner 4 469 02.04.2021 17:21
Letzter Beitrag: 4heiner
  Attiny85 Probleme mit Schleifen und Serial-Ausgabe lucki.luke 9 948 07.03.2021 20:55
Letzter Beitrag: Tommy56
  If-Schleife wird nicht mehr durchlaufen LK2567 2 473 05.02.2021 21:20
Letzter Beitrag: LK2567
  Mehrere Delays nacheinander Jojo58 5 554 13.01.2021 23:14
Letzter Beitrag: Jojo58
Sad nrf24L01: ein Sender mehrere Empfänger louard 6 734 11.01.2021 22:25
Letzter Beitrag: louard
  mehrere Routinen parallel laufen lassen PurpleLightning 14 1.294 30.12.2020 08:44
Letzter Beitrag: PurpleLightning
  Wetterstation mal anders - Funktionsaufrufe werden nicht „abgearbeitet“ kunstelch 12 1.288 21.12.2020 16:51
Letzter Beitrag: kunstelch
  Mehrere LED's mit versch. Farben ansteuern Daiminium 15 1.989 06.08.2020 07:50
Letzter Beitrag: MicroBahner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste