Programme Attiny 85

Bonjour,
Il s'agit d'un progamme pour commande de 2 relais par ATtiny85 et 1 voie de radiocommande modélisme (ancienne en 72Mhz).
La sortie 4 fonctionne de manière aléatoire non fuide.
Je souhaite aussi que les 2 sorties relais soient inactive si la radiocommande est à l'arrêt.

//============ Commande de 2 relais sur 1 voie radio impulsion et maintenue ==========
//===================================== Attiny 85 ===================================
//================ Manche au neutre ==> SORTIE 3 (OFF) et SORTIE 4 (OFF) =============
//============ Manche en haut ==> SORTIE 3 (ON impulsion) et SORTIE 4 (OFF) ==========
//======== Manche en bas 1 fois ==> SORTIE 3 (OFF) et SORTIE 4 (ON maintenue) =======
//============ Manche en bas 1 fois ==> SORTIE 3 (OFF) et SORTIE 4 (OFF) ============
//============== Coupure signal radio ==> SORTIE 3 (OFF) et SORTIE 4 (OFF) ==========
//====================================================================================
int signal = 2; // Déclare le signal récepteur sur le pin 2
int val1; // Valeur du signal récepteur
int etat1;
int etat2;
int cpt;
#define signal 2
#include <SoftwareSerial.h>
//====================================================================================
void setup(){
pinMode(signal, INPUT); // Déclare signal comme une entrée
pinMode(3, OUTPUT); // Déclare le pin 3 (sortie 3) en sortie
pinMode(4, OUTPUT); // Déclare le pin 4 (sortie 4) en sortie
}
//====================================================================================
void loop(){
val1 = pulseIn(signal, HIGH);
if (val1 > 10000 && val1 < 13000)
{
etat1=0;
etat2=!etat2 ;
}
//==================================================================================
if (val1 > 13000 && etat1 == 0)
{
digitalWrite(4, HIGH); // Active sortie 4
delay(5000);
digitalWrite(4, LOW); // Désactive sortie 4
etat1=1;
}
else
{
digitalWrite(4, LOW); // Désactive sortie 4
}
//==================================================================================
if (val1 < 10000 && etat2 == 0)
{
digitalWrite(3, HIGH); // Active sortie 3
}
if (val1 < 10000 && etat2 == 1)
{
digitalWrite(3, LOW); // Désactive sortie 3
}
}
//=============================== FIN DU PROGRAMME ===================================emphasized text

Quelqu'un peut il me faire bénéficier de son expertise ?
Merci

Bonjour,
Merci de mettre votre code entre balises.
Veilliez consulter les bonnes pratiques du forum :
https://forum.arduino.cc/t/les-bonnes-pratiques-du-forum-francophone/861014

Bonjour

plusieurs choses en attendant de vous conformer aux bonnes pratiques.

  1. vérifier que l'attiny est bien en 8 mHz ou 16 mHz en programmant les fuses
  2. vérifier que le programme est bien compilé avec les bonnes options de fréquence.
  3. pulsein est bloquant utiliser les interruption serait un plus.
  4. lisser la valeur lue en faisant une moyenne glissante sur 4 ou 5 valeurs
  5. Vérifier que les seuils sont corrects ...

j'ai fait ce genre de choses avec deux relais avec option mono ou bistable. Et cela fonctionne très bien.
avant gout d'un isr sur pin3

ISR(PCINT0_vect) {

#define RC_LEVEL (PINB & (1 << PINB3)) >> PINB3      // "digitalRead(PWM_INPUT_PIN)",

  unsigned long timestamp = micros();                  //

  if (RC_LEVEL == LOW && prevRClevel == HIGH) {
    RC_PWM = timestamp - RCpulsestart;
    prevRClevel = LOW;
  }
  else if (RC_LEVEL == HIGH && prevRClevel == LOW) {
    RCpulsestart = timestamp;
    prevRClevel = HIGH;
  }

}

Calcul d'une valeur lissée

Val_lisse = ((Val_lisse * CoefLissage) + RC_PWM) / Divliss ; // Calcul de la valeur lissée

Grand merci pour votre retour,
Mais contrairement à moi, et peut être êtes vous d'une plus récente génération que moi, j'avoue avoir un beaucoup de mal a décripter (ma formation initiale il y a longtemps était au basic 21 ...), et intégrer les solutions que vous apportez :
Mon code fonctionne incorrectement en téléversant en 1Mhz avec les seuils écrits, mais lorsque je verse en 8Mhz plus rien ne fonctionne
Pour le reste, je ne comprends pas vos lignes IRS (PCINT_vect) { et toute sa suite ...
Là c'est moi qui bugge !

Etant ne en 56 je ne pense pas a un probleme generationel..

Un peu de lecture pour deblayer le terrain

Ensuite on verra pour faire mieux
(En appuyant sur retour il y a d autres exemples)

Une petite lecture d un exemple de programmation des fuses sur attiny me semble aussi nécessaire

Compiler en 8mHz si les fuses sont en 1 ne risque pas de marcher.

Un petit tuto sur le signal de la radio commande pwm est aussi nécessaire pour corriger les seuils.(ils sont corrects dans l exemple mais comprendre pourquoi c'est mieux)

Enfin suivre les conseils en éditant votre post initial serait indéniablement un plus nécessaire.

Effectivement cela fonctionne avec le code "sous marin" .
Merci beaucoup pour votre aide précieuse.

Une cause perdue de plus ... qu’importe le flacon pourvu qu’on ai l’ivresse.
Dorénavant j’ evite toute reponse si pas conforme.

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