software probleem

Arduino specifieke Software
Berichten: 1
Geregistreerd: 25 Jan 2016, 20:04

software probleem

Berichtdoor stefbeef » 25 Jan 2016, 20:12

Hallo,

Ik ben een beveiligingssysteem aan het maken maar ik heb een probleem, ik kan het systeem gewoon activeren en als het systeem aanstaat dan slaat hij alarm als hij beweging ziet alleen als ik hem wil deactiveren werkt hij de eerste pogingen niet en daarna wel een keer, als ik hem daarna weer wil activeren werkt het allemaal niet meer dus ik kan het systeem dan niet meer activeren. Ik weet niet goed wat het probleem is. Dit is de code die ik heb gebruikt:
cpp code
#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>

#include <RTClib.h>

#include <Servo.h>

#include <Keypad.h>

#include <Password.h>

#include <Wire.h>


Servo myservo;
int pos = 90; // Servo
int passwd_pos = 15;

//Pincode
Password password = Password( "7196" );

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] = {
8, 7, 6, 9 }; //Keypad
byte colPins[COLS] = {
5, 4, 3, 2}; //keypad

// Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

// I2C Lcd
LiquidCrystal_I2C lcd(0x27, 30, 31, POSITIVE);

int greenLED = 12;
int redLED = 11;
int pirPin1 = 10;
int alarmled = 13;

int alarmStatus = 0;
int zone = 0;
int alarmActive = 0;

void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
//Adding time
Wire.begin();

myservo.attach(48); // Servo

displayCodeEntryScreen();


pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);

pinMode(pirPin1, INPUT);

digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);

keypad.addEventListener(keypadEvent);
myservo.write(pos);
}

void loop(){

keypad.getKey();
if (alarmActive == 1){
if (digitalRead (pirPin1) == HIGH)
{
zone = 0;
alarmTriggered();
}

}
}

void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
if (passwd_pos - 15 >= 5) {
return ;
}
lcd.setCursor((passwd_pos++),0);
switch (eKey){
case '#':
passwd_pos = 15;
checkPassword();
break;
case '*':
password.reset();
passwd_pos = 15;

break;
default:
password.append(eKey);
lcd.print("*");
}
}
}

void alarmTriggered(){
int expected_pos;
int incr;
digitalWrite(alarmled, HIGH);
lcd.setCursor(0,0);
lcd.print("BEWEGING! PIN:");

//
password.reset();
alarmStatus = 1;
// alarmActive = 0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("BEWEGING! PIN:");
checkPassword;
displayCodeEntryScreen();
lcd.setCursor(0,1);
if (zone == 3)
{
expected_pos = 90;
delay(10000);
lcd.print("................");
delay(1000);
}

if (expected_pos > pos) {
incr = 1;
} else {
incr = -1;
}

for (pos = pos; pos != expected_pos; pos += incr) {
myservo.write(pos);
delay(5);
}

/*
for(pos = 0; pos < angle; pos += 1)
{
myservo.write(pos);
delay(20);
}
for(pos = angle; pos>=1; pos-=1)
{
myservo.write(pos);
delay(20);
}
*/

}


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

void invalidCode() { // Verkeerde code
password.reset();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VERKEERDE CODE!");
lcd.setCursor(0,1);
lcd.print("OPNIEUW!");
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
delay(10000);
digitalWrite(redLED, LOW);
delay(1000);
displayCodeEntryScreen();
}

void activate() { // Activatie
{
digitalWrite(2, HIGH);
lcd.setCursor(0,0);
lcd.print("SYSTEEM ACTIEF!");
lcd.setCursor(0,1);
lcd.print("VERLAAT KAMER!");
password.reset();
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
delay(22000);
alarmActive = 1;
lcd.setCursor(0,0);
lcd.print("SYSTEEM ACTIEF!");
lcd.setCursor(0,1);
lcd.print("PINCODE:");
}
}

void deactivate() // Deactivatie
{
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
digitalWrite(alarmled, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("GEDEACTIVEERD");
alarmActive = 0;
password.reset();
delay(5000);


displayCodeEntryScreen();
}

void displayCodeEntryScreen()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PINCODE:");
lcd.setCursor(0,1);
lcd.print("BEVEILIGING!");
}

Ik hoop dat iemand het probleem ziet!

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: software probleem

Berichtdoor nicoverduin » 25 Jan 2016, 21:41

Als je (minder goed gedocumenteerde code) lees, begrijp ik dat als eenmaal het alarm afgaat er situaties zijn dat het alarm 10 sec bezig is (regel 145). Daarnaast doe je iets op regel 139. CheckPassword zonder haakjes.....?
In dezelfde routine: Als zone != 3 dan wordt expectPos niet gezet....
zo ff een paar dingen
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: software probleem

Berichtdoor shooter » 25 Jan 2016, 23:17

alleen als alarm aanstaat en er is iemand dan wordt het alarm aangezet, anders gebeurt er helemaal niks.
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: evteciji, izehifej en 87 gasten