Serial порт и прерывания (RCSwitch lib)
- Войдите на сайт для отправки комментариев
Ср, 16/09/2015 - 00:32
Всем привет! Помогите пожалуйста
Ардуина управляет светом через 433mhz передатчик, ей управляет web-сервер через usb.
Возможно ли одновременное использование serial порта и приемника 433мгц с библиотекой RCSwitch, которая использует "external interrupts", как я понял.
Мне нужно по нажатию радио-кнопки "mySwitch.getReceivedValue() == 345429" выполнялась функция alloff()
У меня функция alloff() через раз срабатывает, а то и вообще не работает...
В чем может быть проблема?(
В остальном все четко
#include <RCSwitch.h>
#include <livolo.h>
byte inByte;
RCSwitch mySwitch = RCSwitch();
Livolo livolo(5);
void setup()
{
Serial.begin(9600);
mySwitch.enableTransmit(5);
mySwitch.setPulseLength(216);
}
void alloff() {
mySwitch.switchOff('a', 2, 3);
delay (550);
for (int t = 0; t < 2 ; t++) {
livolo.sendButton(1, 106);
delay (550);
}
}
void loop() {
if (Serial.available() > 0) {
inByte = Serial.read();
switch (inByte) {
case 'q':
livolo.sendButton(1, 0);
break;
case 'w':
livolo.sendButton(1, 96);
break;
case 'e':
livolo.sendButton(1, 24);
break;
case 'r':
livolo.sendButton(1, 120);
break;
case 't':
livolo.sendButton(1, 80);
break;
case 'y':
livolo.sendButton(1, 48);
break;
case 'u':
livolo.sendButton(1, 108);
break;
case 'i':
livolo.sendButton(1, 12);
break;
case 'z':
livolo.sendButton(25383, 16);
break;
case 'd':
livolo.sendButton(25383, 56);
break;
case 'b':
mySwitch.switchOn('a', 2, 3);
break;
case 'c':
mySwitch.switchOff('a', 2, 3);
break;
case 'n':
alloff();
break;
case 'a':
mySwitch.sendTriState("FFFFF0FFFFFF");
break;
}
}
if (mySwitch.available()) {
if ( mySwitch.getReceivedValue() == 345429 || mySwitch.getReceivedValue() == 5308757 ) {
alloff();
}
mySwitch.resetAvailable();
}
}
Вроде пошаманил с кодом и перекинул приемник на 3-ий пин(прерывание №1)
Все четенько теперь работает, понятия не имею что сыграло роль...
#include <RCSwitch.h> #include <livolo.h> byte inByte; RCSwitch mySwitch = RCSwitch(); Livolo livolo(5); void setup() { Serial.begin(9600); mySwitch.enableTransmit(5); mySwitch.setPulseLength(216); mySwitch.enableReceive(1); //pin3 } void alloff() { mySwitch.switchOff('a', 2, 3); delay (550); for (int t = 0; t < 2 ; t++) { livolo.sendButton(1, 106); delay (550); } } void loop() { if (mySwitch.available()) { unsigned long receivedCode = mySwitch.getReceivedValue(); if (receivedCode == 0) { // на всякий } else { if (receivedCode == 345429) alloff(); else if (receivedCode == 5308757) alloff(); } mySwitch.resetAvailable(); // сброс данных. } if (Serial.available() > 0) { inByte = Serial.read(); switch (inByte) { case 'q': livolo.sendButton(1, 0); break; case 'w': livolo.sendButton(1, 96); break; case 'e': livolo.sendButton(1, 24); break; case 'r': livolo.sendButton(1, 120); break; case 't': livolo.sendButton(1, 80); break; case 'y': livolo.sendButton(1, 48); break; case 'u': livolo.sendButton(1, 108); break; case 'i': livolo.sendButton(1, 12); break; case 'z': livolo.sendButton(25383, 16); break; case 'd': livolo.sendButton(25383, 56); break; case 'b': mySwitch.switchOn('a', 2, 3); break; case 'c': mySwitch.switchOff('a', 2, 3); break; case 'n': alloff(); break; case 'a': mySwitch.sendTriState("FFFFF0FFFFFF"); break; } } }