Wie kan mij helpen met probleem bluetooth en keypad ?

Arduino specifieke Software
Berichten: 63
Geregistreerd: 09 Jun 2017, 01:59
Woonplaats: Fiji

Wie kan mij helpen met probleem bluetooth en keypad ?

Berichtdoor Dino » 19 Apr 2018, 11:13

mijn probleem is dat ik dit programma wil kunnen starten met drukken op keypad A maar ook via bluetooth dit wil kunnen .

heb al wat dingen geprobeerd maar werkt niet .
al vast dank.


Code: Alles selecteren
#include <Keypad_I2C.h>
#include <Password.h>
#include <LiquidCrystal_I2C.h>
int passwd_pos = 7;
Password password = Password("1958");
char BluetoothData = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
int adress = 0x38;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {0, 1, 2, 3};
byte colPins[COLS] = {4, 5, 6, 7};
Keypad_I2C keypad = Keypad_I2C( makeKeymap(keys), rowPins, colPins, ROWS, COLS, adress );

const int kamerPin = 2;
const int keukenPin = 3;
const int slaapkamerPin = 4;
const int gangPin = 5;
const int TrPin = 6;
const int RelayPin = 11;
const int bleuPin = 8;
const int redPin = 9;
const int greenPin = 10;
const int ledError = 50;
const int timeDelay = 10000;
int alarmStatus = 0;
int alarmActive = 0;

void setup() {
  lcd.begin();
  lcd.backlight();
  keypad.begin();
  pinMode(RelayPin, OUTPUT);
  pinMode(kamerPin, INPUT);
  pinMode(keukenPin, INPUT);
  pinMode(slaapkamerPin, INPUT);
  pinMode(gangPin, INPUT);
  pinMode(TrPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  pinMode(bleuPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  keypad.addEventListener(keypadEvent);
  digitalWrite(greenPin, HIGH);
  digitalWrite(RelayPin, HIGH);


  displayCodeBlock();

}

void loop() {
  keypad.getKey();
  if (alarmActive == 1) {
    int val1 = digitalRead(kamerPin);
    int val2 = digitalRead(slaapkamerPin);
    int val3 = digitalRead(gangPin);
    int val4 = digitalRead(keukenPin);
    if (val1 == HIGH || val2 == HIGH || val3 == HIGH || val4 == HIGH) {
      alarmTriggered();

    }
  }
}

void keypadEvent(KeypadEvent eKey) {
  switch (keypad.getState()) {
    case PRESSED:
      if (passwd_pos - 15 >= 5) {
        return ;
      }
      lcd.setCursor((passwd_pos++), 0);
      switch (eKey) {
        case'A':
          activate();
          break;
        case'C':
          deactivate();
          break;
        case '#':
          passwd_pos  = 7;
          checkPassword();
          delay (1000);
          break;
        case '*':
          password.reset();
          passwd_pos = 7;
          break;
        default:
          password.append(eKey);
          lcd.print("*");
         
          if (Serial.available())
            BluetoothData = Serial.read();           
          if ( BluetoothData == 'A' )
          { activate();
          }
          if (BluetoothData == 'a')
          {
            deactivate();
          }
      }
  }
}

void alarmTriggered() {
  password.reset();
  alarmStatus = 0;
  digitalWrite(redPin, HIGH);
  digitalWrite(bleuPin, HIGH);
  digitalWrite(RelayPin, HIGH);
  digitalWrite(TrPin, HIGH);
  lcd.clear();
  displayCodeUnBlock();
  StrokeLight(); {
  }
}

void StrokeLight() {
  for (int i = 0; i <= 10; i++) {
    if (i % 2) {
      digitalWrite(redPin, HIGH);
    }
    else {
      digitalWrite(redPin, LOW);
    }
    delay(ledError);
  }
  for (int i = 0; i <= 10; i++) {
    if (i % 2) {
      digitalWrite(bleuPin, HIGH);
    }
    else {
      digitalWrite(bleuPin, LOW);
    }
    delay(ledError);
  }
  digitalWrite(redPin, HIGH);

  delay(100);

}

void checkPassword() {
  if (password.evaluate()) {
    if (alarmActive == 0 && alarmStatus == 0) {
      activate();
    }
    else if ( alarmActive == 1 || alarmStatus == 1) {
      deactivate();
    }
  }
  else {
    invalidCode();
  }
}

void invalidCode() {
  digitalWrite(bleuPin, LOW);
  password.reset();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Toegang geweigerd");
  ledInvalid();
}

void ledInvalid() {
  for (int i = 0; i <= 10; i++) {
    if (i % 2) {
      digitalWrite(redPin, HIGH);
    }
    else {
      digitalWrite(redPin, LOW);
    }
    delay(ledError);
  }
  if (alarmActive == 0 && alarmStatus == 0) {
    digitalWrite(RelayPin, HIGH);
    digitalWrite(bleuPin, HIGH);
    digitalWrite(redPin, LOW);
    delay(200);
    displayCodeBlock();
  }
  else if ( alarmActive == 1 || alarmStatus == 1) {
    digitalWrite(RelayPin, HIGH);
    digitalWrite(redPin, HIGH);
    digitalWrite(bleuPin, LOW);
    delay(200);
  }
}

void activate() {
  alarmActive = 1;
  password.reset();
  digitalWrite(bleuPin, LOW);
  digitalWrite(redPin, HIGH);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Systeem actief");
  delay(timeDelay);
}

void deactivate() {
  alarmStatus = 0;
  alarmActive = 0;
  password.reset();
  digitalWrite(RelayPin, LOW);
  digitalWrite(bleuPin, LOW);
  digitalWrite(redPin, LOW);
  digitalWrite(TrPin, LOW);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Gedeactiveerd");
  delay(1000);
  displayCodeBlock();
}

void displayCodeUnBlock() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Code:");
  lcd.setCursor(0, 1);
  lcd.print("Deactiveren");
  deactivate();
}

void displayCodeBlock() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("A om te ");
  lcd.setCursor(0, 1);
  lcd.print("Activeren");
}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wie kan mij helpen met probleem bluetooth en keypad ?

