Pages: [1]   Go Down
Author Topic: Wie kan mij helpen met switch case. (opgelost)  (Read 2570 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo.

Ik ben nu 3 weken bezig met een Arduino Mega en vindt het geweldig smiley maar loop nu wel tegen wat probleempjes aan smiley-sad.

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 smiley.

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:
#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);    
  }
 


« Last Edit: June 10, 2014, 04:16:20 pm by warsteiner » Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 227
Posts: 14024
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


a small code fix

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

==>

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

Rob Tillaart

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

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 227
Posts: 14024
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

deze code is verdacht
Code:
        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:

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

your turn smiley-wink
Logged

Rob Tillaart

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

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Rob,

Bedankt voor de uitleg, het kan zo simpel zijn blijkt maar weer smiley-wink.
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 smiley.
« Last Edit: June 07, 2014, 08:26:53 am by warsteiner » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Rob,

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

Marcel
« Last Edit: June 10, 2014, 04:16:48 pm by warsteiner » Logged

Pages: [1]   Go Up
Jump to: