Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino] Problème (temporisation?)

    24 mai 2018 à 0:36:49

    Salut à tous !

    J'ai un petit soucis avec mon Arduino Mega 2560, j'ai téléversé le programme exemple Button et quand je relache le bouton il y a un temps de 3-4 secondes avant que la lumière s'éteigne. Je n'ai pas modifié beaucoup le programme si ce n'est que j'ai rajouté 4 boutons supplémentaires configurés comme le premier, mais je doute que le problème vienne du code que voici : 

    const int computerPin = 2;
    const int phonePin = 3;
    const int channelPin = 4;
    const int screenPin = 5;
    const int LEDsPin = 6;
    
    const int computer =  7;
    const int phone =  8;
    const int channel =  9;
    const int screen =  10;
    const int LEDs =  11;
    
    
    int computerState;
    int phoneState;
    int channelState;
    int screenState;
    int LEDsState;
    
    void setup() {
      pinMode(computer, OUTPUT);
      pinMode(computerPin, INPUT);
    
      pinMode(phone, OUTPUT);
      pinMode(phonePin, INPUT);
    
      pinMode(channel, OUTPUT);
      pinMode(channelPin, INPUT);
    
      pinMode(screen, OUTPUT);
      pinMode(screenPin, INPUT);
    
      pinMode(LEDs, OUTPUT);
      pinMode(LEDsPin, INPUT);
    }
    
    void loop() {
      computerState = digitalRead(computerPin);
    
      if (computerState == HIGH) {
        digitalWrite(computer, HIGH);
      } else {
        digitalWrite(computer, LOW);
      }
    
      phoneState = digitalRead(phonePin);
    
      if (phoneState == HIGH) {
        digitalWrite(phone, HIGH);
      } else {
        digitalWrite(phone, LOW);
      }
    
      channelState = digitalRead(channelPin);
    
      if (channelState == HIGH) {
        digitalWrite(channel, HIGH);
      } else {
        digitalWrite(channel, LOW);
      }
    
      screenState = digitalRead(screenPin);
    
      if (screenState == HIGH) {
        digitalWrite(screen, HIGH);
      } else {
        digitalWrite(screen, LOW);
      }
    
      LEDsState = digitalRead(LEDsPin);
    
      if (LEDsState == HIGH) {
        digitalWrite(LEDs, HIGH);
      } else {
        digitalWrite(LEDs, LOW);
      }
      delay(10);
    
    }

    Voilà, si quelqu'un pouvais m'éclairer ça serait top :D

    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2018 à 12:37:21

      As tu pensé à mettre la résistance de pull-up ou pull-down sur ton bouton ???

      Si ce n'est pas le cas, quand ton bouton est relâchée, la pin se retrouve dans le vide, sans rien pour imposer un état logique.

      L'état de celle-ci n'étant pas imposée, elle va probablement garder le dernier état qu'elle avait.

      Mais il se peut aussi qu'elle change d'état aléatoirement étant donné que le fil qui va jusqu'à bouton sert d'antenne pour toutes les ondes radio du coin.

      -
      Edité par lorrio 24 mai 2018 à 12:37:40

      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2018 à 12:40:29

        Salut,

        tout d'abord je suppose que ton problème est due au temps de réponse de ton arduino envers ton appuis sur un des bouton.

        pour cela je vais t'expliqué ton code (d'un point de vue temporel) puis te donné des pistes de solutions

        1- le code que tu as fonctionne en "scrutation", c'est à dire qu'il attend que tu soit sur la ligne de code correspondante pour prendre en compte ton action. aussi ton code contient une tempo ("delay(10);") cette instruction ralenti la boucle et donc la capacité à ton programme à réagir vite. Enfin ton programme à un agencement que l'on appelle "tâches à tâches", c'est à dire qu'il lit une entré, l’exécute, et écrit une sortie (sauf qu'il le fait d'une tache à une autre, et non simultanément).

        2- pour remédier à ton problème, deux architecture :

        en fait il faut que tu enlève le "delay(10);" ca t'aidera déjà bien

        2.1- Architecture automate

        -> tu lit toute les entrées

        -> tu exécute les calcul

        -> tu écrit toute les sortie

        exemple (code non fonctionnel, juste pour architecture) : 

        void loop(){

           val1=readdigital(pin1);

           val2=readdigital(pin2);

           val3=val1&val2;

           writedigital(val3);

        }

        2.2- Architecture par interuption

        -> tu exécute les calcul

        -> tu écrit toutes les sortie

        -> tu change les variable dès qu'un changement survient  sur une ou plusieures entrée

        exemple (code non fonctionnel, juste pour architecture) : 

        interupt I_O_1(){

            val1=readdigital(pin1);

        }

        interupt I_O_2(){

           val2=readdigital(pin2);

        }

        void loop(){

           val3=val1&val2;

           writedigital(val3);

        }

        si tu as des question n'hésite pas

        bon courrage

        • Partager sur Facebook
        • Partager sur Twitter

        [Arduino] Problème (temporisation?)

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown