Parlons Arduino > Débuter

faire du comptage

<< < (2/4) > >>

dudule:
comme un Âne que je suis ! 12v sur une entrée
mais bon en recommandent un module uno j'ai aussi commander  un 328 PU P des fois que la platine arduino n'ai rien ( on peu rêver  :-[ ) j'en profite pour faire voir ce que j'essais de faire pour que quand je compte deux passages de la loco sur un capteur appelé loco la led s'allume . mais bon ce n'est pas gagné .


--- Code: ---const int loco=2;
# define led 4

int locoPushCounter = 0;
int locoState = 0;
int lastlocoState= 0;

void setup() {
 // affectation des pins , entrée/sortie
 pinMode ( loco, INPUT);
 pinMode (led , OUTPUT);
 
}

void loop() {
  locoState= digitalRead (loco);
  if ( locoState ! = last locoState) {
  if (locoState == HIGH)
    locoPushCounter ++;}
    delay (30);
    lastlocoState= locoState ;
  if (locoPushCounter % 2==0){
     digitalWrite (led , HIGH);
}
  else {
    digitalWrite ( led LOW);
}
}

--- Fin du code ---

DDEFF:
Disons que, même si Arduino ignore les blancs, il faut quand même un minimum de règles :
Exemple :
1°) quand tu écris last locostate, et bien, là, il cherche last et ne le trouve pas.
Il faut impérativement mettre lastlocoState, tout collé, puisque c'est cette variable que tu as définie.
2°)   ! =    n'a aucun sens. Par contre !=, lui, a un sens. Il ne faut pas de blanc.

Voilà ce que j'ai modifié. Je suis adepte d'une notation claire, aérée, à base d'accolades bien visibles. ça prend plus de place, c'est sûr.
Dis-moi si ça marche. Au moins, ça compile.

--- Code: ---const int loco = 2;
# define led 4
int locoState = 0;
int lastlocoState = 0;
int locoPushCounter = 0;

void setup()
{
    // affectation des pins , entrée/sortie
    pinMode (loco, INPUT);
    pinMode (led, OUTPUT);
}

void loop()
{
    locoState = digitalRead(loco);
    if ( locoState != lastlocoState)
    {
        if (locoState == HIGH)
        {
            locoPushCounter ++;
        }
        delay(30);
        lastlocoState = locoState;
        if (locoPushCounter % 2 == 0)
        {
            digitalWrite (led, HIGH);
        }
        else
        {
            digitalWrite (led, LOW);
        }
    }
}

--- Fin du code ---

dudule:
merci DDEFF
effectivement écrit comme çà il compile j'avais également un problème d'accolades
à l'avenir je vais suivre ton conseil et écrire plus séparé ( reporter les accolades au début de la ligne suivante ) c'est vraiment plus clair  ;)
A+
je devrais pouvoir vérifier en début de semaine la poste m'indique que le colis sera livré lundi je donne des nouvelles dès que les tests sont fait

dudule:
bonjour DDEFF
bon le comptage c'est OK .
autre problème je veux que la mise à zéro de deux entrées déclenche la mise à un de plusieurs sorties simultanément ,pour ce faire j'ai écrit cela(voir ci dessous) mais çà ne fonctionne pas ,pourrais tu  me donner ton avis

void loop() {            //au début les 2 aiguilles sur voie 1, les signaux marquent le rouge et les zones d'arrêt sont alimentées
 
 
if
 (( dza1,LOW)&&(dza2,LOW))           //pas de train en gare//
 {
 digitalWrite  ( aigeD,HIGH),(aigsD,HIGH),( SV1r,HIGH ), ( SV2r,HIGH ),(AZAv1,HIGH), ( AZAv2,HIGH);
 delay (100);
 digitalWrite  ( aigeD,LOW),(aigsD,LOW);

                                         
 }
 }

Thierry:
Voilà ce même code reformaté et corrigé. Le format est important. Je ne veux pas faire le lourd et ajouter à ce que DDEFF a déjà dit mais.... Si, je vais le faire quand même ! :)
C'est un peu comme une lettre manuscrite: si tu mets toutes les lettres accolées, pas d'espaces ou au milieu des mots, des majuscules n'importe où, des sauts de lignes intempestifs, et une ponctuation hétéroclite,il est fort probable que le destinataire pourra déchiffrer le texte mais il lui faudrait beaucoup de temps et d'efforts, et une partie du fond du message serait sans doute perdue.
Le compilateur C qui est derrière l'IDE ne se préoccupe certes pas des espaces et des sauts de lignes, s'ils ne sont pas au milieu des symboles (voir le 'last' plus haut...), mais celui qui relit, si, parce que le format aide à comprendre la structure du programme et ce qu'à voulu faire l'auteur. Ne pas oublier aussi qu'aujourd'hui tu es cet auteur et que tu comprends aisément ton code, même mal écrit, mais demain tu redeviendras un lecteur qui ne se rappelle plus ce qu'il a fait à l'époque et tentera de redécouvrir le pourquoi du comment de chaque terme du programme...
D'autre part, si tu ne dis pas dans le teste quelle fonction est appelée, ça ne risque pas de marcher.
enfin, une fonction ne peux pas recevoir une liste de liste d'arguments. Il faut l'appeler plusieurs fois.

Mais ne t'inquiètes pas, ça va rentrer ! ;);)



--- Code: ---void loop()             //au début les 2 aiguilles sur voie 1, les signaux marquent le rouge et les zones d'arrêt sont alimentées
{
   if (digitalRead(dza1) == LOW && digitalRead(dza2) == LOW)           //pas de train en gare//
   {
      digitalWrite(aigeD, HIGH);
      digitalWrite(aigsD, HIGH);
      digitalWrite(SV1r, HIGH);
      digitalWrite(SV2r, HIGH)
      digitalWrite(AZAv1, HIGH)
      digitalWrite(AZAv2, HIGH);

      delay (100);
      digitalWrite(aigeD, LOW)
      digitalWrite(aigsD, LOW);                                         
    }
 }
--- Fin du code ---

Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique