Auto Alarm

Arduino specifieke Software
Berichten: 10
Geregistreerd: 10 Aug 2016, 17:23

Re: Auto Alarm

Berichtdoor jeroenmert » 17 Aug 2016, 21:29

Raar maar waar heel het alarm programma werkt.
Vind de interrupt zeer onduidelijk want ik weet niet hoe de interrupt met een input is gekoppeld.
Na dan toch maar letterlijk het programma over te nemen van http://gammon.com.au/interrupts werkt het. Maar wou het duidelijker maken maar dat werkt niet.
Nu nog de spanningsmeting er in plaatsen, hopelijk lukt dit zonder al te veel problemen.
Dus nu het volledige programma dat werkt, (maar wel moet opgekuist worden, een beetje onduidelijk):

// inputs
int Tilt = 6;
int Moving = 3;
int DoorCon = 4;
int lock = 5;
const byte unlock = 2;
int mute = 7;

// outputs
int pinker = 8;
int horn = 9;
int doorlock = 10;

// interne variabel
int alarm = 0;
int locked = 0;

int TiltSensor = 0;
int MovingSensor = 0;
int DoorContact = 0;
int LockButton = 0;
int UnlockButton = 0;
int MuteButton = 0;

void switchPressed ()
{
if (digitalRead(unlock) == HIGH) // unlockbutton pressed
{
locked = 0;
}
}
void setup() {
pinMode( Tilt, INPUT);
pinMode( Moving, INPUT);
pinMode( DoorCon, INPUT);
pinMode( lock, INPUT);

pinMode( mute, INPUT);
pinMode( pinker, OUTPUT);
pinMode( horn, OUTPUT);
pinMode( doorlock, OUTPUT);

// pinMode( unlock, INPUT);
digitalWrite (unlock, HIGH); // internal pull-up resistor
attachInterrupt (0, switchPressed, CHANGE); // attach interrupt handler
}

void loop() {

TiltSensor = digitalRead(Tilt);
MovingSensor = digitalRead(Moving);
DoorContact = digitalRead(DoorCon);
LockButton = digitalRead(lock);
// UnlockButton =
MuteButton = digitalRead(mute);


//if (UnlockButton == HIGH) // Excuted in switchpressed
//{
// locked = 0;
//}
if (LockButton == HIGH)
{
locked = 1;
}


if (locked == HIGH && !alarm )
{
digitalWrite( doorlock, HIGH);
delay(1000); // 1s
if (TiltSensor == HIGH || MovingSensor == HIGH || DoorContact == HIGH)
{
alarm = 1;
}
}
if (locked == LOW)
{
digitalWrite( doorlock, LOW);
alarm = 0;
}


if (alarm == HIGH)
{
digitalWrite( pinker, HIGH);
digitalWrite( horn, HIGH);
delay(1000);
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
delay(1000);
}
else
{
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
}
}

Advertisement

Berichten: 10
Geregistreerd: 10 Aug 2016, 17:23

Re: Auto Alarm

Berichtdoor jeroenmert » 17 Aug 2016, 21:51

Koepel schreef:De variabele 'alarm' gebruik je als integer met 0 en 1, maar ook als boolean met !alarm en ook als de waarde van een ingang met HIGH en LOW. Kun je een van de drie mogelijkheden kiezen ?

Een boolean is 'true' of 'false'. Dan kun je code schrijven op deze manier:
Code: Alles selecteren
  boolean maan, zon;

  maan = true;
  zon = false;

  if( zon && !maan)
    Serial.println( "Het is dag");
  else if( !zon && maan)
    Serial.println( "Het is nacht");
  else if( !zon && !maan)
    Serial.println( "Het is nieuwe maan of zonsverduistering");
  else
    Serial.println( "Weet je zeker dat je op de planeet aarde bent?");


Een LM2596 is heel goed. Ik meen dat een apparaat voor in een auto een korte puls van 120V moet kunnen hebben.

Om millis() te gebruiken, is het nodig om de hele sketch om te bouwen.
Hier staat een mini test met millis() : http://www.arduinoforum.nl/viewtopic.php?f=8&t=1948&start=20#p14200

Dus: of je sketch ombouwen naar millis(), of een interrupt gebruikt, of een vreemde manier is de 'weak' aanroep die binnen millis() zit gebruiken.
Daarom lijkt me een interrupt beste. Kun je de attachInterrupt uitproberen ?


Raar maar waar heel het alarm programma werkt.
Vind de interrupt zeer onduidelijk want ik weet niet hoe de interrupt met een input is gekoppeld.
Na dan toch maar letterlijk het programma over te nemen van http://gammon.com.au/interrupts werkt het. Maar wou het duidelijker maken maar dat werkt niet.
Nu nog de spanningsmeting er in plaatsen, hopelijk lukt dit zonder al te veel problemen.
Dus nu het volledige programma dat werkt, (maar wel moet opgekuist worden, een beetje onduidelijk):

// inputs
int Tilt = 6;
int Moving = 3;
int DoorCon = 4;
int lock = 5;
const byte unlock = 2;
int mute = 7;

// outputs
int pinker = 8;
int horn = 9;
int doorlock = 10;

// interne variabel
int alarm = 0;
int locked = 0;

int TiltSensor = 0;
int MovingSensor = 0;
int DoorContact = 0;
int LockButton = 0;
int UnlockButton = 0;
int MuteButton = 0;

void switchPressed ()
{
if (digitalRead(unlock) == HIGH) // unlockbutton pressed
{
locked = 0;
}
}
void setup() {
pinMode( Tilt, INPUT);
pinMode( Moving, INPUT);
pinMode( DoorCon, INPUT);
pinMode( lock, INPUT);

pinMode( mute, INPUT);
pinMode( pinker, OUTPUT);
pinMode( horn, OUTPUT);
pinMode( doorlock, OUTPUT);

// pinMode( unlock, INPUT);
digitalWrite (unlock, HIGH); // internal pull-up resistor
attachInterrupt (0, switchPressed, CHANGE); // attach interrupt handler
}

void loop() {

TiltSensor = digitalRead(Tilt);
MovingSensor = digitalRead(Moving);
DoorContact = digitalRead(DoorCon);
LockButton = digitalRead(lock);
// UnlockButton =
MuteButton = digitalRead(mute);


//if (UnlockButton == HIGH) // Excuted in switchpressed
//{
// locked = 0;
//}
if (LockButton == HIGH)
{
locked = 1;
}


if (locked == HIGH && !alarm )
{
digitalWrite( doorlock, HIGH);
delay(1000); // 1s
if (TiltSensor == HIGH || MovingSensor == HIGH || DoorContact == HIGH)
{
alarm = 1;
}
}
if (locked == LOW)
{
digitalWrite( doorlock, LOW);
alarm = 0;
}


if (alarm == HIGH)
{
digitalWrite( pinker, HIGH);
digitalWrite( horn, HIGH);
delay(1000);
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
delay(1000);
}
else
{
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
}
}

Berichten: 10
Geregistreerd: 10 Aug 2016, 17:23

Re: Auto Alarm

Berichtdoor jeroenmert » 17 Aug 2016, 21:51

Raar maar waar heel het alarm programma werkt.
Vind de interrupt zeer onduidelijk want ik weet niet hoe de interrupt met een input is gekoppeld.
Na dan toch maar letterlijk het programma over te nemen van http://gammon.com.au/interrupts werkt het. Maar wou het duidelijker maken maar dat werkt niet.
Nu nog de spanningsmeting er in plaatsen, hopelijk lukt dit zonder al te veel problemen.
Dus nu het volledige programma dat werkt, (maar wel moet opgekuist worden, een beetje onduidelijk):
cpp code
// inputs
int Tilt = 6;
int Moving = 3;
int DoorCon = 4;
int lock = 5;
const byte unlock = 2;
int mute = 7;

// outputs
int pinker = 8;
int horn = 9;
int doorlock = 10;

// interne variabel
int alarm = 0;
int locked = 0;

