Telecommande IR pour handicapée

Support pour le kit de communication infra rouge (IR)

Re: Telecommande IR pour handicapée

Message non lude michel5650 » Dim 25 Aoû 2013 21:07

Bonsoir merci si vous pouvez m aider
la mémoire qui manque est peut être flash, j en suis pas sur pas juste fait des recherches sur internet
mon code j ai noté a partir d ou ça fonctionne plus



      // Del infarouge en dur sur IRremote cable sur pin 3
    int voyant=13; // Sortie 13 maintient l alimentation le temps du cycle

    const int entree4 = 4; //Pin 4 pour Bouton lavage + bidet + sechage
    const int entree5 = 5; //Pin 5 pour Bouton bidet
    //const int entree6 = 6;       

    int entree4State = 0 ; //Etat de la variable entree4
    int entree5State = 0 ; //Etat de la variable entree5
    //int entree6State = 0 ;       //Etat de la variable entree6 
             
      #include <IRremote.h>    
      
    void setup() {
      pinMode(entree4, INPUT); //defini la variable entree4 en entrée
      pinMode(entree5, INPUT); //defini la variable entree5 en entrée
      //pinMode(entree6, INPUT); //defini la variable entree6 en entrée
      digitalWrite(entree4, HIGH); // met l entrée4 a 1 au repos pour etre actionné par le 0
      digitalWrite(entree5, HIGH); // met l entrée5 a 1 au repos pour etre actionné par le 0
      //digitalWrite(entree6, HIGH); // met l entrée6 a 1 au repos pour etre actionné par le 0
      
      pinMode(voyant,OUTPUT); // Met la pin 13 sur sortie
    }

    IRsend irsend;
    //Lavage
          unsigned int lavage[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};
    //Balayage
          unsigned int balayage[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500};
    //Plus de pression 1
          unsigned int pression1[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,1500,500,500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};
    //Plus de pression 2
          unsigned int pression2[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,1500,500,500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500};

    //Avance la buse 1 fois
        unsigned int avanceBuse1[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};
    //Avance la buse 2 fois
        unsigned int avanceBuse2[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};

    //Recule la buse après être en bout 1 fois
        unsigned int reculeBuse1[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};
    //Recule la buse après être en bout 2 fois
        unsigned int reculeBuse2[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};
    //Recule la buse après être en bout 3 fois
        unsigned int reculeBuse3[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};
    //Recule la buse après être en bout 4 fois
        unsigned int reculeBuse4[83] ={4000,8000,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500};
      //Bidet
              unsigned int bidet[83]= {4000,8000,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,1500,500} ;
    //Bidet plus fort 1
    unsigned int bidetplusfort1[83]= {4000,8000,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500} ;
    //Bidet plus fort 2
    unsigned int bidetplusfort2 [83]= {4000,8000,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,500,500,500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500,500,500,500,500,1500,500,1500,500,1500,500,1500,500} ;


      void loop(){
        
      entree4State = digitalRead(entree4);
      entree5State = digitalRead(entree5);
      //entree6State = digitalRead(entree6);
        
       // ************************************* Cycle de nettoyage complet ************************************************************
     
      if (entree4State == LOW) { // entrée 1 pour lavage complet sortie 12 pour l alime
          digitalWrite(voyant, HIGH); // Met la pin 13 a 1 pour s auto-alimenter a travers le relais reed
          delay(100);
         
       Serial.begin(9600);
      //Passe en mode lavage
      irsend.sendRaw(lavage,83,38);
      delay(12000); // Temps que la buse arrive en position
      irsend.sendRaw(balayage,83,38); // envoi le code du balayage
      delay(1000); // attend un peu
      irsend.sendRaw(pression1,83,38); // envoi le code pression 1
      delay(1000); // attend un peu
      irsend.sendRaw(pression2,83,38); // envoi le code pression 2
      delay(50000); // attend un peu
      irsend.sendRaw(avanceBuse1,83,38); // avance la buse 1 fois
      delay(3000); // attend un peu
      irsend.sendRaw(avanceBuse2,83,38); // avance la buse 2 fois
      delay(3000); // attend un peu
      // A partir de la ca marche plus je le vois avec le voyant 13
     // irsend.sendRaw(reculeBuse1,83,38); // recule la buse 1 fois
     // delay(3000); // attend un peu
     // irsend.sendRaw(reculeBuse2,83,38); // recule la buse 2 fois
    //  delay(3000);                       // attend un peu
    // irsend.sendRaw(reculeBuse3,83,38);  // recule la buse 3 fois
      //delay(13000); // attend un peu
     // Serial.begin(9600);
     //irsend.sendRaw(reculeBuse4,83,38); // recule la buse 4 fois
     // delay(13000); // attend un peu
     
      //Passe en mode bidet
     irsend.sendRaw(bidet,83,38); // bidet
      delay(13000); // attend un peu
     irsend.sendRaw(bidetplusfort1,83,38); // Bidet plus fort 1
      delay(3000); // attend un peu
     irsend.sendRaw(bidetplusfort2,83,38); // Bidet plus fort 2
      delay(3000); // attend un peu
    }

    digitalWrite(voyant,LOW ); // coupe l alimentation
      delay(1000);
    }




