[Programmation] Arduino - Suite de Led
Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

Arduino - Suite de Led



  1. #1
    vinvin69

    Arduino - Suite de Led


    ------

    Bonsoir à vous !

    Je viens poster ici pour vous demander un peu d'aide
    Voici mon soucis, j'ai pour projet de réaliser une petite "machine de Turing" en utilisant un Arduino. La mémoire serait représentée par une série de Led (environ 10), physique, bicolore, vertes et rouges.
    J'aurai besoin, de générer un "seed" au lancement de mon programme pour que les leds s'allument "aléatoirement" vertes ou rouges. Le top serait de pouvoir changer la combinaison obtenue par un appuie sur un bouton.
    Je ne sais pas si j'ai été clair. 10 leds alignées, qui doivent s'allumer vertes, ou rouge (chaque led pouvant être verte ou rouge), "aléatoirement".
    J'ai entendu d'une solution, en mettant une "antenne" sur une Analog Input, on pourrait récupérer des parasites qui donc seraient aléatoires, mais je vois mal comment l'appliquer à ma suite de led.
    Malheureusement je bloque sur cette première partie du code.

    Merci bien,

    Vincent A

    -----

  2. #2
    DAUDET78

    Re : Arduino - Suite de Led

    Citation Envoyé par vinvin69 Voir le message
    Malheureusement je bloque sur cette première partie du code.
    Fait une recherche sur générateur pseudo-aléatoire
    J'aime pas le Grec

  3. #3
    freepicbasic

    Re : Arduino - Suite de Led

    Si tu veux une vrai combinaison aléatoire il faut effectivement un signal de bruit blanc sur une pin et charger les leds 1 à 1 avec la lecture de la pin.

    La radio n'est pas trop pratique.
    Le mieux est une diode zener qui génère du bruit qui est amplifier avec 1 ou 2 AOP , un lm328 devrait convenir.

    un exemple ici;
    https://www.surlatoile.org/discussio...nerateur-bruit
    A+, pat

  4. #4
    vinvin69

    Re : Arduino - Suite de Led

    Merci de vos réponses,

    Je vais donc opter pour une entrée analogique de bruit blanc.
    Imaginons que ce pin est relié au pin A1. On a donc :

    Code:
    bruit = analogRead(A1); 
    if (bruit < 512) {
    digitalWrite(led1v, HIGH); //Led 1 verte
    }
    else {
    digitalWrite(led1r, HIGH);  //Led 1 rouge
    }
    Et donc reproduire ça pour l'ensemble des leds ?

    Merci bien,

    Vincent A

  5. A voir en vidéo sur Futura
  6. #5
    freepicbasic

    Re : Arduino - Suite de Led

    1 entrée digital
    2 leds tête bêche sur 13 (par exemple rouge si +, vert si -)
    S'il y a 3fils sur une led double , il faudra surement 2 sorties.

    Le bruit zener est amplifié par un premier AOP, gain à déterminer, assez grand à mon avis , puis un second AOP en trigger, le tout alimenté en 5V, la zener serait donc inférieur à 5V, 2.4V par exemple, mais la tension n'est pas critique, certains utilisent une jonction base émetteur en inverse en guise de zener, mais si leur tension zener est supérieur à 5V, ça ne fonctionnera pas.

    L'exemple de Arduino , tout simplement;

    Code:
    int ledPin = 13; // LED connected to digital pin 13
    int inPin = 7;   // pushbutton connected to digital pin 7
    int val = 0;     // variable to store the read value
    
    void setup()
    {
      pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output
      pinMode(inPin, INPUT);      // sets the digital pin 7 as input
    }
    
    void loop()
    {
      val = digitalRead(inPin);   // read the input pin
      digitalWrite(ledPin, val);    // sets the LED to the button's value
    }
    A+, pat

  7. #6
    vinvin69

    Re : Arduino - Suite de Led

    Merci freepicbasic,

    Concernant les leds, je compte utiliser des simples leds bicolores, de ce type : http://www.reboul.fr/catalogue/actif...f_1010621.html
    Ces leds ont donc trois pattes, une reliée au ground et les deux autres commandées par l'Arduino. Le soucis c'est que je vois mal comment adapté le code d'exemple aux leds. Car dans l'exemple on ne gère qu'une pin, or là, il en faut 2 Faudrait-il mettre deux fois le code d'exemple pour les deux pins d'une led ? (Au risque de se retrouver avec une led verte et rouge -> orange).

    Pourriez-vous m'indiquer quels types d'AOP conviendrait ? Et la zener ? Quelque chose comme ça ? http://www.reboul.fr/catalogue/actif...f_1014545.html

    Merci bien,

    Vincent A

  8. #7
    alainav1

    Re : Arduino - Suite de Led

    Bonjour,
    il existe des led bicolore à 2 pattes donc sur une pin tu peux choisir la couleur
    voir la fin de page
    http://www.ptitrain.com/electronique...lication01.htm
    cordialement
    Alain
    Décider de faire, c'est bien . Décider quand, c'est mieux !

  9. #8
    freepicbasic

    Re : Arduino - Suite de Led

    La zener est OK
    Pour le code s'il y a assez de pins libres , il faut en mettre 2 par bit.

    Sinon il faut un transistor et 1 résistance pour inverser le sens .
    ne pas oublier la résistance sur le point commun de la leds à 3 fils.

    Code:
    int RedPin = 13; // LED connected to digital pin 13
    int GreenPin = 12; // LED connected to digital pin 13
    int inPin = 7;   // pushbutton connected to digital pin 7
    int val = 0;     // variable to store the read value
    
    void setup()
    {
      pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output
      pinMode(inPin, INPUT);      // sets the digital pin 7 as input
    }
    
    void loop()
    {
      val = digitalRead(inPin);   // read the input pin
      if (val!=0) {
        digitalWrite(redPin, 1);    // sets the LED to the button's value
        digitalWrite(GreenPin,0);    // sets the LED to the button's value
       }else
        {
        digitalWrite(redPin, 0);    // sets the LED to the button's value
        digitalWrite(GreenPin,1);    // sets the LED to the button's value
      }
    }
    A+, pat

  10. #9
    vinvin69

    Re : Arduino - Suite de Led

    Merci à vous,

    je vais utiliser un Arduino Mega, donc pas de soucis concernant le nombre de pin, donc je vais plutôt opter pour des leds à 3 pins.
    Donc pour le code on aurait qqch comme ça :

    Code:
    const int RedPin = 13;    //Led1 rouge
    const int GreenPin = 12; //Led1 verte
    const int inPin = 7;         //bruit blanc
    int val = 0;                    //variable bruit blanc
    
    void setup()
    {
      pinMode(RedPin, OUTPUT);   //initialisions des entrées ou sorties
      pinMode(GreenPin, OUTPUT); 
      pinMode(inPin, INPUT);      
    }
    
    void loop()
    {
      val = digitalRead(inPin);   // read the input pin
      if (val!=0) {
        digitalWrite(RedPin, HIGH);    // sets the LED to the button's value
        digitalWrite(GreenPin, LOW);    // sets the LED to the button's value
       }else
        {
        digitalWrite(RedPin, LOW);    // sets the LED to the button's value
        digitalWrite(GreenPin, HIGH);    // sets the LED to the button's value
      }
    }
    Et ceci pour toutes les différentes leds.
    Donc, ça, c'est fait.

    Ensuite, pour le fameux générateur de bruit blanc, pourriez-vous m'indiquer précisément comment procéder ? J'ai trouvé des schémas sur internet mais ils semblent assez complexes...

    Merci bien,

    Vincent A

  11. #10
    DAUDET78

    Re : Arduino - Suite de Led

    Citation Envoyé par vinvin69 Voir le message
    Je vais donc opter pour une entrée analogique de bruit blanc.
    Et ça , sans jeter un coup d'oeil sur générateur pseudo-aléatoire ?
    http://nicolasj.developpez.com/articles/libc/hasard/
    http://math.univ-lyon1.fr/~jberard/genunif-www.pdf
    http://gilles.dubois10.free.fr/proba...imulation.html
    J'aime pas le Grec

  12. #11
    freepicbasic

    Re : Arduino - Suite de Led

    Avec le pseudo

    SI le but est de changer à chaque allumage il faudra mémoriser le code sur eeprom et le réintroduire dans le Seed
    Et la séquence se reboucle au bout de 65535 coup pour un rnd de 16 bits.
    La fonction random est dans la lib arduino donc à priori peu de lignes de code.

    Et au départ lors de la première utilisation , après programmation, puisque le seed sera écrit en dur, la suite sera la même.

    ça dépend de l'utilisation, ça peut éviter de faire du hard en plus, effectivement.
    A+, pat

  13. #12
    vinvin69

    Re : Arduino - Suite de Led

    Merci Daudet,

    Effectivement ce serait plus simple de faire ça en code
    Je vais me renseigner sur tout ça. Comment récupérer ce nombre aléatoire pour l'appliquer aux leds ? Avec un if ? :/
    Merci bien,

    Vincent A

  14. #13
    DAUDET78

    Re : Arduino - Suite de Led

    Citation Envoyé par vinvin69 Voir le message
    Comment récupérer ce nombre aléatoire pour l'appliquer aux leds ? Avec un if ?
    ben non ....
    regarde mon premier lien . Par l'appel de la fonction, il retourne une donnée pseudo_aléatoire . Tu envoies cette donnée sur ton port de sortie qui allume les LEDs
    J'aime pas le Grec

  15. #14
    vinvin69

    Re : Arduino - Suite de Led

    Ca fonctionne comme ça non ?

    Code:
    long randNumber;
    const int led1v = 10;
    const int led1r = 11; 
    
    void setup(){
     
      pinMode(led1v, OUTPUT); 
      pinMode(led1r, OUTPUT); 
      pinMode(A0, INPUT); 
      
      // if analog input pin 0 is unconnected, random analog
      // noise will cause the call to randomSeed() to generate
      // different seed numbers each time the sketch runs.
      // randomSeed() will then shuffle the random function.
      randomSeed(analogRead(A0));
    }
    
    void loop() {
      // print a random number from 0 to 1
      randNumber = random(2);
      delay(5);
      
      if (randNumber != 0) {
        digitalWrite(led1v, HIGH); 
        digitalWrite(led1r, LOW);
    }
      else {
        digitalWrite(led1v, LOW); 
        digitalWrite(led1r, HIGH);
      }
    }
    Vincent A

  16. #15
    freepicbasic

    Re : Arduino - Suite de Led

    Code:
    long randNumber;
    const int led1v = 10;
    const int led1r = 11; 
    
    void setup(){
     
      pinMode(led1v, OUTPUT); 
      pinMode(led1r, OUTPUT); 
      pinMode(A0, INPUT); 
      
      // if analog input pin 0 is unconnected, random analog
      // noise will cause the call to randomSeed() to generate
      // different seed numbers each time the sketch runs.
      // randomSeed() will then shuffle the random function.
      randomSeed(5012);
    }
    
    void loop() {
      // print a random number from 0 to 1
      randNumber = random(0,1);
      delay(5);
      
      if (randNumber != 0) {
        digitalWrite(led1v, HIGH); 
        digitalWrite(led1r, LOW);
    }
      else {
        digitalWrite(led1v, LOW); 
        digitalWrite(led1r, HIGH);
      }
    }
    A+, pat

  17. #16
    vinvin69

    Re : Arduino - Suite de Led

    Je viens de tester ton code, la led connectée au pin 11 (led1r) reste constamment allumée, et l'autre reste constamment éteinte.
    Code:
     long randNumber;
    const int led1v = 10;
    const int led1r = 11; 
    
    void setup(){
     
      pinMode(led1v, OUTPUT); 
      pinMode(led1r, OUTPUT); 
      pinMode(A0, INPUT); 
      
      // if analog input pin 0 is unconnected, random analog
      // noise will cause the call to randomSeed() to generate
      // different seed numbers each time the sketch runs.
      // randomSeed() will then shuffle the random function.
      randomSeed(5012);
    }
    
    void loop() {
      // print a random number from 0 to 1
      randNumber = random(0,1);
      delay(5);
      
      if (randNumber != 0) {
        digitalWrite(led1v, HIGH); 
        digitalWrite(led1r, LOW);
    }
      else {
        digitalWrite(led1v, LOW); 
        digitalWrite(led1r, HIGH);
      }
    }

  18. #17
    DAUDET78

    Re : Arduino - Suite de Led

    Citation Envoyé par vinvin69 Voir le message
    Je viens de tester ton code, la led connectée au pin 11 (led1r) reste constamment allumée, et l'autre reste constamment éteinte.
    laisse tomber la solution analogique .
    - Avec l'entrée en l'air, c'est complétement aléatoire (au mauvais sens du terme !) comme fonctionnement
    - Avec le bruit d'une jonction, c'est une usine à gaz analogique (et il faut un oscilloscope)
    J'aime pas le Grec

  19. #18
    vinvin69

    Re : Arduino - Suite de Led

    Vous avez d'autres idées du coup ?
    Le dernier recours serait de créer une dizaine de "combinaisons" de led, et de les faire alterner, mais dans ce cas on perd tout l'interet...
    Vincent A

  20. #19
    DAUDET78

    Re : Arduino - Suite de Led

    Citation Envoyé par vinvin69 Voir le message
    Vous avez d'autres idées du coup ?
    Non, une seule ! le générateur pseudo-aléatoire
    Le dernier recours serait de créer une dizaine de "combinaisons" de led,
    C'est quoi cette nouvelle invention ?
    J'aime pas le Grec

  21. #20
    vinvin69

    Re : Arduino - Suite de Led

    Mais comment marche ce fameux générateur pseudo-aléatoire ?
    En recherchant je suis tombé sur le code donné plus haut. Eclaircissez moi Daudet ��
    Merci bien !
    Vincent A

  22. #21
    freepicbasic

    Re : Arduino - Suite de Led

    Code:
     long randNumber;
    const int led1v = 10;
    const int led1r = 11; 
    const int led2v = 12;
    const int led3r = 13; 
    
    void setup(){
     
      pinMode(led1v, OUTPUT); 
      pinMode(led1r, OUTPUT); 
      pinMode(A0, INPUT); 
      
      // if analog input pin 0 is unconnected, random analog
      // noise will cause the call to randomSeed() to generate
      // different seed numbers each time the sketch runs.
      // randomSeed() will then shuffle the random function.
      randomSeed(5012);
    }
    
    void loop() {
      // print a random number from 0 to 1
      randNumber = random(1,1024);
      
      if (randNumber & 1) {
        digitalWrite(led1v, HIGH); 
        digitalWrite(led1r, LOW);
        }
      else {
        digitalWrite(led1v, LOW); 
        digitalWrite(led1r, HIGH);
      }
    
    
      if (randNumber & 2) {
        digitalWrite(led2v, HIGH); 
        digitalWrite(led2r, LOW);
        }
      else {
        digitalWrite(led2v, LOW); 
        digitalWrite(led2r, HIGH);
      }
    
      delay(200);
    
    
    }
    A+, pat

  23. #22
    DAUDET78

    Re : Arduino - Suite de Led

    Citation Envoyé par vinvin69 Voir le message
    En recherchant je suis tombé sur le code donné plus haut.
    je ne fais plus de C depuis 2005 (c'est un voeu)...... donc je ne ferais pas ton programme

    Chaque fois que tu appelles la fonction elle te retourne une variable qui est pseudo-aléatoire. C'est tout !
    si tu as programmé la fonction (c'est possible ?) pour une valeur sur 8 bits , au bout de 256 tirages, le cycle recommence et la séquence des 256 prochains tirages seront identiques à la séquence des 256 premiers ( d'où le nom de "pseudo")

    Il y a une commande (srand ) qui permet de changer le début de la séquence de tirage. Si tu as une commande (un bouton poussoir actionné par l'utilisateur , par exemple), on peut venir lire un timer dont la valeur dépend de l'instant d'appui . cette valeur peut être utilisé dans srand pour changer la séquence
    J'aime pas le Grec

  24. #23
    vinvin69

    Re : Arduino - Suite de Led

    Merci beaucoup freepicbasic !
    Ca marche ! Merci Daudet, mais on prends le plus simple
    Juste, lorsque je place le code dans la loop, tout va bien. Par contre, dès que je le place dans le setup (pour que les leds restent "initialisés"), on perd cette aléatoirité
    Une idée de la cause ?
    Merci bien !
    Vincent A

  25. #24
    DAUDET78

    Re : Arduino - Suite de Led

    Citation Envoyé par vinvin69 Voir le message
    Une idée de la cause ?
    Je ne fais plus de Pascal, d'Assembleur, de C , de Cmachin, de Cobol, de Fortran, de Basic depuis 2005
    J'aime pas le Grec

  26. #25
    freepicbasic

    Re : Arduino - Suite de Led

    On mémorise le rnd
    ça change que au reset

    On pourrait mettre plus que 1024 ...



    Code:
     #include <EEPROM.h>
    
    long randNumber;
    const int led1v = 10;
    const int led1r = 11; 
    const int led2v = 12;
    const int led2r = 13; 
    
    byte value;
    
    void setup(){
     
      pinMode(led1v, OUTPUT); 
      pinMode(led1r, OUTPUT); 
      pinMode(A0, INPUT); 
      
      // if analog input pin 0 is unconnected, random analog
      // noise will cause the call to randomSeed() to generate
      // different seed numbers each time the sketch runs.
      // randomSeed() will then shuffle the random function.
    
      value = EEPROM.read(0);
      randNumber = value;
      value = EEPROM.read(1);
      randNumber = randNumber + ( (long) value << 8 );
      value = EEPROM.read(2);
      randNumber = randNumber + ( (long) value << 16);
      value = EEPROM.read(3);
      randNumber = randNumber + ( (long) value  << 24);
    
      randomSeed(randNumber);
      randNumber = random(1,1024);
    
      EEPROM.write(0, randNumber  & 0xFF);
      EEPROM.write(1, randNumber >> 8);
      EEPROM.write(2, randNumber >> 16);
      EEPROM.write(3, randNumber >> 24);
    }
    
    void loop() {
    
      // print a random number from 0 to 1
    //  randNumber = random(1,1024);
      
      if (randNumber & 1) {
        digitalWrite(led1v, HIGH); 
        digitalWrite(led1r, LOW);
        }
      else {
        digitalWrite(led1v, LOW); 
        digitalWrite(led1r, HIGH);
      }
    
    
      if (randNumber & 2) {
        digitalWrite(led2v, HIGH); 
        digitalWrite(led2r, LOW);
        }
      else {
        digitalWrite(led2v, LOW); 
        digitalWrite(led2r, HIGH);
      }
    
      delay(200);
    
    
    }
    A+, pat

  27. #26
    vinvin69

    Re : Arduino - Suite de Led

    Merci infiniment freepicbasic !
    Ca marche nickel. Fallait y penser..
    Encore merci,

    Vincent A

Discussions similaires

  1. Carte Arduino UNO R3 ou Arduino Mega 2560 R3 ?
    Par theoze dans le forum Électronique
    Réponses: 10
    Dernier message: 11/03/2015, 15h36
  2. Arduino anti rebond avec arduino
    Par sari12 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/10/2014, 17h04
  3. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
  4. Suite récurrente linéaire d'ordre 2 et suite intermédiaire géométrique
    Par Seirios dans le forum Mathématiques du collège et du lycée
    Réponses: 9
    Dernier message: 14/09/2008, 13h40
  5. quelle est la manipulation a suivre pour passer la suite 1 a la suite 2
    Par inviteca097788 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 30/05/2008, 23h24
Découvrez nos comparatifs produits sur l'informatique et les technologies.