RCSwitch on Attiny85


1

Я хотел бы использовать мой 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); // RX, TX 

void setup() 
{ 
    pinMode(RELAY_PIN, OUTPUT); 
    mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 
    mySerial.begin(9600); 
    mySerial.println("Hello, world?"); 
} 

void loop() // run over and over 
{ 
    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 только для отладки. Извините за мой плохой английский и спасибо за вашу помощь!

3

Проблема, с которой вы сталкиваетесь, заключается в том, что RCSwitch, похоже, не поддерживает режим приема для ATtiny.

Это то, что вы можете найти в RCSwitch.h:

// At least for the ATTiny X4/X5, receiving has to be disabled due to 
// missing libm depencies (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.

Например, если вы можете использовать инфра-красный RC, то есть библиотеки там, которые могли бы работать на Attiny:

https://github.com/shirriff/Arduino-IRremote

  0

Arduino-IRremote не совместим с Attiny, а также. 25 дек. 142014-12-25 08:36:49

  0

Согласно этой проблеме https://github.com/shirriff/Arduino-IRremote/issues/97, похоже, есть некоторые варианты для ATtiny. 25 дек. 142014-12-25 09:13:18


1

я испытал с Digispark ATtiny85 и https://github.com/sui77/rc-switch работы совершенной

просто комментарий #define RCSwitchDisableReceiving , чем использование в коде установки enableReceive(0); и внешний контактный 7 PB2 (INT0) в качестве источника ВЧ

Или йо и можно использовать другое программное обеспечение булавку прерывания

в установке: PCMSK |= (1<<PCINT0);//here pin number GIMSK |= (1<<PCIE);

функция прерывания ISR(PCINT0_vect) { rd.handleInterrupt(); // you need also put handleInterrupt() in public section in RCSwitch.h }

  0

Да, как дополнение akaJes работает отлично! Я перемещаю handleInterrupt() публично в RCSwitch.h, комментарий #define RCSwitchDisableReceiving и добавление функции прерывания, например akaJes. Благодаря! :-) 13 май. 172017-05-13 07:48:27