Problemas de compilación ATTiny85 y rcswitch

Hola amigos, acabo de migrar mis placas y proyectos de arduino UNO a ATTiny85 por el tamaño del micro y porque solo uso 2 salidas, uno para activar un relay y otro para activar un led, en UNO me funciona super bien con la libreria RCSWITCH pero cuando lo paso al ATTiny85 me sale error, sospecho que es por los pines pero no se mucho, soy super novato y he tratado de buscar informacion pero no he encontrado una solucion, si alguien ha podido realizar un receptor rf con attiny85, basicamente solo necesito que con un control RF de esos de 4 botones poder leer el codigo de cada boton y dependiendo si es uno u otro activar el rele y el led o apagar, les dejo el codigo que uso en el arduino uno (o si alguno conoce otra libreria para el attiny85 para hacer eso que me la comparta.

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
int led = 4;
int candado = 0;
int releuno = 7;
int reledos = 8;
int reletres = 6;
long masteron = 89454869;
long masteroff = 89454885;
long slaveon = 118427669;
long slaveoff = 118427685;
long masterdes =89454917;
long masteract =89454981;

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
   pinMode(led, OUTPUT); 
    pinMode(releuno, OUTPUT);
     pinMode(reledos, OUTPUT);
      pinMode(reletres, OUTPUT);
}

void loop() {
  
  if (mySwitch.available()) {
    
    long value = mySwitch.getReceivedValue();
    

    
    if ((value == masteron)||(value == slaveon)) {
      candado = 1;
     digitalWrite(releuno, HIGH);
     digitalWrite(reledos, HIGH);
     digitalWrite(reletres, HIGH);
     delay(300);
                                          //digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
                                    //  delay(200);               // espera un segundo
                                    //  digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
                                    //  delay(200);               // espera por un segundo
                                   // Serial.print(candado);
                                 //   digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
                                   // delay(200);               // espera un segundo
                                 ////   digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
                                 //   delay(200);               // espera por un segundo
                             //   digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
 // delay(200);               // espera un segundo
 // digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
 // delay(200);               // espera por un segundo

      
    } if ((value == masteroff)||(value == slaveoff)){
      candado =0;
      digitalWrite(releuno, LOW);
     digitalWrite(reledos, LOW);
     digitalWrite(reletres, LOW);
      Serial.print("Received ");
      Serial.print(value);
      Serial.print(" / ");
 
    }
if (value == masterdes){
  slaveon=010;
        candado =0;
      digitalWrite(releuno, LOW);
     digitalWrite(reledos, LOW);
     digitalWrite(reletres, LOW);
      Serial.print("Received ");
      Serial.print(value);
      Serial.print(" / ");
  
            }
if (value == masteract){
   slaveon = 118427669;       
                        }

}
    mySwitch.resetAvailable();
    if (candado == 1){
                                                digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
                                      delay(50);               // espera un segundo
                                      digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
                                      delay(3000);               // espera por un segundo
                    
                 }
              
  }

PD: en el codigo se supone que activo 3 relevadores pero en realidad en la placa en la salida de un relevador lo mando a un 2n2222 para activar 3 relevadores solo que no modifique la programacion, pero en realidad solo uso la salida del releuno, ya despues depuro la programacion.

Moderador:
Por favor, lee las Normas del foro
Edita tu título, usa uno que no tenga justamente lo que se considera un título inútil.
Ver el punto 5 de las normas sobre como poner títulos y que palabras se considera inútiles como "Ayuda con..."

Has mirado bien el tema de como se identifican los pines? Me parece recordar que no es así.
Es tal cual. mira el tutorial

Tienes 8 pines ninguno se llama mas alla de 4 asi que esto no va

int led = 4;
int releuno = 7;
int reledos = 8;
int reletres = 6;

Definelos asi

1 Like

Pero cual es el error? De compilación? No sube el código? O simplemente no funciona?

Leiste mi respuesta @migueratto?
Si le respondo que no puede haber pines con números mayores a 4, cual puede ser el error?

int releuno = 7;
int reledos = 8;
int reletres = 6;
1 Like

:thinking:
.

Una disculpa por no subir el error, ya compuse el codigo para que no hay pines mayores a 4 y me sigue saliendo el error a la hora de compilar, les añado la imagen del error que me da, es algo relacionado con la libreria rcswitch.

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
int led = 4;
int candado = 0;
int releuno = 3;
long masteron = 89454869;
long masteroff = 89454885;
long slaveon = 118427669;
long slaveoff = 118427685;
long masterdes =89454917;
long masteract =89454981;

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
   pinMode(led, OUTPUT); 
    pinMode(releuno, OUTPUT);

}

void loop() {
  
  if (mySwitch.available()) {
    
    long value = mySwitch.getReceivedValue();
    

    
    if ((value == masteron)||(value == slaveon)) {
      candado = 1;
     digitalWrite(releuno, HIGH);
     delay(300);
                                          //digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
                                    //  delay(200);               // espera un segundo
                                    //  digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
                                    //  delay(200);               // espera por un segundo
                                   // Serial.print(candado);
                                 //   digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
                                   // delay(200);               // espera un segundo
                                 ////   digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
                                 //   delay(200);               // espera por un segundo
                             //   digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
 // delay(200);               // espera un segundo
 // digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
 // delay(200);               // espera por un segundo

      
    } if ((value == masteroff)||(value == slaveoff)){
      candado =0;
      digitalWrite(releuno, LOW);
      Serial.print("Received ");
      Serial.print(value);
      Serial.print(" / ");
 
    }
if (value == masterdes){
  slaveon=010;
        candado =0;
      digitalWrite(releuno, LOW);
      Serial.print("Received ");
      Serial.print(value);
      Serial.print(" / ");
  
            }
if (value == masteract){
   slaveon = 118427669;       
                        }

}
    mySwitch.resetAvailable();
    if (candado == 1){
                                                digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
                                      delay(50);               // espera un segundo
                                      digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
                                      delay(3000);               // espera por un segundo
                    
                 }
              
  }

Me sale este error

exit status 1
'class RCSwitch' has no member named 'enableReceive'

PD: segun lo que he podido investigar es porque la libreria desactiva la recepción cuando es attiny porque no tiene entrada serial o algo así, alguno conoce alguna libreria para poder usar el attiny para recibir un comando por RF y poder prender y apagar un relé? o de plano tengo que cambiar de micro?

Hacé la prueba comentando la línea

#define RCSwitchDisableReceiving

en el archivo RCSwitch.h

Más info:

1 Like

si te fijas en la libreria RCSWITCH.h
Hay una condición para usar la instancia que estas llamando

    #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

y como dice MaximoEsfuerzo la libreria también te notifica que desabiltes la instancia receiving con ATTiny X4/X5, no se si el attiny85 entra dentro de este grupo

`// 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
`

Si entra, se refiere a las familias ATtiny24/44/84 y ATtiny25/45/85. :wink:

Como dice en link, como por defecto la recepción está deshabilitada para los tiny, dependiendo de cuál core se esté utilizando, comentar esa línea es la solución (ya que se habilita la recepción).

Moderador:
@zoker perdón por ser pesado pero no pongas capturas, coloca el error como si fuera código.
Lo dicen las normas.
Tomate un instante para leerlas.

1 Like

Gracias amigo, lo subi al ATTiny85 así como me dijiste, comentando la linea:

//#if defined( __AVR_ATtinyX5__ ) or defined ( __AVR_ATtinyX4__ )
//#define RCSwitchDisableReceiving
//#endif

No pude probarlo por monitor serie pero medí con multimetro la salida del pin3 y pin4 y si hacen la función correcta cuando activo el botón "ON" y "OFF" del control master, saludos

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.