michel5650
 
Messages: 27
Inscription: Mer 12 Juin 2013 12:15

Re: Telecommande IR pour handicapée

Message non lude SesechXP » Lun 26 Aoû 2013 07:30

A priori c'est la RAM (Data) qui commence à être juste :
Code: Tout sélectionner
 avr-size -C --mcu=atmega328p sketch_aug26a.cpp.elf
AVR Memory Usage
----------------
Device: atmega328p

Program:    5040 bytes (15.4% Full)
(.text + .data + .bootloader)

Data:       1899 bytes (92.7% Full)
(.data + .bss + .noinit)


Et il y a moyen d'optimiser tout ça ;)

En commençant par utiliser des byte à la place des int pour déclarer les entrées/sorties. Mais le gain reste léger...

Je vois une référence à la bibliothèque Serial dans ton sketch, mais tu ne fais que l'initialiser (Serial.begin). Elle n'est utilisée nulle part. En la supprimant, il y a environ 180 octets à la clé :!:

Ensuite il devrait être possible de mettre les différents codes en mémoire de programme (flash) à l'aide de la directive PROGMEM. Il fut un temps où elle ne fonctionnait pas bien avec Arduino, il faudrait que je me repenche dessus :arrow:
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Telecommande IR pour handicapée

Message non lude michel5650 » Lun 26 Aoû 2013 09:15

Bonjour, merci pour les conseils effectivement serial begin me permet d envoyer plus de code
j ai testé mais peut être mal PROGMEM mais la machine ne reconnais plus les codes qui semble avoir une fréquence plus basse je le vois en remplacent la del ir par une rouge
bonne journée
michel5650
 
Messages: 27
Inscription: Mer 12 Juin 2013 12:15

Re: Telecommande IR pour handicapée

Message non lude Bemolu » Lun 2 Sep 2013 21:38

SesechXP a écrit:A priori c'est la RAM (Data) qui commence à être juste :
En commençant par utiliser des byte à la place des int pour déclarer les entrées/sorties. Mais le gain reste léger...
Je vois une référence à la bibliothèque Serial dans ton sketch, mais tu ne fais que l'initialiser (Serial.begin). Elle n'est utilisée nulle part. En la supprimant, il y a environ 180 octets à la clé :!:
Ensuite il devrait être possible de mettre les différents codes en mémoire de programme (flash) à l'aide de la directive PROGMEM. Il fut un temps où elle ne fonctionnait pas bien avec Arduino, il faudrait que je me repenche dessus :arrow:


Tous les entêtes de chaque code sont égaux:
4000,8000,500,500,500,1500,500,500,500,500,500,1500,500,500,500,1500,500,1500,500,500,500,500,500 (voire même un peu plus, à vérifier).
Crée un tableau variable CODE_complet[83] qui contient cet en-tête suivi d'autant de "0" qu'il faut
Chaque tableau de code spécifique doit être débarrassé de cet en-tête
Avant émission, copie le 'code spécifique' choisi dans CODE_complet à partir de la position qui va bien
Emet CODE_spécifique

Si ça ne gagne pas assez de place, il y a moyen de gagner encore beaucoup.
Cordialement
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Précédente

Retourner vers Kit Communication IR

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron