• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino + nrf24l01 - alarm samochodowy.
#3
(05-01-2017, 17:38)Smaczek napisał(a): Witam.
Można to zrobić co najmniej na dwa sposoby.
Jeśli potrzebujesz działania wielowatkowego to najlepiej posłużyć się biblioteką timers.h która jest nawet tu na forum dobrze opisana.
Pozdrawiam.

Dzięki za podpowiedź. Bibliotekę znalazłem i po dniu prób i błędów doszedłem do w miarę zadowalającego projektu.

Nadajnik:
Kod:
#include <Timers.h>
#include "nRF24L01.h"
#include "RF24.h"
Timers <2> akcja;
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int SW1 = 4;
int SW2 = 2;
int switchPin = 6;
int LED = 5;
boolean currentButton = LOW;
boolean lastButton = LOW;
boolean stan = false;

void dioda()
{
if (digitalRead(SW1) == HIGH)
{
msg[0] = 111;
radio.write(msg, 1);
}
if (digitalRead(SW2) == HIGH)
{
msg[0] = 112;
radio.write(msg, 1);
}
digitalWrite(LED, LOW);    
}

void dioda2()
{
if (digitalRead(SW1) == HIGH)
{
msg[0] = 111;
radio.write(msg, 1);
}
if (digitalRead(SW2) == HIGH)
{
msg[0] = 112;
radio.write(msg, 1);
}
digitalWrite(LED, HIGH);    
}

boolean debounce(boolean last)
{
  boolean current = digitalRead(switchPin);
  if (current != lastButton)
  {
     delay(5);
     current = digitalRead(switchPin);
  }
  return current;
}

void setup()
{
pinMode(LED, OUTPUT);
pinMode(switchPin, INPUT);
radio.begin();
radio.openWritingPipe(pipe);
akcja.attach(0,1,dioda);
akcja.attach(1,1000,dioda2);
}

void loop()
{
    currentButton = debounce(lastButton);

  if (currentButton == HIGH)
 { stan = !stan;
  delay(5);
 }
  if (stan == true)
  {
   akcja.process();
  }
}

Odbiornik:
Kod:
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int LED1 = 3;
int LED2 = 5;
int BUZZ1 = 6;

void setup()
{

radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(BUZZ1, OUTPUT);
}

void loop()
{
if (radio.available())
{
  bool done = false;    
  while (!done){
    radio.read(msg, 1);      
    if (msg[0] == 111)
{

digitalWrite(LED1, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(200);
digitalWrite(LED1, LOW);
digitalWrite(BUZZ1, LOW);
delay(200);
digitalWrite(LED1, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(50);
digitalWrite(LED1, LOW);
digitalWrite(BUZZ1, LOW);
delay(50);
digitalWrite(LED1, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(50);
digitalWrite(LED1, LOW);
digitalWrite(BUZZ1, LOW);
delay(50);
digitalWrite(LED1, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(50);
digitalWrite(LED1, LOW);
digitalWrite(BUZZ1, LOW);
delay(50);
}
if (msg[0] == 112)
{

digitalWrite(LED2, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(200);
digitalWrite(LED2, LOW);
digitalWrite(BUZZ1, LOW);
delay(200);
digitalWrite(LED2, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(50);
digitalWrite(LED2, LOW);
digitalWrite(BUZZ1, LOW);
delay(50);
digitalWrite(LED2, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(50);
digitalWrite(LED2, LOW);
digitalWrite(BUZZ1, LOW);
delay(50);
digitalWrite(LED2, HIGH);
digitalWrite(BUZZ1, HIGH);
delay(50);
digitalWrite(LED2, LOW);
digitalWrite(BUZZ1, LOW);
delay(50);
}
    else {digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(BUZZ1, LOW);
}
}}

}

Jeszcze muszę zrobić na bibliotece Timers odbiornik i będzie gites.

Aktualnie projekt wygląda tak:
NADAJNIK - 3 przyciski. 1przycisk wyłącza i włącza miganie diodą. 2 kolejne to alarmy dla np otwarcia drzwi w samochodzie ( lewe i prawe ).
Odbiornik rozpoznaje które drzwi są otworzone i zapala odpowiednią diodę +buzzer.

Mam tylko problem jak dopracować obsługę przycisku włączania i wyłączania diody bo czasem łapie a czasem nie. Kod znaleziony gdzieś w sieci ale działa. Ale nie zawsze załapie.
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Arduino + nrf24l01 - alarm samochodowy. - przez inazuma-akai - 06-01-2017, 17:22

Skocz do:


Przeglądający: 1 gości