Go Down

Topic: Wie kan mij helpen met switch case. (opgelost) (Read 2 times) previous topic - next topic

warsteiner

Jun 07, 2014, 10:10 am Last Edit: Jun 10, 2014, 11:16 pm by warsteiner Reason: 1
Hallo.

Ik ben nu 3 weken bezig met een Arduino Mega en vindt het geweldig :) 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:

Code: [Select]
#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);    
 }




robtillaart


a small code fix

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


==>

Code: [Select]
buttonState = digitalRead(MCvoordeur);
digitalWrite(led2, buttonState );  // LED follows button
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

robtillaart

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

deze code is verdacht
Code: [Select]
        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()

Code: [Select]

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


your turn ;)
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

warsteiner

#3
Jun 07, 2014, 02:08 pm Last Edit: Jun 07, 2014, 03:26 pm by warsteiner Reason: 1
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 :).

warsteiner

#4
Jun 10, 2014, 11:15 pm Last Edit: Jun 10, 2014, 11:16 pm by warsteiner Reason: 1
Rob,

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

Marcel

Go Up