problème attiny

Bonjour,

Je viens faire appel a vos lumiere pour un petit soussi de progammation d'une puce attiny.

Mon projet et de faire un petit module qui sera collé a l'interieur de ma porte de boite aux lettres pour m'indiquer via RF 433 la reception de courrier ou de colis grace a 2 capteurs et un bouton me permettra la RAZ du recepteur aprés collecte.

Le premier prototype était basé sur un digispark et fonctionnais ,mais voulant reduire la taille je l'ai refais en direct avec une puce attiny85.

maintenant ma led d'emission est constament allumé et en reception plus rien ne se passe.

je vous joint le code.

ave vous une idée?

ballem.ino (1.33 KB)

et sinon pour le code...

/*TRUC DE B.A.L
 * Emetteur RF 433Mhz pour boite aux lettres
 * equipé de 2 capteurs pour volet (courrier)
 * et pour porte (colis) et d'un bouton poussoir
 * pour RAZ du recepteur.
 * Le recepteur aura soit une led RGB pour indication 
 * colis , lettre ou attente ,soit un ecran 16*2.
*/

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();


void setup() {
 
   // emetteur connecté sur attiny85 Pin #0
  mySwitch.enableTransmit(0);
  
  //configuration des entrées
  pinMode(2, INPUT_PULLUP);//reception de lettre
  pinMode(3, INPUT_PULLUP);//reception de colis
  pinMode(4, INPUT_PULLUP);//RAZ du recepteur

  //configuration des sorties
  pinMode(1, OUTPUT);//led emission 
  
 mySwitch.setRepeatTransmit(15);
}
void loop() {
  //read the pushbutton value into a variable
  int sensorVal = digitalRead(2);
  int sensorVal2 = digitalRead(3);
  int sensorVal3 = digitalRead(4);


  if (sensorVal == HIGH) {
    digitalWrite(1, LOW);
  } else {
    digitalWrite(1, HIGH);//allumage led
      mySwitch.send(5, 24);//envoie signal
  
  }
    if (sensorVal2 == HIGH) {
    digitalWrite(1, LOW);
  } else {
    digitalWrite(1, HIGH);//allumage led
      mySwitch.send(9, 24);//envoie signal
 
  }
    if (sensorVal3 == LOW) {
    digitalWrite(1, LOW);
  } else {
    digitalWrite(1, HIGH);//allumage led
      mySwitch.send(7, 24);//envoie signal
   
  }
}

Bonsoir,

Si le code fonctionnait déjà bien avec la digispark contenant une attiny85, le problème ne vient certainement pas de là.

Arrivez-vous à téléverser votre programme dans l'attiny?

Ci dessous le schéma du digispark.

elecrolab:
Le premier prototype était basé sur un digispark et fonctionnais ,mais voulant reduire la taille je l'ai refais en direct avec une puce attiny85.

maintenant ma led d'emission est constament allumé et en reception plus rien ne se passe.

je vous joint le code.

ave vous une idée?

Bonsoir

Le digispark embarque un bootloader micronucleus
un attiny85 est de base livré vierge
ton attiny85 (composant) tu le programme comment et tu injecte le .HEX avec quoi ?
Perso je joue de temps en temps en temps avec du digispark ou de l'attiny85
mais çà nécessite déjà d'avoir informé l'IDE des "paquets" concernant les cartes à utiliser

Basiquement:
-un digispark est uploadé au travers du bootloader micronucleus

  • un attiny est uploadé par ICSP

exemple pour moi en ce qui concerne ce que j'utilise sous le gestionnaire de cartes

Bonjour,

Pour ce qui est te televerser le code dans l'attiny sa devrait etre bon , j'ai fais un teste blink avant pour controler .J'ai juste changer les pins sur mon programme car je comptais commander un circuit imprimé pour intègrer mes composants est la disposition ne m'arrangait pas.

Voici le code du digispark:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();


void setup() {
 
   // Transmitter is connected to Arduino Pin #2  
  mySwitch.enableTransmit(2);
  
  //configure pin 0 as an input and enable the internal pull-up resistor
  pinMode(0, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(1, OUTPUT);
 mySwitch.setRepeatTransmit(15);
}
void loop() {
  //read the pushbutton value into a variable
  int sensorVal = digitalRead(0);
  int sensorVal2 = digitalRead(3);
  int sensorVal3 = digitalRead(4);


  if (sensorVal == HIGH) {
    digitalWrite(1, LOW);
  } else {
    digitalWrite(1, HIGH);
      mySwitch.send(5, 24);
  
  }
    if (sensorVal2 == HIGH) {
    digitalWrite(1, LOW);
  } else {
    digitalWrite(1, HIGH);
      mySwitch.send(9, 24);
 
  }
    if (sensorVal3 == LOW) {
    digitalWrite(1, LOW);
  } else {
    digitalWrite(1, HIGH);
      mySwitch.send(7, 24);
   
  }
}

et mon branchement actuel (mis a part pour le regulateur ,pour les essais j'alimente en 5V avec un arduino)

Je vais essayer te televerser le code du digspark sur l attiny .
Par contre bizzarement sur digispark mon INPUT_PULLUP de la pin 4 fonctionne avec VCC contrairement aux pin 0 et 3.

elecrolab:
Par contre bizzarement sur digispark mon INPUT_PULLUP de la pin 4 fonctionne avec VCC contrairement aux pin 0 et 3.

Bonjour,

Qu'est ce que tu entends par là?

En faite avec mon code j utilise 3 INPUT avec PULLUP pour mes 3 boutons.J'ai donc relié mes 3 boutons au GND et le bouton du pin 4 ne fonctionnais pas ,j'ai donc fais des recherches sur le site et il s'avère qu'il doit être relié au 5V,en tout cas pour le digispark , pour l'attiny seul je ne sais pas.

Il y a un problème dans ton programme.
Dès que le bouton raz est relâché, la led est allumée.

  if (sensorVal3 == LOW) {
   digitalWrite(1, LOW);
 } else {
   digitalWrite(1, HIGH);//allumage led
     mySwitch.send(7, 24);//envoie signal
 }

ce devrait plutôt être

  if (sensorVal3 == LOW) {
   digitalWrite(1, LOW);
   mySwitch.send(7, 24);//envoie signal
 }

elecrolab:
En faite avec mon code j utilise 3 INPUT avec PULLUP pour mes 3 boutons.J'ai donc relié mes 3 boutons au GND et le bouton du pin 4 ne fonctionnais pas ,j'ai donc fais des recherches sur le site et il s'avère qu'il doit être relié au 5V,en tout cas pour le digispark , pour l'attiny seul je ne sais pas.

Je ne sais pas sur le digispark (il y a peut être un pulldown sur la carte), mais sur l'attiny85 si tu utilises INPUT_PULLUP les boutons doivent être connectés au gnd.

Merci te ta réponses ,mais je voulais que la led s allume quand le bouton est appuyer ,ce n'est pas comme ca?
Ca fonctionnais sur le digispark!

Là , j'ai recommencé mes branchements avec le code utiliser pour le digispark sur l'attiny et la led est allumé dès le demarrage.

Et pour le pullup j ai retrouvé ca

https://forum.arduino.cc/index.php?topic=505066.0

Bien sûr que la led est allumée dès le début, comme je te l'ai dit elle est allumée si le bouton RAZ n'est pas appuyé.
Le bouton RAZ ce n'est pas pour faire la RAZ?
Essaies le code que je t'ai suggéré.

Si le bouton RAZ est pour faire le RAZ ,mais tu recepteur ,ça c'est l'emetteur.

Regarde le code du recepteur :

[code
#include <RCSwitch.h>
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

int reset = 3;
RCSwitch mySwitch = RCSwitch();
#define pressed1 9   //defines incoming data set by user which is transmitted
#define pressed2 5
#define pressed3 7

void setup() {
  
   lcd.begin(16, 2);
   lcd.print ("truc de bal");
   
 
 mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2 pinMode(led,OUTPUT);
}
void loop() 

{
  unsigned long res = mySwitch.getReceivedValue();

  switch (res){
    case pressed1:
    lcd.setCursor(0, 1);
    lcd.print("courrier");
    lcd.setCursor(12, 0);
    lcd.print(millis() / 60000);

     break;
     
     case pressed2:
     lcd.setCursor(10, 1);
     lcd.print("colis");
     lcd.setCursor(12, 0);
     lcd.print(millis() / 60000);

     break;
     
     case pressed3:
     pinMode(3,OUTPUT);
     lcd.print(millis() / 1);
     
     break;    

  }
}]

le RAZ active la case pressed3!

Mais je vais essayer ton cod ,même si je ne comprend pas pourkoi il fonctionne bien sur digispark.

Merci

Moi non plus je ne comprend pas pourquoi ça fonctionne sur le digispark, mais je comprend pourquoi ça ne fonctionne pas sur l'attiny85.

kamill:
Moi non plus je ne comprend pas pourquoi ça fonctionne sur le digispark, mais je comprend pourquoi ça ne fonctionne pas sur l'attiny85.

Bonsoir
Dans la mesure où , on ne sais toujours pas comment est compilé et uploadé l'attiny
c'est difficile de faire autre chose que des suppositions
Quelle horloge est utilisée pour l'attiny ?
Ce serai bien d'avoir des reponses aux questions que j'ai posée en #4

Artouste:
Bonsoir
Dans la mesure où , on ne sais toujours pas comment est compilé et uploadé l'attiny
c'est difficile de faire autre chose que des suppositions
Quelle horloge est utilisée pour l'attiny ?
Ce serai bien d'avoir des reponses aux questions que j'ai posée en #4

bonjour,

Pour verser le programme j ai utiliser un arduino avec son IDE que j ai règler pour ATtiny85 en type de carte , clock internal 8Mhz internal et programmateur arduino as ISP.

Etant une bille en programmation ,j'espère avoir répondu aux questions?

Bonjour,

Après avoir fais de multiple essaies et relu quelque fois vos questions et réponses ,j'avais juste un probleme avec

  if (sensorVal3 == LOW) {
   digitalWrite(1, LOW);
 } else {
   digitalWrite(1, HIGH);//allumage led
     mySwitch.send(7, 24);//envoie signal
 }

Donc comme me l'a indiqué kamill, seulement je suis un peu long a la détente. :o

voici la modif :

    if (sensorVal3 == HIGH) {
    digitalWrite(1, LOW);
  } else {
    digitalWrite(1, HIGH);
      mySwitch.send(7, 24);

Merci a vous.

Content que ça fonctionne :slight_smile: