Partage
  • Partager sur Facebook
  • Partager sur Twitter

Multi analogique arduino

Sujet résolu
    25 octobre 2019 à 15:41:00

    Bonjour

    Je voudrais savoir si il est possible de lire plusieurs PIN analogique car avec mon code (ci dessous) cela ne marche pas

    /* Photocell simple testing sketch.
    Connect one end of the photocell to 5V, the other end to Analog 0.
     Then connect one end of a 10K resistor from Analog 0 to ground
    For more information see http://learn.adafruit.com/photocells */
    
    const int photocellPin = A0; // the cell and 10K pulldown are connected to a0
    int photocellReading; // the analog reading from the analog resistor divider
    const int eauPin = A1; // the cell and 10K pulldown are connected to a0
    int eauReading; // the analog reading from the analog resistor divider
    
    void setup(void) {
    
      // We'll send debugging information via the Serial monitor
      pinMode(1,OUTPUT);
      pinMode(2,OUTPUT);
     
    }
    
    void loop(void) {
     
        photocellReading = analogRead(photocellPin);
      // We'll have a few threshholds, qualitatively determined
          if (photocellReading <= 700){ 
          digitalWrite(1, HIGH);
    
            }else {
          digitalWrite(1, LOW);}
         eauReading = analogRead(eauPin);
          if (eauReading<10){
            digitalWrite(2, HIGH);
    
          }else{
            digitalWrite(2,LOW);
            }
            
          
    }
         
    
             

    Merci pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2019 à 11:08:31

      Bonjour,

      oui bien sûr il est possible de lire plusieurs entrées analogiques.

      Le programme ne semble pas incorrect.

      • Partager sur Facebook
      • Partager sur Twitter
        27 octobre 2019 à 17:05:02

        Je cherche depuis 2 jour pas moyen de trouver ou est le probleme a tu une idée ?

        • Partager sur Facebook
        • Partager sur Twitter
          27 octobre 2019 à 17:28:05

          Il faudrait mesurer la tension entre 0v et l'entrée A0 puis A1 pour voir ce que l'on a
          • Partager sur Facebook
          • Partager sur Twitter
            27 octobre 2019 à 17:32:16

            Bonjour,

            Comme il n'y a qu'un ADC/CAN partagé sur plusieurs canaux, il faut lire 1 fois pour rien après un changement de canal parce qu'il faut un certain temps pour que la valeur de la tension se stabilise (il y existe des ADC sans latence qui évitent d'avoir à faire ça, mais ce n'est pas le cas sur l'arduino).

            Ca peut aussi aider de lire plusieurs valeurs et de faire la moyenne.

            • Partager sur Facebook
            • Partager sur Twitter
              28 octobre 2019 à 21:47:13

              Peut-tu si tu a le temps m'envoyer un code permettant de faire ce que tu dit alexisdm ?

              ps:je suis débutant

              • Partager sur Facebook
              • Partager sur Twitter
                29 octobre 2019 à 14:20:13

                Sans faire la moyenne, il suffit d'appeler analogRead avec la broche, mais de ne pas utiliser le résultat:

                void loop(void) {
                    analogRead(photocellPin); // ignore cette lecture (changement de canal)
                    photocellReading = analogRead(photocellPin);
                    // We'll have a few threshholds, qualitatively determined
                    if (photocellReading <= 700) {
                        digitalWrite(1, HIGH);
                    } else {
                        digitalWrite(1, LOW);
                    }
                    analogRead(eauPin); // ignore cette lecture (changement de canal)
                    eauReading = analogRead(eauPin);
                    if (eauReading<10) {
                        digitalWrite(2, HIGH);
                    } else {
                        digitalWrite(2,LOW);
                    }
                }

                En faisant la moyenne et pour éviter de réécrire plusieurs fois le même code, il vaut mieux écrire une fonction:

                /** 
                 * Lit la tension présente sur la broche analogique
                 * en faisant la moyenne de plusieurs valeurs.
                 * 
                 * @param pin Broche analogique à lire.
                 * @param nombreLecture Nombre de valeurs à lire pour la moyenne (par défaut 10)
                 * @param ignorePremiereValeur ignore la première valeur en cas de 1ère lecture 
                 *                             après un changement de canal (par défaut oui).
                 */
                int analogReadMoyenne(int pin, unsigned nombreLecture = 10, bool ignorePremiereValeur = true) {
                  if(ignorePremiereValeur) 
                    analogRead(pin);
                  unsigned long resultat = 0;  
                  if(nombreLecture == 0) 
                    nombreLecture = 1;
                  for(unsigned i = 0; i < nombreLecture; ++i) {
                    resultat  += analogRead(pin);
                  }
                  return resultat / nombreLecture;
                }
                
                void loop(void) {    
                    photocellReading = analogReadMoyenne(photocellPin);
                    // We'll have a few threshholds, qualitatively determined
                    if (photocellReading <= 700) {
                        digitalWrite(1, HIGH);
                    } else {
                        digitalWrite(1, LOW);
                    }
                    
                    eauReading = analogReadMoyenne(eauPin);
                    if (eauReading<10) {
                        digitalWrite(2, HIGH);
                    } else {
                        digitalWrite(2,LOW);
                    }
                }



                • Partager sur Facebook
                • Partager sur Twitter
                  29 octobre 2019 à 18:33:06

                  merci ça a fonctionner mais je voudrais aussi savoir si il est possible de donner une instruction a la sortie 3.3V (du genre envoye le courant,attend 1sec, arrête d'envoyer le courant) Si oui je peux faire comme (C'est pour alimenter un petit moteur 3V)

                  Merci de votre aide

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 octobre 2019 à 21:48:27

                    Tu dois passer par un transistor bipolaire ou mosfet pour l'alimenter et une diode pour protéger le transistor du pic de tension négative généré par le moteur lors de l'arrêt.

                    Tu peux suivre ce cours qui traite justement du contrôle d'un moteur par l'arduino: https://eskimon.fr/tuto-arduino-601-le-moteur-%C3%A0-courant-continu#le-bon-transistor

                    PS: Je viens seulement de remarquer que tu avais utilisé la broche 1 comme sortie. Les broches 0 et 1 servent pour le port série de l'arduino qui sert notamment à la programmation de celui-ci, donc il vaut mieux éviter de les utiliser pour une autre fonction tant que tu as d'autres broches disponibles.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Multi analogique arduino

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown