Cooling-Masters
Connexion · INSCRIPTION · Site Recevoir à nouveau l'e-mail de validation


[Arduino] Topic à Questions-Réponses

Ajouter ou retirer ce sujet de vos favoris  ·  Suivre ce sujet  ·  Imprimer ce sujet
Pages :  1  2  3  4  5  6 
Page précédente    Page suivante 
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

mercredi 21 août 2013 à 19:35:25     
a tous!

Et bienvenu dans la monde des µcontrôleurs programmables !

Ce topic est la pour y poser vos questions diverses et variés en espérant que quelqu'un puisse vous aider.

Pour une meilleure compréhension et une meilleure visibilité, veillez mettre vos bouts ou exemples de code entre les balises "[code]" et si possible avec les commentaires dans le code, merci.

J invite tous les possesseurs de carte arduino a passer par ici pour avoir un aperçu du nombre d adeptes déjà présents et futurs.

Message édité par perecastor le mercredi 21 août 2013 à 19:36:12
Google




     
Sk_rmouche


Apprenti Aigri
Messages : 17926

mercredi 21 août 2013 à 19:42:59     
Les PIC's ça compte ? j'en ai cramé deux déjà, je me suis fait un nom en quelque sorte
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

mercredi 21 août 2013 à 19:47:00     
Et j enquille avec ma question posée sur Bla², dans ce code :

CODE :

void alarme()
{
 digitalWrite(lcdlum, HIGH);           //  allume l eclairage du lcd
 lcd.setCursor(0, 1);                  //  place le curseur sur la deuxieme ligne
 lcd.print(" a table !!!!");         //  parce qu on est poli aussi avec les chats
 delay (500);
 tone(6, 960, 200);  
 digitalWrite(moteur, HIGH);           //  fait tourner le cylindre 8 secondes
 delay (5000);
 lcd.setCursor(0, 1);      
 lcd.print("                 ");       //  efface la deuxieme ligne
 buttonState = digitalRead(bouton);    // lecture de l etat du capteur de croquettes
 if (buttonState == HIGH)               // si il n y a pas asses de croquettes,alors :
 {
   digitalWrite(moteur, LOW);            //  arrete le cylindre
   servo.write(90);                     // servo en position ouvert  
   delay (500);                          // attente de 500 millis
   digitalWrite(lcdlum, LOW);            //  eteind l eclairage du lcd

 }
 else                                // si il n y a asses de croquettes , alors :
 {                                  
   servo.write(178);                     // servo en position ferme  
   tone(6, 880, 500);                    // genere une frequence de 880 hertz de 500 millis sur le pin 6
   delay (3000);
 }
 buttonState = digitalRead(bouton);    // lecture de l etat du capteur de croquettes
 if (buttonState == HIGH)               // si il n y a pas asses de croquettes,alors :
 {
   digitalWrite(moteur, LOW);            //  arrete le cylindre
   servo.write(90);                     // servo en position ouvert  
   delay (500);   // attente de 500 millis
   digitalWrite(lcdlum, LOW);            //  eteind l eclairage du lcd

 }
 else                                // si il n y a asses de croquettes , alors :
 {                                  
   servo.write(178);                     // servo en position ferme  
   tone(6, 880, 500);                    // genere une frequence de 880 hertz de 500 millis sur le pin 6
   delay(500);                           // attente 500 millis
   tone(6, 440, 500);                    // genere une frequence de 440 hertz de 500 millis sur le pin 6
   delay(500);                           // attente 500 millis
 }
 buttonState = digitalRead(bouton);    // lecture de l etat du capteur de croquettes
 if (buttonState == HIGH)               // si il n y a pas asses de croquettes,alors :
 {
   digitalWrite(moteur, LOW);            //  arrete le cylindre
   servo.write(90);                     // servo en position ouvert  
   delay (500);                          // attente de 500 millis
   digitalWrite(lcdlum, LOW);            //  eteind l eclairage du lcd

 }
 else                                // si il n y a asses de croquettes , alors :
 {                                  
   servo.write(178);                     // servo en position ferme  
   delay (500);                          // attente 500 millis
   tone(6, 880, 500);                    // genere une frequence de 880 hertz de 500 millis sur le pin 6
   delay(500);                           // attente 500 millis
   tone(6, 440, 500);                    // genere une frequence de 440 hertz de 500 millis sur le pin 6
   delay(500);                           // attente 500 millis
   tone(6, 880, 500);                    // genere une frequence de 880 hertz de 500 millis sur le pin 6
   delay(500);
 }
 digitalWrite(moteur, LOW);            //  arrete le cylindre
 digitalWrite(lcdlum, LOW);            //  eteind l eclairage du lcd

}


J aimerais remplacer mes if par des while.

Car pour par exemple 3 seconde de cylindre qui tourne, je n aurai pas la même quantité de croquette en début et fin de cylindre.

