Проблема в считывании кода радиопередатчиком 433Мгц
- Войдите на сайт для отправки комментариев
Втр, 28/07/2015 - 17:27
Скетчем
#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);
}
}
понимаю что прием написан неверно, не хватает знаний. Помогите
#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); } }Отладку какую-нибудь добавь. Например, вывод того, что считало в Serial.
К сожалению, я не знаю, как это сделать)) я не программист, но за совет - спасибо)
Объявить глобальные переменные для всех твоих данных и например раз в секунду их выплевывать в Serial.
Если я правильно понял, то RCV_INT вызывается по прерыванию от приёмника, тогда по идее можно в луп добавить delay(1000) и Serial.println для всех твоих переменных.
Первое, что на ум приходит.
Библиотеки разные. В первом случае 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); }Куда проще.
Объявить глобальные переменные для всех твоих данных и например раз в секунду их выплевывать в Serial.
Если я правильно понял, то RCV_INT вызывается по прерыванию от приёмника, тогда по идее можно в луп добавить delay(1000) и Serial.println для всех твоих переменных.
Первое, что на ум приходит.
Что за бред?
Serial.print в прерывании. YEAH BABY!
Спсасибо, все заработало!
Всем спасибо за советы - все функционирует!