Ratlosigkeit beim Code

Hey Leute. Dieser Code entspringt einer Schulaufgabe und mein Lehrer kann selbst den Fehler nicht finden.

#include <LiquidCrystal.h>
#include <Servo.h>
Servo Servo2;
Servo Servo3;
int g=0; //Startschuss für nach Matheaufgabe
int h=6; //not needed
int i=0; //start next Mathtask
int p=0; //Save opens if p is 3
int r=0; //Matheaufgabenantwort "richtig"
int f=0; //Matheaufgabenantwort "falsch"
int A; //1. generated number for mathtask //will be calculated with B to D
int B; //2. generated number for mathtask //will be calculated with A to D
int C; //3. generated number for mathtasksolution //has no connections to A/B/D
int D; //calculated solution of A and B
int LED1=13;
int LED2=10;
int LED3=9;
int zeit=1000; //regulate time (used in Lessons to improve code quickly)
int LDRlesezeit=1000;
int ldr=A0; //1.LDR (moves 2 Servos)
int Helligkeit; //1.Brightness
int LDR=A1; //2.LDR (Point/left)<-directioninformation is just needed for our hardware
int HElligkeit; //2.Brightness
int LdR=A2; //3.LDR (Point/right)<-directioninformation is just needed for our hardware
int HELligkeit; //3.Brightness
int LDRrichtig=A3; //4.LDR (answer "richtig") //left to the green lights
int HELLigkeit; //4.Brightness
int LDRfalsch=A4; //5.LDR (answer "falsch") //right to the green lights
int HELLIgkeit; //5.Brightness

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

void setup() {
Serial.begin(9600);
Servo2.attach (22); //bkockade-left
Servo3.attach (24); //blockade-right
Servo2.write (0);
Servo3.write (0);
digitalWrite(LED1, LOW); //RGB turns red (laser is dangerous)
digitalWrite(LED2, LOW);
digitalWrite(LED3,LOW);
i=0;
randomSeed(analogRead(A5));


 pinMode(28,OUTPUT); //4.Servo (Savedoor)
 pinMode(26,OUTPUT); //3.Servo (blokade-right)
 pinMode(24,OUTPUT); //2.Servo (blokade-left)
 pinMode(22,OUTPUT); //free
 pinMode(13,OUTPUT); //1.LCD
 pinMode(10,OUTPUT); //2.LCD
 pinMode(9,OUTPUT); //3.LCD
 pinMode(8,OUTPUT); //LCD
 pinMode(7,OUTPUT); //LDR1
 pinMode(6,OUTPUT); //LDR2
 pinMode(1,OUTPUT); //free
 pinMode(14,OUTPUT); //free
 pinMode(12,OUTPUT); //LCD
 pinMode(11,OUTPUT); //LCD
 pinMode(5,OUTPUT); //LDR3
 pinMode(4,OUTPUT); //free
 pinMode(3,OUTPUT); //free
 pinMode(2,OUTPUT); //free
 
 lcd.begin(16, 2);
 lcd.clear(); //is exempted from text as a precaution
 lcd.setCursor(0,0);
 lcd.print("Zeit eine Bank"); //start of Storyline 
 delay(1100);
 lcd.setCursor(0,1);
 lcd.print("AUSZURAUBEN!!!");
 delay(zeit);
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Entscheide, ob"); 
 lcd.setCursor(0,1);
 lcd.print("die Mathe-");
 delay(zeit);
 lcd.clear();
 lcd.setCursor (0,0);
 lcd.print ("aufgabe richtig");
 lcd.setCursor (0,1);
 lcd.print ("oder falsch ist");
 delay(zeit);
 lcd.clear();
 lcd.setCursor (0,0);
 lcd.print ("um den");
 lcd.setCursor(0,1);
 lcd.print("Laser zu hacken");
 delay(zeit);
 lcd.clear();
 lcd.setCursor (0,0);
 lcd.print ("und nicht er-");
 lcd.setCursor (0,1);
 lcd.print ("wischt zu werden!");
 delay (zeit);
 lcd.clear();
 lcd.setCursor (0,0);
 lcd.print ("Du solltest Acht"); 
 lcd.setCursor (0,1);
 lcd.print ("geben, denn die");
 delay (zeit);
 lcd.clear ();
 lcd.setCursor (0,0);
 lcd.print ("Bank wird bald");
 lcd.setCursor (0,1);
 lcd.print ("auf machen!");
 delay (zeit);
 lcd.clear ();
 lcd.setCursor (0,0);
 lcd.print ("Dann wuerdest du");
 lcd.setCursor (0,1);
 lcd.print ("erwischt werden!");
 delay (zeit); 
 delay (15000);
 lcd.clear();
//Matheaufgabe 
    B=random(1,21);
    A=random(1,21);
    C=random(1,21);
    lcd.setCursor (0,0);
    lcd.print (A);
    lcd.setCursor (2,0);
    lcd.print ("*");
    lcd.setCursor (4,0);
    lcd.print (B);
    lcd.setCursor (6,0);
    lcd.print ("=");
    lcd.setCursor (8,0);
    lcd.print (C);
    D=A*B;
    Serial.print (C);
    Serial.print (" und ");
    Serial.println (D);
    delay (1500);
    g=1;


 if (C==D) { //if A and B result in C, set r+1
  r=r+1;}

 if (C!=D) { //if A and B don't result in C, set f+1
  f=f+1;}
 delay (1500);

}

