Wie kan mij helpen met switch case. (opgelost)

Hallo.

Ik ben nu 3 weken bezig met een Arduino Mega en vindt het geweldig :slight_smile: maar loop nu wel tegen wat probleempjes aan :(.

Wat ik wil gaan maken is een alarmsysteem met contacten naar een Mobotix camera toe die dan gaat bellen.
De Mobotix camera kan al naar iemand toe bellen door middel van een input te maken.

Wat ik al heb is een LCD 4x20 en een matrix keypad, deze doen het goed :).

Wat ik al geprogrammeerd heb:
Als je de pincode in toest dat hij dan naar functie: Alarm_Uitschakelen gaat.
Als je een foute pincode in toest dat hij dan naar functie: pincode_Fout gaat

Maar wat ik nu niet voor elkaar krijg is, als de pincode goed is dat hij dan door midel van led status: (Led1 LOW) naar functie: Alarm_Uitschakelen moet gaan.
En als Led1 HIGH is dan moet hij naar functie: pincode_Alarm_Inschakelen gaan.
Ik dacht dat ik hier voor het beste een Switch Case kon voor gaan gebruiken maar ik doe iets niet goed.

Wie wil mij hier mee helpen.

Hier onder zie je mijn Code:

#include <LiquidCrystal.h>
#include <Keypad.h>


// Keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'},
};
 byte rowPins[ROWS] = {40, 39, 38, 37};  // verbinding maken met de rij pin-outs van het toetsenbord
 byte colPins[COLS] = {36, 35, 34, 33};  // verbinding maken met de kolom pinouts van het toetsenbord
 
 Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

// Display
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
// In en uitgangen 
 const int MCvoordeur = 46;                       // pen nummer waar MCachterdeur op zit
 const int MCachterdeur = 48;                     // pen nummer waar MCachterdeur op zit
 const int led1 =  50;                            // pen nummer waar led1 op zit
 const int led2 =  52;                            // pen nummer waar led2 op zit          
 int buttonState = LOW;                           // variabele drukknop toestand
 int led_state = HIGH;
 
 
//pincode maken
 char* ourCode = "1234";
 int currentPosition = 0;


void setup() {
  
  lcd.begin(20, 4);
  pinMode(led1, OUTPUT);                         // Initialiseren van de LED pin als een uitgang  
  pinMode(led2, OUTPUT);                         // Initialiseren van de LED pin als een uitgang  
  pinMode(MCvoordeur, INPUT);                    // Initialiseren van de LED pin als een ingang      
  pinMode(MCachterdeur, INPUT);                  // Initialiseren van de LED pin als een ingan
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  

}

void loop() 
{
  // Laat logo zien (Welkom bij Slagerij Klinkhamer)
  lcd.setCursor(5,0);                                 // Zet de cursor naar kolom 4, lijn 0
  lcd.print("Welkom bij");                            // Pint de texst "Welkom bij"
  lcd.setCursor(0,1);                                 // Zet de cursor naar kolom 2, lijn 2
  lcd.print("    De Slagerij    ");                   // Pint de texst "DVT Beveiliging"
  lcd.setCursor(2,3);                                 // Zet de cursor naar kolom 2, lijn 2
  lcd.print("Toets pincode in");                      // Pint de texst "Toest pincode in"
{ 
  int l;
  
  char key = keypad.getKey();

 if (int(key) != 0) { 
  lcd.setCursor(14,2);
  lcd.print("   ");
  lcd.setCursor(14,2);
  
for (l=0; l <=currentPosition; ++l)
{ 
 lcd.print("*");
}
  
if (key == ourCode[currentPosition])
  {
     ++currentPosition;
  if (currentPosition == 4)                        // Pincode is goed
    {
      currentPosition = 0;
     int range = map(led1, LOW, HIGH, 0, 1); 
      switch (range) {
      case 0:
        Alarm_Inschakelen();
        break;
      case 1:
        Alarm_Uitschakelen();
        break;
      }
    }
   } 
     else
     {                                             // Pincode is fout                  
      currentPosition = 0; 
      pincode_Fout();
     }
 
   }
 }
 
 buttonState = digitalRead(MCvoordeur);
    if (buttonState == HIGH) {        
    digitalWrite(led2, HIGH);  
    } 
  else {
    // turn LED off:
    digitalWrite(led2, LOW); 
    }
}


