Buenos dias, tengo un problema, tengo un par de luces las cual controlo con un infrarojo, y funciona excelente, ahora se me ocurrio prender un velador usando un attiny85, usando de base el codigo que ya tengo, pero de movida me da error con el serial.begin, y no le encuentro soluccion, ya se que los comandos que acepta el atinny son pocos, y la libreria que uso funciona bien con mega y con el uno.
#include <IRLib.h>
int RECV_PIN = 4;
int rele1 =0;
IRrecv My_Receiver(RECV_PIN);
IRdecode My_Decoder;
unsigned int Buffer[RAWBUF];
#define prender 16599733
#define apagar 16583413
void setup() {
Serial.begin(9600);
My_Receiver.enableIRIn();
My_Decoder.UseExtnBuf(Buffer);
pinMode(rele1, OUTPUT);
}
void loop() {
if (My_Receiver.GetResults(&My_Decoder)) {
My_Receiver.resume();
My_Decoder.decode();
//Serial.println(My_Decoder.value,DEC);
if(My_Decoder.value==prender)
{
digitalWrite(rele1,HIGH);
}
if(My_Decoder.value==apagar)
{
digitalWrite(rele1,LOW);
}
}
}
El ATtiny85 ni siquiera tiene puerto serial por hardware, por eso Serial no sirve.
Utiliza SoftwareSerial en su lugar (pero va a ocupar 2 de los 5 pines que se pueden usar como I/O).
Los ATtiny85 como no tienen puerto serial por hardware, se programan mediante SPI como esclavo.
entonces deberia armar en base a este codigo
#include <SoftwareSerial.h>
const int Rx = 2;
const int Tx = 3;
SoftwareSerial mySerial (Rx, Tx);
void setup() {
pinMode (Rx, INPUT);
pinMode (Tx, OUTPUT);
mySerial.begin (9600);
}
void loop() {
mySerial.println (Rx);
}
Sí, algo así.
Si necesitas ver la salida en el monitor serie, tendrás que utilizar un convertidor USB/TTL, o cualquier placa Arduino que integre una (Uno, Nano, Mega, etc.).
PD:
Lucario448:
Los ATtiny85 como no tienen puerto serial por hardware, se programan mediante SPI como esclavo.
Verdad que estoy en lo cierto?
Usas hardware adicional para programarlo, si no me equivoco.
si uso la mega 2560 como si fuera un chip atmega328, del uno,la mega es el nexo nada mas, para programarlo con la IDE 1.6.5 que es la que anda bien, si solo va a controlar tres reles es que mi hijo quiere lamparas a control remoto, como vio mis prueba en la mega. gracias lucario448.
Adrian_E:
si uso la mega 2560 como si fuera un chip atmega328
Ehhhh... CÓMO DICES??? :o
Adrian_E:
si solo va a controlar tres reles es que mi hijo quiere lamparas a control remoto
3 relés + 1 IR = 4 pines en uso.
Entonces para qué necesitas la comunicación serial? Era nada más para depuración?
Lucario448, lo que pasa es que yo tengo echo este codigo,
#include <IRLib.h>
int RECV_PIN = 11;
int led10=10;
int led9=9;
int led7=7;
IRrecv My_Receiver(RECV_PIN);
IRdecode My_Decoder;
unsigned int Buffer[RAWBUF];
#define prender 16599733
#define apagar 16583413
void setup()
{
Serial.begin(9600);
My_Receiver.enableIRIn();
My_Decoder.UseExtnBuf(Buffer);
pinMode(led10,OUTPUT);
pinMode(led9,OUTPUT);
pinMode(led7, OUTPUT);
}
void loop() {
if (My_Receiver.GetResults(&My_Decoder)) {
My_Receiver.resume();
My_Decoder.decode();
//My_Decoder.DumpResults();
Serial.println(My_Decoder.value,DEC);
if(My_Decoder.value==prender)
{
digitalWrite(led10,HIGH);
}
if(My_Decoder.value==apagar)
{
digitalWrite(led10,LOW);
}
if(My_Decoder.value==16582903)
{
digitalWrite(led9,HIGH);
}
if(My_Decoder.value==16607893)
{
digitalWrite(led9,LOW);
}
if(My_Decoder.value==16591573){
digitalWrite(led7,HIGH);
}
if(My_Decoder.value==16591063){
digitalWrite(led7, LOW);
}
}
}
el ide de arduino (1.6.5) me lo patea como loco, empezando por la libreria que uso.
Yo empezaría por cambiar int y unsigned int por byte.
No te emociones, recuerda que el ATtiny85 está muy limitado en memoria RAM.
Realmente es necesario que el "array" sea de unsigned int?
Todavía usas Serial; realmente ese código se está ejecutando en el ATtiny?
Todavía usas Serial; realmente ese código se está ejecutando en el ATtiny?
[/quote]
ese codigo lo cargue a un atmega 328 usando la mega 2560 como isp, luego empeze a modificarlo para subirlo al attiny85 lo cual tuve que cambiar la libreria a la IRremote y ahi se me complico, guarda que son novato nivel 9.
a ver profe lucario448, no me marca error al cargarlo en el attiny85, la conexion esta bien revisada 2 veces + uno, pero algo me falto, si la IRlib.h me costo entenderla ahora con esta estoy mariado pesar que parece lo mismo
#include <IRremote.h>
const int recibe = 0;
int relay1 = 1;
IRrecv irrecb(recibe);
decode_results resultado;
#define prender 16599733
#define apagar 16583413
void setup()
{
irrecb.enableIRIn();
pinMode(relay1, OUTPUT);
}
void loop() {
if (irrecb.decode(&resultado)) {
if (resultado.decode_type == prender) {
digitalWrite(0,HIGH);
}
if (resultado.decode_type == apagar) {
digitalWrite(0,HIGH);
}
}
}
Adrian_E:
ese codigo lo cargue a un atmega 328 usando la mega 2560 como isp, luego empeze a modificarlo para subirlo al attiny85 lo cual tuve que cambiar la libreria a la IRremote y ahi se me complico
Ya ya, el 328 era para prueba preliminar.
Estuve revisando el ejemplo que ponen aquí; y se parece bastante al tuyo.
Creo que el error es que estás buscando el dato incorrecto en la struct resultado.
Estás comparando el tipo de decodificación con un valor constante? No será acaso que lo que necesitas es el value?
De veras será necesaria la función dump y resume que ponen en el ejemplo?
PD: se puede usar un pin diferente del 1 (6 físico del ATtiny) si es para recibir?
Creo que el error es que estás buscando el dato incorrecto en la struct resultado.
Estás comparando el tipo de decodificación con un valor constante? No será acaso que lo que necesitas es el value?
sigue sin recibir, la verdad que me meti en camisa de 11 varas

#include <IRremote.h>
int recibe = 0;
int relay1 = 1;
IRrecv irrecv(recibe);
decode_results results;
#define prender 16599733
#define apagar 16583413
void setup()
{
irrecv.enableIRIn();
pinMode(recibe, INPUT);
pinMode(relay1, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
if (results.value == prender) {
digitalWrite(0,HIGH);
}
if (results.value == apagar) {
digitalWrite(0,HIGH);
}
}
}