Berichtdoor Koepel » 19 Apr 2018, 11:36

Werkt het display ?
Dan kun je de binnenkomende Bluetooth tekens op het scherm zetten om te kijken of de Bluetooth werkt. Het beste kun je daarvoor een aparte test-sketch maken.

Zit de Bluetooth aan de "Serial" ? Op welk Arduino board is dat ?

Normaal gesproken worden in de loop() alle belangrijke dingen gedaan. Bijvoorbeeld kijken of iemand een knop indrukt, en kijken of er iets binnenkomt via Bluetooth.

Code: Alles selecteren
void loop()
{
  kijk of iemand op het keypad drukt

  kijk of er iets via bluetooth binnen komt

  doe iets
}


Je hebt het inlezen van Bluetooth verstopt ergens in een functie in een dubbele switch-case-statement. Het zijn geen paaseieren. Mijn voorkeur zou zijn om altijd de Bluetooth tekens in te lezen in de loop() en dan met code alle gegevens verwerken.

Berichten: 63
Geregistreerd: 09 Jun 2017, 01:59
Woonplaats: Fiji

Re: Wie kan mij helpen met probleem bluetooth en keypad ?

Berichtdoor Dino » 19 Apr 2018, 15:50

de manier die ik gebruik met bluetooth werkt, perfect.
alleen in dit progje nog niet .
het moet zo zijn dat als ik buiten sta het alarm af kan zetten met bluetooth.
Het schema dat je nu ziet is een porbeersel om dit zo te krijgen en heb al veel dingen geprobeerd.

Berichten: 63
Geregistreerd: 09 Jun 2017, 01:59
Woonplaats: Fiji

Re: Wie kan mij helpen met probleem bluetooth en keypad ?

Berichtdoor Dino » 24 Apr 2018, 09:42

AHA dus toch moeilijker dan ik dacht.

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Wie kan mij helpen met probleem bluetooth en keypad ?

Berichtdoor Gij Kieken » 24 Apr 2018, 11:46

Volgens mij moet het stukje voor het afvragen van de blue-tooth verhuizen naar de loop.
Om je systeem in en uit te schakelen is dit misschien wel leuk maar normaliter moet je voorzien
in een inloop en uitloop tijd voor de exit zone met eventueel een volgzone.
Je kunt dan pas inschakelen als alle andere zones in rust zijn en heb je de tijd om de perimeter te verlaten.
In sommige gevallen wordt zelfs een zone tijdelijk overbrugt om dan al of niet automatisch in te schakelen.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: RussellAlets en 21 gasten