Serial порт и прерывания (RCSwitch lib)

RAZRus
Offline
Зарегистрирован: 16.06.2014

Всем привет! Помогите пожалуйста

Ардуина управляет светом через 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();
  }
}

 

RAZRus
Offline
Зарегистрирован: 16.06.2014

Вроде пошаманил с кодом и перекинул приемник на 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;
    }
  }
}