Jedna se jiny typ prenosu?
Nebo je vysilaci cas prilis kratky a prijimac "nestihne" zareagovat ?
Kód: Vybrat vše
#include <VirtualWire.h>
#include <interval.h> // knihovna pro periodicke deje
#define SENSOR 8 // definice pinu na kterem je senzor
#define TRANSM 12 // definice pinu vysilace
#define LEDINT 13 // definice pinu s interni LED
#define BAUDRATE 4000 // nastaveni rychlosti prenosu vysilace
#define SENSORPERIOD 100 // perioda cteni sensoru PIR je 100ms=0.1s
#define WAITPERIOD 10000 // doba cekani na odeslani druheho hlaseni je 10000ms=10s
bool controller = false; // priznak akce z PIR detektoru
const char *hlaseni = "Je tam!"; // zde je mozne nastavit odesilany retezec
Interval ReadSensor; // instance pro opakovane cteni sensoru
Interval WaitForResend; // instance pro zpozdeni opakovaneho vysilani
void setup() {
pinMode(SENSOR, INPUT); // nastaveni vystupu
pinMode(LEDINT, OUTPUT);
pinMode(TRANSM, OUTPUT);
vw_set_ptt_inverted(true);
vw_set_tx_pin(TRANSM);
vw_setup(BAUDRATE);
}
void loop() {
// pokud vyprsel cas a necekas na druhe odeslani, tak precti sensor
if (ReadSensor.expired() && !controller) {
ReadSensor.set(SENSORPERIOD); // obnov nastaveni periody cteni sensoru
if (digitalRead(SENSOR) == HIGH) {// Pokud je akce PIR
digitalWrite(LEDINT, HIGH); // rozsvit interni LED
controller = true ; // nastav priznak
vw_send((uint8_t *)hlaseni, strlen(hlaseni));
vw_wait_tx();
WaitForResend.set(WAITPERIOD);// nastav pro jednou periodu opakovaneho vysilani
}
}
// Pokud vyprsel cas do druheho odeslani a je to treba
if (WaitForResend.expired() && controller == true ) {
controller = false ; // zrus priznak akce PIR
vw_send((uint8_t *)hlaseni, strlen(hlaseni));
vw_wait_tx();
digitalWrite(LEDINT, LOW);// zhasni LED
}
}
Kód: Vybrat vše
#include <VirtualWire.h>
void setup()
{
vw_set_ptt_inverted(true);vw_set_rx_pin(12);
vw_setup(4000);vw_rx_start();unsigned int data = 0;
pinMode(13, OUTPUT);
}
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)){
if(buf[0]=='1'){
digitalWrite(13,1);
} else {
if(buf[0]=='0'){
digitalWrite(13,0);
}
}
}
}