RCSwitch на Attiny85
Я хотел бы использовать свой Attiny85 в качестве релейного переключателя с дистанционным управлением. Я уже протестировал скетч на своем Atmega328, и он сработал. Теперь я хотел записать скетч на свой Attiny85 с помощью ArduinoISP, но получаю следующую ошибку в ArduinoIDE:
sketch_dec25a.ino: In function ‘void setup()’:
sketch_dec25a:13: error: ‘class RCSwitch’ has no member named ‘enableReceive’
sketch_dec25a.ino: In function ‘void loop()’:
sketch_dec25a:20: error: ‘class RCSwitch’ has no member named ‘available’
sketch_dec25a:21: error: ‘class RCSwitch’ has no member named ‘getReceivedValue’
sketch_dec25a:22: error: ‘class RCSwitch’ has no member named ‘getReceivedValue’
sketch_dec25a:25: error: ‘class RCSwitch’ has no member named ‘resetAvailable’
Это мой код:
#include <SoftwareSerial.h>
#include <RCSwitch.h>
int RELAY_PIN = 2;
RCSwitch mySwitch = RCSwitch();
SoftwareSerial mySerial(1, 3); // прием, передача
void setup()
{
pinMode(RELAY_PIN, OUTPUT);
mySwitch.enableReceive(0); // Получатель при ошибке 0 => это контакт №2
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() // запускаем снова и снова
{
if (mySwitch.available()) {
Serial.println(mySwitch.getReceivedValue());
if(mySwitch.getReceivedValue() == 1234567){
digitalWrite(RELAY_PIN, HIGH);
}
mySwitch.resetAvailable();
}
}
Я использую следующие ядра: https://code.google.com/p/arduino-tiny/
Я использую SoftwareSerial только для отладки. Извините за мой плохой английский и спасибо за вашу помощь!
@xDarcade, 👍2
2 ответа
Лучший ответ:
Проблема, с которой вы столкнулись, заключается в том, что RCSwitch не поддерживает режим приема для ATtiny.
Вот что вы можете найти в RCSwitch.h
:
// По крайней мере, для ATTiny X4/X5 прием должен быть отключен из-за
// отсутствуют зависимости libm (udivmodhi4)
#if defined( __AVR_ATtinyX5__ ) or defined ( __AVR_ATtinyX4__ )
#define RCSwitchDisableReceiving
#endif
Тогда все методы, связанные с приемом, не определены в классе RCSwitch
для микроконтроллеров ATtiny:
#if not defined( RCSwitchDisableReceiving )
void enableReceive(int interrupt);
void enableReceive();
void disableReceive();
bool available();
void resetAvailable();
unsigned long getReceivedValue();
unsigned int getReceivedBitlength();
unsigned int getReceivedDelay();
unsigned int getReceivedProtocol();
unsigned int* getReceivedRawdata();
#endif
Я действительно не уверен, есть ли способ обойти это, я не смотрел код в RCSwitch.cpp
.
Возможно, вам лучше всего будет найти другую библиотеку RC.
Например, если вы можете использовать Infra-Red RC, то существуют библиотеки, которые могут работать с ATtiny:
https://github.com/shirriff/Arduino-IRremote
Я протестировал Digispark ATtiny85, и https://github.com/sui77/rc-switch работает отлично
просто прокомментируйте #define RCSwitchDisableReceive
чем использовать в коде настройки enableReceive(0);
и внешний контакт 7 PB2(int0) в качестве источника RF
Или вы можете использовать другое программное прерывание контакта
в настройках:
PCMSK |= (1<<PCINT0);//здесь номер контакта
GIMSK |= (1<<PCIE);
функция прерывания
ISR(PCINT0_vect) {
rd.handleInterrupt(); // вам также нужно поместить handleInterrupt() в общедоступную секцию в RCSwitch.h
Да, как дополнение работает отлично! Я перемещаю handleInterrupt() do public в RCSwitch.h, комментирую #define RCSwitchDisableReception и добавляю функцию прерывания, например akaJes. Спасибо! :-), @user3680370
- Радиочастотное дистанционное управление с использованием VirtualWire на ATtiny85, работающем на частоте 8 МГц на внутреннем генераторе
- При использовании Arduino Uno в качестве ISP: "Yikes! Invalid device signature" - плохое соединение, неверную конфигурацию или неверную версию avrdude?
- Связь ATtiny85 с компьютером через USB
- Получить доступ к EEPROM ATtiny с помощью кода Arduino?
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- I2C с ATtiny85 на частоте 8 МГц с использованием библиотеки TinyWireM
- Эмуляция 1-проводных устройств
- Как перевести ATtiny/ATmega в режим глубокого сна (чтобы годами работать от батарей), но при этом обнаруживать нажатие кнопки?
Arduino-IRremote также несовместим с ATTiny., @Omer
Судя по этой проблеме https://github.com/shirriff/Arduino-IRremote/issues/97, похоже, для ATtiny есть несколько вариантов., @jfpoilpret