int TiltSensor = 0;
int MovingSensor = 0;
int DoorContact = 0;
int LockButton = 0;
int UnlockButton = 0;
int MuteButton = 0;

void switchPressed ()
{
if (digitalRead(unlock) == HIGH) // unlockbutton pressed
{
locked = 0;
}
}
void setup() {
pinMode( Tilt, INPUT);
pinMode( Moving, INPUT);
pinMode( DoorCon, INPUT);
pinMode( lock, INPUT);

pinMode( mute, INPUT);
pinMode( pinker, OUTPUT);
pinMode( horn, OUTPUT);
pinMode( doorlock, OUTPUT);

// pinMode( unlock, INPUT);
digitalWrite (unlock, HIGH); // internal pull-up resistor
attachInterrupt (0, switchPressed, CHANGE); // attach interrupt handler
}

void loop() {

TiltSensor = digitalRead(Tilt);
MovingSensor = digitalRead(Moving);
DoorContact = digitalRead(DoorCon);
LockButton = digitalRead(lock);
// UnlockButton =
MuteButton = digitalRead(mute);


//if (UnlockButton == HIGH) // Excuted in switchpressed
//{
// locked = 0;
//}
if (LockButton == HIGH)
{
locked = 1;
}


if (locked == HIGH && !alarm )
{
digitalWrite( doorlock, HIGH);
delay(1000); // 1s
if (TiltSensor == HIGH || MovingSensor == HIGH || DoorContact == HIGH)
{
alarm = 1;
}
}
if (locked == LOW)
{
digitalWrite( doorlock, LOW);
alarm = 0;
}


if (alarm == HIGH)
{
digitalWrite( pinker, HIGH);
digitalWrite( horn, HIGH);
delay(1000);
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
delay(1000);
}
else
{
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
}
}

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

Re: Auto Alarm

Berichtdoor shooter » 18 Aug 2016, 09:48

het lijkt te werken, maar er staat een delay in dus hij kijkt maar elke seconde en dat is niet goed. die scan moet zo snel mogelijk in de loop, dus nog een beetje spelen.
maar wel goed dat je het voor elkaar hebt, en ja interupt is lastig, maar als je het door hebt, dan zul je merken dat heel veel met dit soort codes werkt, zoals een muisingang op een PC.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 10 Aug 2016, 17:23

Re: Auto Alarm

Berichtdoor jeroenmert » 18 Aug 2016, 22:52

Koepel schreef:De variabele 'alarm' gebruik je als integer met 0 en 1, maar ook als boolean met !alarm en ook als de waarde van een ingang met HIGH en LOW. Kun je een van de drie mogelijkheden kiezen ?

Een boolean is 'true' of 'false'. Dan kun je code schrijven op deze manier:
Code: Alles selecteren
  boolean maan, zon;

  maan = true;
  zon = false;

  if( zon && !maan)
    Serial.println( "Het is dag");
  else if( !zon && maan)
    Serial.println( "Het is nacht");
  else if( !zon && !maan)
    Serial.println( "Het is nieuwe maan of zonsverduistering");
  else
    Serial.println( "Weet je zeker dat je op de planeet aarde bent?");


Een LM2596 is heel goed. Ik meen dat een apparaat voor in een auto een korte puls van 120V moet kunnen hebben.

Om millis() te gebruiken, is het nodig om de hele sketch om te bouwen.
Hier staat een mini test met millis() : http://www.arduinoforum.nl/viewtopic.php?f=8&t=1948&start=20#p14200

Dus: of je sketch ombouwen naar millis(), of een interrupt gebruikt, of een vreemde manier is de 'weak' aanroep die binnen millis() zit gebruiken.
Daarom lijkt me een interrupt beste. Kun je de attachInterrupt uitproberen ?


Het programma werkt nu compleet maar nog steeds het programma niet opgekuist :o
Heb nu ook een programma geschreven voor een ledje dat brand als de batterij te plat is.
// Voltage program
int sensorValue = analogRead(A0);
float voltage = (sensorValue /4.092) /10;
Serial.println(voltage);
if ( voltage < 12.24 ) // Battery to low
{
digitalWrite( 11, HIGH); // Warning LED
}
else
{
digitalWrite( 11, LOW);
}

