Estoy creando un sensor inalámbrico con un Attiny85. Quiero enviar los datos a un Arduino Uno, así que compré el kit de enlace rf 315mhz de spark fun. Como el Attiny85 no tiene TX, decidí usar la biblioteca de Manchester, sin embargo, no se compilará en el Attiny85.
Seguí los pasos de este blog: http://mchr3k-arduino.blogspot.mx/2012/01/wireless-sensor-node-part-2.html?showComment=1338749638806#c853067277980266192
Aquí está el código que estoy usando:
#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 ++;
}
Aquí está el mensaje de error:
/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
Respuestas:
a attiny le falta una opción requerida para permitir que la biblioteca Manchester funcione correctamente en los dispositivos ATtinyX5, específicamente la definición de
__AVR_ATtinyX5__
cuándo se selecciona un dispositivo. De hecho, le faltan algunas cosas.El paquete que uso para el soporte ATtinyX5 es arduino-tiny . He verificado que define ese símbolo correctamente. Le recomiendo que descargue su paquete de soporte actual e instale arduino-tiny en su lugar.
fuente
Habiendo luchado con esto yo mismo, puedo confirmar que la solución de Joel funciona.
Hay muchas publicaciones que sugieren que no puedes hacer que el Manchester funcione con Arduino1.0x y necesitas 0020. Pero puedes.
La clave es usar el arduino-tiny del enlace de arriba, poner la pequeña carpeta que obtienes desde allí en / hardware y luego renombrarla como attiny y "prospectosboards" a tableros.
Me doy cuenta de que esto no dice más de lo que Joel ya ha dicho, pero hay tanta información contradictoria y contradictoria que pensé que valdría la pena agregar en mi experiencia.
fuente
Tengo el mismo problema al usar esta lib con un Trinket de 8 MHz, pero logró resolverlo agregando
#define __AVR_ATtinyX5__
al archivo hardware / attiny / variantes / tiny8 / pins_arduino.h. Estoy usando el paquete de soporte Adafruit para ATtiny. Tal vez sea un poco hack, pero aún puedo construir para UNO, seleccionando el tablero en Arduino IDE 1.0.5.fuente