Я создаю беспроводной датчик с помощью Attiny85. Я хочу отправить данные в arduino uno, поэтому я купил радиочастотный комплект 315 МГц у компании «Искра веселья». Поскольку у Attiny85 нет TX, я решил использовать библиотеку Manchester, однако она не будет компилироваться на Attiny85.
Я следовал инструкциям из этого блога: http://mchr3k-arduino.blogspot.mx/2012/01/wireless-sensor-node-part-2.html?showComment=1338749638806#c853067277980266192
Вот код, который я использую:
#include <WProgram.h> //otherwise it says it can't find Arduino.h
#include <Manchester.h> //include the library to comunicate
#define TxPin 2 //the pin that is used to send data
int sensorPin = 4;
int ledPin = 3;
int count = 50;
void setup(){
pinMode (ledPin, OUTPUT);
man.workAround1MhzTinyCore(); //add this in order for transmitter to work with 1Mhz Attiny85/84
man.setupTransmit(TxPin, MAN_1200); //set transimt pin
}
void loop(){
if (count == 50){
digitalWrite (ledPin, HIGH);
count = 0;
}
int data = analogRead(sensorPin);
man.transmit(data); //transmits and reads the data
delay (100);
count ++;
}
Вот сообщение об ошибке:
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp: In function 'void MANRX_SetupReceive(uint8_t)':
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:366: error: 'TCCR2A' was not declared in this scope
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:366: error: 'WGM21' was not declared in this scope
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:368: error: 'TCCR2B' was not declared in this scope
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:368: error: 'CS21' was not declared in this scope
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:369: error: 'OCR2A' was not declared in this scope
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:379: error: 'TIMSK2' was not declared in this scope
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:379: error: 'OCIE2A' was not declared in this scope
/Users/joelsimonoff/Documents/Arduino/libraries/MANCHESTER/Manchester.cpp:380: error: 'TCNT2' was not declared in this scope
Ответы:
В attiny отсутствует опция, необходимая для правильной работы библиотеки Манчестера на устройствах ATtinyX5, в частности, определение того,
__AVR_ATtinyX5__
когда выбрано устройство. На самом деле, пропущено немало вещей.Пакет, который я использую для поддержки ATtinyX5, является Arduino- Tiny . Я убедился, что он правильно определяет этот символ. Я рекомендую вам сбросить ваш текущий пакет поддержки и установить вместо него arduino-tiny.
источник
Пройдя через это, я могу подтвердить, что решение Джоэла работает.
Вокруг довольно много сообщений, в которых говорится, что вы не можете заставить Манчестер работать с Arduino1.0x, а вам нужен 0020. Но вы можете.
Ключ заключается в том, чтобы использовать arduino-tiny из приведенной выше ссылки, поместить крошечную папку, которую вы получили оттуда, в / hardware, а затем переименовать ее в attiny и «будущие платы» в платы.
Я понимаю, что это не говорит о многом больше, чем Джоэл уже имеет, но вокруг так много противоречивой и противоречивой информации, что я подумал, что стоит добавить в мой опыт
источник
Получил ту же проблему, используя эту
#define __AVR_ATtinyX5__
библиотеку с Брелком 8 МГц, но сумел решить ее, добавив в файл hardware / attiny / варианты / tiny8 / pins_arduino.h. Я использую пакет поддержки Adafruit для ATtiny. Возможно, немного хак, но я все еще могу собрать для UNO, выбрав плату в Arduino IDE 1.0.5.источник