void Alarm_Inschakelen()
{      
      // ClearScreen
      lcd.setCursor(0,0);
      lcd.print("                    ");
      lcd.setCursor(0,1);
      lcd.print("                    ");
      lcd.setCursor(0,2);
      lcd.print("                    ");
      lcd.setCursor(0,3);
      lcd.print("                    ");
      lcd.setCursor(0,0);
  
      // Laat logo zien (pincode juist Alarm is uit)
      lcd.setCursor(0,0);
      lcd.print("********************");
      lcd.setCursor(0,1);
      lcd.print("*  PINCODE JUIST   *");
      lcd.setCursor(0,2);
      lcd.print("*   Alarm is aan   *");
      lcd.setCursor(0,3);
      lcd.print("********************");
      digitalWrite(led1, HIGH);
      delay(5000);
      digitalWrite(led1, LOW);
}



void Alarm_Uitschakelen()
   {      
      // ClearScreen
      lcd.setCursor(0,0);
      lcd.print("                    ");
      lcd.setCursor(0,1);
      lcd.print("                    ");
      lcd.setCursor(0,2);
      lcd.print("                    ");
      lcd.setCursor(0,3);
      lcd.print("                    ");
      lcd.setCursor(0,0);
  
      // Laat logo zien (pincode juist Alarm is uit)
      lcd.setCursor(0,0);
      lcd.print("********************");
      lcd.setCursor(0,1);
      lcd.print("*  PINCODE JUIST   *");
      lcd.setCursor(0,2);
      lcd.print("*   Alarm is uit   *");
      lcd.setCursor(0,3);
      lcd.print("********************");
      digitalWrite(led1, HIGH);
      delay(5000);
      digitalWrite(led1, LOW);
    }


void pincode_Fout()     
   { 
      // ClearScreen
      lcd.setCursor(0,0);
      lcd.print("                    ");
      lcd.setCursor(0,1);
      lcd.print("                    ");
      lcd.setCursor(0,2);
      lcd.print("                    ");
      lcd.setCursor(0,3);
      lcd.print("                    ");
      lcd.setCursor(0,0);
  
      // Zet logo er in (pincode onjuist)
      lcd.print("********************");
      lcd.setCursor(0,1);
      lcd.print("* PINCODE ONJUIST  *");
      lcd.setCursor(0,2);
      lcd.print("*     OPNIEUW      *");
      lcd.setCursor(0,3);
      lcd.print("********************"); 
      digitalWrite(led2, HIGH); 
      delay(5000);
      digitalWrite(led2, LOW); 
 
      // ClearScreen
      lcd.setCursor(0,0);
      lcd.print("                    ");
      lcd.setCursor(0,1);
      lcd.print("                    ");
      lcd.setCursor(0,2);
      lcd.print("                    ");
      lcd.setCursor(0,3);
      lcd.print("                    ");
      lcd.setCursor(0,0);     
  }

a small code fix

 buttonState = digitalRead(MCvoordeur);
    if (buttonState == HIGH) {        
    digitalWrite(led2, HIGH);  
    } 
  else {
    // turn LED off:
    digitalWrite(led2, LOW); 
    }

==>

 buttonState = digitalRead(MCvoordeur);
digitalWrite(led2, buttonState );  // LED follows button

Verder gebruik aub CTRL-T om automatisch indentation goed te zetten, maakt code leesbaarder

deze code is verdacht

        int range = map(led1, LOW, HIGH, 0, 1); 
        switch (range) 
        {
        case 0:
          Alarm_Inschakelen();
          break;
        case 1:
          Alarm_Uitschakelen();
          break;
        }

==> maak een simple IF then else en je mist een digitalRead()

if (digitalRead(led1) == LOW)  // meestal lees je niet van een led ?   probeer goede namen te gebruiken.
{
  Alarm_Inschakelen();
}
else
{
  Alarm_Uitschakelen();
}

your turn :wink:

Rob,

Bedankt voor de uitleg, het kan zo simpel zijn blijkt maar weer ;).
Ik zat een beetje vast hier in, en moest even weer een andere kijk hier op krijgen.

CTRL-T om automatisch indentation goed te zetten is een goede tip van je, ik zou hem gaan gebruiken in vervolg.

Ga er morgen avond weer mee aan de gang, laat het wel even weten of het gelukt is :).

Rob,

Bedankt voor de uitleg.
De code is inderdaad beter te lezen als je ctrl-t gebruikt.

Marcel