Librairie RCSwitch ne fonctionne pas

Bonjour à tous,

J'ai actuellement un problème de fonctionnement de mon système RF433 via un Attiny 85.
Le code ci-dessous fonctionne parfaitement via un "Nano". Or le même code (avec adaptation des pins) sur mon Attiny 85 ne fonctionne pas. Je ne comprends pas d'où cela peut venir.
Pour faire simple je ne reçois aucune donnée RF433 (la LED n'est jamais allumée).

Si quelqu'un a une idée, je le remercie d'avance de me la partager.

#include <Arduino.h>
#include <RCSwitch.h>
#include <Tempo.h>

// DECLARATION DES PINS
const int PIN_LED_RECEPTION = 7; // Nano Pin D7 || Attiny Pin 0
const int PIN_LED_FORAGE = 4;
const int PIN_LED_ALARME = 8; // Nano Pin D8 || Attiny Pin 1
const int PIN_BUZZER = 3;


// DECLARATION DES OBJETS
RCSwitch mySwitch = RCSwitch();
Tempo MyTempo_RF433_Disponible;

void ReceptionDonneeRF433();

void setup() {
  
  // Déclaration des Pins
  pinMode(PIN_LED_FORAGE, OUTPUT);
  pinMode(PIN_LED_ALARME, OUTPUT);
  pinMode(PIN_LED_RECEPTION, OUTPUT);
  pinMode(PIN_BUZZER, OUTPUT);

  // Initialise les Temporisations
  MyTempo_RF433_Disponible.Start(2, MyTempo_RF433_Disponible.Seconde);
  Serial.begin(9600);

  // On initialise les sortie à zéro
  digitalWrite(PIN_LED_RECEPTION, LOW);
  digitalWrite(PIN_LED_FORAGE,LOW);
  digitalWrite(PIN_LED_ALARME,LOW);
  digitalWrite(PIN_BUZZER,LOW);
  
  // Active la Reception sur "INT0"
  mySwitch.enableReceive(0);
}


void loop() {
  
  ReceptionDonneeRF433();

}


void ReceptionDonneeRF433() {

  if (mySwitch.available())
  {
    digitalWrite(PIN_LED_RECEPTION, HIGH);
    Serial.print("Disponible :  ");
    Serial.println(mySwitch.getReceivedBitlength());
    mySwitch.resetAvailable();
    MyTempo_RF433_Disponible.Stop();
    MyTempo_RF433_Disponible.Start();
    delay(500);
  }
  else
  {
    if ( MyTempo_RF433_Disponible.IsEnd() )
    {
      digitalWrite(PIN_LED_RECEPTION, LOW);
      Serial.print("Rien :  ");
      Serial.println(mySwitch.getReceivedBitlength());
      delay(250);
    }    
  }
    
}

il n'y a pas de port série sur le Attiny 85

comment compilez vous cela ?

D'autre part, il me semble que la bibliothèque RCSwitch n’est pas compatible nativement avec l’ATtiny85 (pas d'interruptions externes matérielles (INT0 , INT1 ) et les mêmes timers du microcontrôleur) . Utilisez vous une version adaptée ?

Via Arduino ISP et j'utilise platformio. (Le Serial est utilisé avec le Nano pour les test en plus de la Led)
Le pire c'est qu'initialement le code fonctionnait sous Attiny lors des test avant fabrication du PCB. Mais depuis que j'ai reçu et soudé les composants sur le PCB rien ne fonctionne.
J'ai testé en filiaire et rien ne fonctionne également. Mais avec le nano sa fonctionne

ça ne dit pas si vous avez des bibliothéques spécifiques et vérifiez pour RCSwitch, je vois dans le code

Quel core ? ATTinyCore de SpenceKonde ?

Oui j'ai commenté cette ligne car sinon je n'arrive même pas à compiler.
J'utilise RCSwitch et Tempo en librairie c'est tout.

Pour le transfert sur l'attiny j'utilise la config "Plaformio" suivante :

[env:attiny85]
platform = atmelavr
board = attiny85
framework = arduino
board_build.mcu = attiny85
board_build.f_cpu = 8000000L
lib_deps = 
	sui77/rc-switch@^2.6.4
	boby15000/Tempo@^1.4.0
upload_protocol = stk500v1
; each flag in a new line
upload_flags =
    -P$UPLOAD_PORT
    -b$UPLOAD_SPEED
upload_speed = 19200
upload_port = COM9 ;

Bon je viens d'essayer de tranférer le programme via l'IDE Arduino et cela ne fonctionne toujours pas.
J'en déduis que la librairie RCSwitch ne fonctionne pas sur Attiny85. Je reste toutefois débitatif vue que le système à bien fonctionner il y a quelques semaines.

Je suis totalement coincé. Peut-être dois-je refaire mes PCB avec un Atmega.
Je sais pas quoi faire.

Le code cité précédemment est tiré de la bibliothèque est semble désactiver la réception sur Attiny85 d'après leur commentaire. Si c'est le cas, je ne vois pas comment cela a pu fonctionner.

Je n'ai jamais essayé cela dit...

Franchement je ne sais plus quoi penser. D'après des sources sur le Net certains affirment que la reception fonctionne avec RCSwitch tant dis que d'autres disent que cela ne fonctionne pas.

Quoiqu'il en soit je ne sais pas quoi faire. Quel librairie correcte dois-je utiliser pour un attiny85 ?

Je ne sais pas - je ne l’ai jamais essayé mais j’ai posé la question à chatGPT qui dit

il existe une version compatible de RCSwitch pour ATtiny85, mais avec quelques limitations. La bibliothèque officielle RCSwitch n’est pas directement compatible car elle utilise des interruptions et des timers spécifiques aux AVR comme l’ATmega328P. Cependant, plusieurs forks et adaptations fonctionnent sur ATtiny85, notamment via la TinyCore et en utilisant pin change interrupt plutôt qu’INT0.

Le plus simple est de prendre ce fork :
Added support for Holtek's HT12E encoder/decoders by cat101 · Pull Request #130 · sui77/rc-switch · GitHub (ou le fork quicsilver/RCSwitchTiny85 qui adapte les interruptions).

Sinon tu peux aussi adapter la version normale en :

  • • désactivant la réception (qui repose sur attachInterrupt pas dispo en standard sur ATtiny85)*
  • • n’utilisant que la transmission via la fonction send() sur une broche configurée en sortie.*

Ça fonctionne très bien pour piloter des prises 433 MHz ou modules RF depuis un ATtiny85 avec SoftwareSerial si besoin.

Merci pour ton retour,
Toutefois étant débutant je suis un peu perdu sur "le fork".
Aurais-tu plus d'explication à me fournir ? ou bien une version de RCSwitch prete à l'emploi pour Attiny.

En te remerciant,

Non je n’ai jamais utiliser un attiny pour cela … désolé