C est pour ça aussi que j ai mis 3 if a la suite car quand le cylindre est pleins, le tube est remplis (voir même trop) au premier if et vers la fin de vie du cylindre il est remplis ( le tube) a la fin du dernier if.

Mais comme dit plus tôt, dans mon while il faut attendre 300ms d état haut sur le capteur optique pour ouvrir le tube.
Si ce délais n est pas la, le tube s ouvre des qu il voit passer une croquette.
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

mercredi 21 août 2013 à 19:49:13     
QUOTE (Sk_rmouche) :

Les PIC's ça compte ? j'en ai cramé deux déjà, je me suis fait un nom en quelque sorte

No pbs, ce sont des µcontrôleurs aussi
D ailleurs j ai un 16f887 qui traîne sur sa board.....
Mais en fait j ai jamais réussi a faire quelque chose de bien avec Surement l interface de prog asses rebutante comparé a l ide arduino.
kissagogo27


Méchant Vieux Râleur
Messages : 28148

mercredi 21 août 2013 à 20:41:18     
ton cylindre de distribution il a une vis sans fin ? Oupa ?
OrOoX


AFK ? Késako ? :D
Messages : 9889

mercredi 21 août 2013 à 20:48:45     
J'ai refais le script avec un While, à voir ce que ça donne vu que j'ai pas la bête sous la main :

CODE :


void alarme()
{
digitalWrite(lcdlum, HIGH);           //  allume l eclairage du lcd
lcd.setCursor(0, 1);                  //  place le curseur sur la deuxieme ligne
lcd.print(" a table !!!!");         //  parce qu on est poli aussi avec les chats
delay (500);
tone(6, 960, 200);  
lcd.setCursor(0, 1);      
lcd.print("                 ");       //  efface la deuxieme ligne

// Initialisation des valeurs
int Remplissage_OK = 0;
int Remplissage_Done = 0;
 
// Début du remplissage du tube  
while ( Remplissage_OK == 1)
{
    // On fait tourner le réservoir
    digitalWrite(moteur, HIGH);
    delay(3000);                // 3 secondes par remplissage ( A ajuster )
     
    // Arrêt du moteur pour contrôler le niveau de croquettes
    digitalWrite(moteur, LOW);
    delay(1000);                // Tempo pour laisser les croquettes tomber
   
    // Contrôle à l'aide de l'optique
    Optique = digitalRead(bouton);
   
    if ( Optique == HIGH )
    {
      // On met fin à la Boucle
      Remplissage_OK == 1;
     
      // Ouverture du tube
      servo.write(90);
      delay(1000);              // Tempo pour laisser les croquettes tomber
     
      // Fermeture du tube
      servo.write(178);
      delay(500);             // Tempo pour laisser le temps de se fermer
     
      // A TABLE
      Remplissage_Done = 1;
    }
   
    else {
      // La Boucle continue
      Remplissage_OK == 0;
      Remplissage_Done = 0;
    }
}
 
// ACTION DE FIN
 if ( Remplissage_Done == 1 )
{                                  
  tone(6, 880, 500);                    // genere une frequence de 880 hertz de 500 millis sur le pin 6
  delay(500);                           // attente 500 millis
  tone(6, 440, 500);                    // genere une frequence de 440 hertz de 500 millis sur le pin 6
  delay(500);                           // attente 500 millis
  tone(6, 880, 500);                    // genere une frequence de 880 hertz de 500 millis sur le pin 6
  delay(500);
  digitalWrite(lcdlum, LOW);            //  eteind l eclairage du lcd
}

}
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

mercredi 21 août 2013 à 20:55:00     
Alors ton code passe avec le rajout d un int devant : Optique = digitalRead(bouton); ^^

Je taÿst ça demain matin, le chat a déjà eu sa ration ^^
OrOoX


AFK ? Késako ? :D
Messages : 9889

mercredi 21 août 2013 à 20:56:17     
Ah oui le con, la variable Optique était pas initialisée

Message édité par OrOoX le mercredi 21 août 2013 à 20:56:24
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

mercredi 21 août 2013 à 21:14:08     
Demain j upload le code et je fait une vidéo ^^
Si c est bon je poste le code complet ^^
Rosco


Administrateur
Messages : 25926

mercredi 21 août 2013 à 21:16:22     
Et vous les clockez vos distributeurs ?
Y a une vidéo d'Arduino entièrement plongé dans le LN2 qui est passée y a pas longtemps
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

mercredi 21 août 2013 à 21:35:13     
Oui c est possible de les faire tourner plus vite.
Mais faut changer le quartz. Un 328p peut tourner jusqu a 20mhz en 5v sinon c est 16mhz en 5v normalement.
Quand il tourne en 3.3v on le met en 8mhz.
moyen_moins


aka metalazzo | Anti²Bug
Messages : 10216

mercredi 21 août 2013 à 22:13:02     
Ouais go overclock
Rosco


Administrateur
Messages : 25926

mercredi 21 août 2013 à 22:19:08     
65 MHz : http://www.youtube.com/watch?v=KVRvWmcxnA0
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

jeudi 22 août 2013 à 09:40:59     
@OrOoX: tu viens tout juste de coder l allumage de mon rétroéclairage du lcd :

http://youtu.be/CPz9Ujeu7T4

Message édité par perecastor le jeudi 22 août 2013 à 09:41:09
moyen_moins


aka metalazzo | Anti²Bug
Messages : 10216

jeudi 22 août 2013 à 10:23:09     
Je regarderai ça ce soir. Youtube ici, c'est no way
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

jeudi 22 août 2013 à 10:28:42     
QUOTE (moyen_moins) :

Je regarderai ça ce soir. Youtube ici, c'est no way

En meme temps ya rien a voir

En gros ce loloox a donné ça donne un bip, ça allume le lcd épycétou!
kissagogo27


Méchant Vieux Râleur
Messages : 28148

jeudi 22 août 2013 à 11:11:22     
caydéjabieng
moyen_moins


aka metalazzo | Anti²Bug
Messages : 10216

jeudi 22 août 2013 à 11:56:04     
en gros, tu rentres pas dans le while ?
perecastor


Modérateur-faker/Portuguais des iles/父 亲河&a
Messages : 15091

jeudi 22 août 2013 à 12:12:37     
QUOTE (moyen_moins) :

en gros, tu rentres pas dans le while ?

C est ce que je pense
Car j ai juste un bip, le lcd qui s allume, le a table qui s affiche puis s eteind et tout reste comme ça ^^
kissagogo27


Méchant Vieux Râleur
Messages : 28148

jeudi 22 août 2013 à 12:40:16     
normal

>>>>>>>>>>> int Remplissage_OK = 0;
int Remplissage_Done = 0;

// Début du >remplissage du tube
>>>>>>>>>> while ( Remplissage_OK = 0)



pk checker un <> 1 alors que le test =0 suffit
OrOoX


AFK ? Késako ? :D
Messages : 9889

jeudi 22 août 2013 à 13:16:51     
Lol le rire sadique de Perecastor !

Pas évident de faire un code sans avoir la machine sous la main ^^

Sinon Kissa, apprend à lire

CODE :

// Initialisation des valeurs
int Remplissage_OK = 0;
int Remplissage_Done = 0;

// Début du remplissage du tube  
while ( Remplissage_OK == 1)


Si on laisse sur 0, à moins de mettre un break; ce qui n'est pas forcément propre, on arrive jamais à condition,
donc 0 correspond au tube non rempli, 1 correspond au tube remplie, stoo

Message édité par OrOoX le jeudi 22 août 2013 à 13:18:12
kissagogo27


Méchant Vieux Râleur
Messages : 28148

jeudi 22 août 2013 à 13:24:09     
tester une inégalité avec 1 ou une égalité avec 0

c kif kif
moyen_moins


aka metalazzo | Anti²Bug
Messages : 10216

jeudi 22 août 2013 à 13:30:48     
QUOTE (OrOoX) :

Lol le rire sadique de Perecastor !

Pas évident de faire un code sans avoir la machine sous la main ^^

Sinon Kissa, apprend à lire

CODE :

// Initialisation des valeurs
int Remplissage_OK = 0;
int Remplissage_Done = 0;

// Début du remplissage du tube  
while ( Remplissage_OK == 1)


Si on laisse sur 0, à moins de mettre un break; ce qui n'est pas forcément propre, on arrive jamais à condition,
donc 0 correspond au tube non rempli, 1 correspond au tube remplie, stoo

"stoo" mais ça marche pas

while remplissage <1
etc.

ça doit aussi marcher non ?
la condition du while est chelou. En même temps, les boucles while et moi...
OrOoX


AFK ? Késako ? :D
Messages : 9889

jeudi 22 août 2013 à 13:36:46     
J'suis en train d'adapter le code à mon matos pour tester avec les relais, je vous tiens au jus


EDIT : Bon je sais pas pourquoi, mais ta ligne : lcd.print(" a table !!!!"); // parce qu on est poli aussi avec les chats

Bah ça faisait planter mon Arduino car y'avais trop de points d'exclamations

Message édité par OrOoX le jeudi 22 août 2013 à 14:10:09
kissagogo27


Méchant Vieux Râleur
Messages : 28148

jeudi 22 août 2013 à 14:09:54     
== égalité
!= différence

http://www.siteduzero.com/sciences/tutorie...s-conditions-10

donc si tu set a 0 ta variable et que ta condition de boucle demande un 1 la boucle ne se fait pas
Google




     
Pages :  1  2  3  4  5  6 
Page précédente    Page suivante