Berichten: 10
Geregistreerd: 10 Aug 2016, 17:23

Re: Auto Alarm

Berichtdoor jeroenmert » 18 Aug 2016, 22:58

shooter schreef:het lijkt te werken, maar er staat een delay in dus hij kijkt maar elke seconde en dat is niet goed. die scan moet zo snel mogelijk in de loop, dus nog een beetje spelen.
maar wel goed dat je het voor elkaar hebt, en ja interupt is lastig, maar als je het door hebt, dan zul je merken dat heel veel met dit soort codes werkt, zoals een muisingang op een PC.

Ow zie net dat er twee paginas zijn in mijn bericht, daarom zag ik nooit mijn reacties.
Maar nu maken de delays niet meer uit want als ik op unlock druk gaat het programma direct naar de nieuwe loop switchpressed. En als het alarm niet hoog is, is er geen delay dus de lock drukknop ziet het programma altijd.

Nu het complete programma:
// inputs
int Tilt = 6;
int Moving = 3;
int DoorCon = 4;
int lock = 5;
const byte unlock = 2;
int mute = 7;

// outputs
int pinker = 8;
int horn = 9;
int doorlock = 10;

// interne variabel
int alarm = 0;
int locked = 0;

int TiltSensor = 0;
int MovingSensor = 0;
int DoorContact = 0;
int LockButton = 0;
int UnlockButton = 0;
int MuteButton = 0;

void switchPressed ()
{ // interrupt program
if (digitalRead(unlock) == HIGH) // unlockbutton pressed
{
locked = 0;
}
}
void setup() {
pinMode( Tilt, INPUT);
pinMode( Moving, INPUT);
pinMode( DoorCon, INPUT);
pinMode( lock, INPUT);

pinMode( mute, INPUT);
pinMode( pinker, OUTPUT);
pinMode( horn, OUTPUT);
pinMode( doorlock, OUTPUT);
pinMode( 11, OUTPUT);

// pinMode( unlock, INPUT);
digitalWrite (unlock, HIGH); // internal pull-up resistor
attachInterrupt (0, switchPressed, CHANGE); // attach interrupt handler
Serial.begin(9600); //delete after test
}

void loop() {

TiltSensor = digitalRead(Tilt);
MovingSensor = digitalRead(Moving);
DoorContact = digitalRead(DoorCon);
LockButton = digitalRead(lock);
// UnlockButton =
MuteButton = digitalRead(mute);


//if (UnlockButton == HIGH) // Excuted in switchpressed
//{
// locked = 0;
//}
if (LockButton == HIGH)
{
locked = 1;
}


if (locked == HIGH && !alarm )
{
digitalWrite( doorlock, HIGH);
delay(1000); // 1s
if (TiltSensor == HIGH || MovingSensor == HIGH || DoorContact == HIGH)
{
alarm = 1;
}
}
if (locked == LOW)
{
digitalWrite( doorlock, LOW);
alarm = 0;
}


if (alarm == HIGH)
{
digitalWrite( pinker, HIGH);
digitalWrite( horn, HIGH);
delay(1000);
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
delay(1000);
}
else
{
digitalWrite( pinker, LOW);
digitalWrite( horn, LOW);
}
// Voltage program
int sensorValue = analogRead(A0);
float voltage = (sensorValue /4.092) /10;
Serial.println(voltage);
if ( voltage < 12.24 ) // Battery to low
{
digitalWrite( 11, HIGH); // Warning LED
}
else
{
digitalWrite( 11, LOW);
}
}

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

Re: Auto Alarm

Berichtdoor shooter » 19 Aug 2016, 11:26

hoe kom je aan 4.092 (maak daar een variabele van en gebruik dan 1024 en dan vermenigvuldigen met de ratio van de weerstanden.
paul deelen
shooter@home.nl

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 72 gasten