Проблема в считывании кода радиопередатчиком 433Мгц

romiras
Offline
Зарегистрирован: 12.07.2015

Скетчем 

#include <RemoteReceiver.h>
// Connect the receiver to digital pin 2.-пин 2.это вход для Радиоприёмника
void setup() {
  Serial.begin(9600);
  RemoteReceiver::init(0, 3, showCode);
}
void loop() {
}
void showCode(unsigned long receivedCode, unsigned int period) {
  Serial.print("Code: ");
  Serial.print(receivedCode);
  Serial.print(", period duration: ");
  Serial.print(period);
  Serial.println("us.");
}

был считан код кнопки: Code: 531387, period duration: 504us.  При попытке считать сигнал - никакой реакции( 

#include <NewRemoteReceiver.h>

void setup() {
  NewRemoteReceiver::init(0, 2, RCV_INT);
  pinMode(13, OUTPUT);
}

void loop() {
}

// Callback function is called only when a valid code is received.
void RCV_INT(NewRemoteCode receivedCode) {
  if (receivedCode.address == 531387 && !receivedCode.groupBit && receivedCode.unit == 531387) {
    if (receivedCode.switchType == 0) digitalWrite(9, LOW);
    if (receivedCode.switchType == 1) digitalWrite(9, HIGH);
  }
}
понимаю что прием написан неверно, не хватает знаний. Помогите
romiras
Offline
Зарегистрирован: 12.07.2015
#include <NewRemoteReceiver.h>

void setup() {
  NewRemoteReceiver::init(0, 2, RCV_INT);
  pinMode(9, OUTPUT);
}

void loop() {
}

// Callback function is called only when a valid code is received.
void RCV_INT(NewRemoteCode receivedCode) {
  if (receivedCode.address == 531387 && !receivedCode.groupBit && receivedCode.unit == 531387) {
    if (receivedCode.switchType == 0) digitalWrite(9, LOW);
    if (receivedCode.switchType == 1) digitalWrite(9, HIGH);
  }
}

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Отладку какую-нибудь добавь. Например, вывод того, что считало в Serial.

romiras
Offline
Зарегистрирован: 12.07.2015

К сожалению, я не знаю, как это сделать)) я не программист, но за совет - спасибо)

Radjah
Offline
Зарегистрирован: 06.08.2014

Объявить глобальные переменные для всех твоих данных и например раз в секунду их выплевывать в Serial.

Если я правильно понял, то RCV_INT вызывается по прерыванию от приёмника, тогда по идее можно в луп добавить delay(1000) и Serial.println для всех твоих переменных.

Первое, что на ум приходит.

X-Dron
Offline
Зарегистрирован: 24.01.2015

Библиотеки разные. В первом случае RemoteReceiver.h, во втором NewRemoteReceiver.h. Были случаи, что разные библиотеки выдают один и тот же сигнал с разным кодом сигнала. Второй скетч еще пытается выделить из этого кода адрес устройства, и еще какую-то хрень основанную неизвестно на каком протоколе.
Возьмите за основу первый и развивайте его

#include <RemoteReceiver.h>
// Connect the receiver to digital pin 2.-пин 2.это вход для Радиоприёмника
void setup() {
  Serial.begin(9600);
  RemoteReceiver::init(0, 3, showCode);
}
void loop() {
}
void showCode(unsigned long receivedCode, unsigned int period) {
	Serial.print("Code: ");     //для отладки 
	Serial.print(receivedCode); //для отладки
    if (receivedCode == 531387) digitalWrite(9, LOW);
	if (receivedCode == 531388) digitalWrite(9, HIGH);
}

Куда проще. 
 

X-Dron
Offline
Зарегистрирован: 24.01.2015

Radjah пишет:

Объявить глобальные переменные для всех твоих данных и например раз в секунду их выплевывать в Serial.

Если я правильно понял, то RCV_INT вызывается по прерыванию от приёмника, тогда по идее можно в луп добавить delay(1000) и Serial.println для всех твоих переменных.

Первое, что на ум приходит.

Что за бред?

Radjah
Offline
Зарегистрирован: 06.08.2014

Serial.print в прерывании. YEAH BABY!

romiras
Offline
Зарегистрирован: 12.07.2015

Спсасибо, все заработало!

romiras
Offline
Зарегистрирован: 12.07.2015

Всем спасибо за советы - все функционирует!