void loop() {
Helligkeit=analogRead(ldr);
Serial.print ("1.Helligkeit="); //wenn dunkler wird zahl kleiner normal(1020)-dunkel(1000);LDR in der Mitte
Serial.println (Helligkeit);
HElligkeit=analogRead(LDR);
Serial.print ("2.Helligkeit"); //wenn dunkler wird zahl größer normal(165)-dunkel(430);LDR neben der RGB
Serial.println (HElligkeit);
HELligkeit=analogRead(LdR);
Serial.print ("3. Helligkeit="); //wenn dunkler wird zahl größer normal(200)-dunkel(630); LDR neben Mitte
Serial.println (HELligkeit);
HELLigkeit =analogRead (LDRrichtig);
Serial.print ("4.Helligkeit=");
Serial.println (HELLigkeit);
HELLIgkeit=analogRead (LDRfalsch);
Serial.print ("5.Helligkeit=");
Serial.println (HELLIgkeit);
delay (LDRlesezeit);


if (HELLigkeit>= 200 && HELLigkeit<=220) {
  r=r+1;}

if (HELLIgkeit>=200 && HELLIgkeit<=220) {
  f=f+1;}

 
if (r==2) { //if anwer is right
p=p+1;
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Der Laser ist");
lcd.setCursor(0,1);
lcd.print("aus, er wird"); 
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("dich nicht mehr ");
lcd.setCursor(0,1);
lcd.print("erwischen und du");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("kannst sicher");
lcd.setCursor(0,1);
lcd.print("vorbei.");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Hoffentlich ist"); 
lcd.setCursor(0,1);
lcd.print("deine Antwort");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("richtig! Sonst");
lcd.setCursor(0,1);
lcd.print("erwartet dich am");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ende die");
lcd.setCursor(0,1);
lcd.print("POLIZEI!!! :(");
delay(zeit);
lcd.clear();}

if (f==2) { //if anwer is right
p=p+1;
digitalWrite (LED1, HIGH);
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Der Laser ist");
lcd.setCursor(0,1);
lcd.print("aus, er wird "); 
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("dich nicht mehr ");
lcd.setCursor(0,1);
lcd.print("erwischen und du");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("kannst sicher");
lcd.setCursor(0,1);
lcd.print("vorbei.");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Hoffentlich ist"); 
lcd.setCursor(0,1);
lcd.print("deine Antwort");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("richtig! Sonst");
lcd.setCursor(0,1);
lcd.print("erwartet dich am");
delay(zeit);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ende die");
lcd.setCursor(0,1);
lcd.print("POLIZEI!!! :(");
delay(zeit);
lcd.clear();}

if (r<2 && g=l) {
  lcd.clear ();
  lcd.setCursor (0,0);
  lcd.print ("Oh nein!");
  lcd.setCursor (0,1);
  lcd.print ("Das war nicht richtig!");
  delay (zeit);
  lcd.clear();
  lcd.setCursor (0,0);
  lcd.print ("Du bist");
  lcd.setCursor (0,1);
  lcd.print ("erwischt!");
  delay (zeit);
  lcd.clear ();
  lcd.setCursor (0,0);
  lcd.print ("Du kannst von");
  lcd.setCursor (0,1);
  lcd.print ("vorne beginnen!");
}

if (f<2 && g=l) {
  lcd.clear ();
  lcd.setCursor (0,0);
  lcd.print ("Oh nein!");
  lcd.setCursor (0,1);
  lcd.print ("Das war nicht richtig!");
  delay (zeit);
  lcd.clear();
  lcd.setCursor (0,0);
  lcd.print ("Du bist");
  lcd.setCursor (0,1);
  lcd.print ("erwischt!");
  delay (zeit);
  lcd.clear ();
  lcd.setCursor (0,0);
  lcd.print ("Du kannst von");
  lcd.setCursor (0,1);
  lcd.print ("vorne beginnen!");
}
 
 
 if (Helligkeit >= 990 && Helligkeit <= 1000){ //when ball moves over sensor //normal(1020)-dunkel(1000)
  Servo2.write (90); //Servo1 moves
  Servo3.write (90);} //Servo2  moves
 

 if (HElligkeit >= 400 && HElligkeit <= 430) { //when ball moves over 2.sensor //normal(165)-dunkel(430)
  p=p+1;
  digitalWrite (LED2, HIGH);}
 
 
 if (HELligkeit >= 600 && HELligkeit <= 630) { //when ball moves over 3.sensor //normal(200)-dunkel(630)
  p=p+1;
  digitalWrite (LED3, HIGH);}
  
 if (p==3) { //End of game
 lcd.clear ();
 lcd.setCursor (0,0);
 lcd.print ("Du hast es"); 
 delay (zeit);
 lcd.setCursor (0,1);
 lcd.print ("geschafft!");
 delay (zeit);
 lcd.clear ();
 lcd.setCursor (0,0);
 lcd.print ("jetzt nimm dir");
 lcd.setCursor (0,1);
 lcd.print ("das Geld");
 delay (zeit);}
}

Bei den Linien "if (f<2 && g=l)" sowie "if (r<2 && g=l)" wird mir jeweils die Fehlermeldung "l was not declared in this scope" angezeigt. Wie könnte man das fixen?

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

1 Like

Indem man l deklariert?

Und ich denke ein Vergleich wäre zielführender als eine Zuweisung.

Sprechende Variablen Namen kosten keinen Speicher extra.

Möchtest du da wirklich eine Zuweisung ausgeführt sehen?
Würde ja eher auf einen Vergleichswunsch tippen.

das ist gut

Stellt sich heraus, das ich l mit ner 1 verwechselt habe :sweat_smile:

Du verwendest
l
aber dein Programm kennt es nicht.

Außerdem pass auf wegen

=

versus

==

1 Like

Vielen Dank. Inzwischen wird keine Fehlermeldung mehr angezeigt

Dennoch meinst du sicher ein Vergleich (==) und keine Zuweisung (=).

Nur geringe Änderungen im Variablennamen sind noch schlimmer als Helligkeit1, Helligkeit2

sehr schlechte Lehrerarbeit, kein Wunder er finded nicht den Fehler, auch dann wenn Compiler darauf mit Zeigefinger tippt.