Exécuter une commande

Bonjour, je ne sais pas comment faire pour que si au bout de 20 fois l'Arduino obtient l'état 0 il exécute un serial.print.(c'est un Arduino Uno)

Merci de votre aide.

int etatInterrupteur;
void setup() {

  Serial.begin(9600);
  pinMode(2, OUTPUT);
}

void loop() {

  Serial.println(digitalRead(A0));
  delay(500);
  etatInterrupteur = digitalRead(A0);
  if ( etatInterrupteur == LOW ) {

Et si à chaque fois que l'arduino voit 0 il incrémentait une variable jusqu'à ce qu'elle contienne 20?

Merci de votre réponse.
Quelle serait cette variable ?

Une que vous déclarez en variable globale...byte compteur; // limité pour compter entre 0 et 255 au max, si vous voulez plus prendre un unsigned int ou unsigned long

Dans le if vous l'incrémentez, et testez sa valeur. Si c'est plus de 20 alors vous imprimez et remettez le compteur à zéro

si var1== 0 alors compteur++ fin si

si compteur ==20 Serial.println //alors faire ce que tu as besoin compteur == 0; //remise a zero du compteur fin si....

Merci de vos réponses. Alors le programme ressemblerait à ça :

int etatInterrupteur;
int compteur;
void setup() {

  Serial.begin(9600);
  pinMode(2, OUTPUT);
}

void loop() {

  Serial.println(digitalRead(A0));
  delay(500);
  etatInterrupteur = digitalRead(A0);
  if ( etatInterrupteur == LOW ); 
  then;
  byte compteur++;
  end if;
  if (compteur ==20);
  Serial.println(Alerte);
  Compteur ==0;  
{
[\code]

Dans le principe c’est bon mais l’arduino se code en C et pas en basic donc il va falloir revoir la syntaxe

Et attention au [color=red]byte [/color]compteur++; il ne faut pas redéfinir la variable compteur dans la loop mais utiliser une variable globale (lire des notions sur la portée des variables)

Pour la syntaxe pouvez vous me corriger et sinon la modification est bonne ?

int etatInterrupteur;
int compteur;
void setup() {

  Serial.begin(9600);
  pinMode(2, OUTPUT);
}

void loop() {

  Serial.println(digitalRead(A0));
  delay(500);
  etatInterrupteur = digitalRead(A0);
  if ( etatInterrupteur == LOW ); 
  then;
  int compteur;
  compteur++;
  end if;
  if (compteur ==20);
  Serial.println(Alerte);
  Compteur ==0;  
{
[\code]

il ne faut pas forcement des ; à chaque fin de ligne lire la syntaxe du "si" --> if (condition) {excuté si vrai} else {exécuté si faux}

Vous n'avez clairement pas lu le lien que je vous donne ci dessus pour la notion de déclaration des variables et portées des variables..

A ce niveau là le mieux est de commencer par le début et d'aller voir un petit cours de base

Tant que vous ne maitrisez pas la syntaxe, ce sera frustrant et vous n'obtiendrez pas d'aide ici si vous ne faites pas un minimum d'efforts. Passez donc un peu de temps là dessus,enuite vous pourrez vous attaquer à plus compliqué

C'est mieux ?

nt etatInterrupteur;
int compteur;
void setup() {

 Serial.begin(9600);
 pinMode(2, OUTPUT);
 }

 void loop() {

  Serial.println(digitalRead(A0));
  delay(500);
  etatInterrupteur = digitalRead(A0);
  if ( etatInterrupteur == LOW ); 
  {
  then
  int compteur;
  byte compteur++
  end if
  if (compteur ==20)
  Serial.println(Alerte)
  Compteur ==0;  
  }

Dans le post #6 je t'ai mis un lien vers la doc du if il faudrait peut-être le lire.

Excusez moi je n'avais bien compris. J'en suis arriver à ce programme mais lors de la compilation il est faux.

int etatInterrupteur;
byte compteur;

void setup() {

  Serial.begin(9600);
  pinMode(2, OUTPUT);
}

void loop() {

  Serial.println(digitalRead(A0));
  delay(500);
  etatInterrupteur = digitalRead(A0);
}
  if ( etatInterrupteur == LOW )
  {
    compteur++;
  }
  if ( compteur == 20 )
  {
    Serial.println("Alerte");
  }

Ettoz: mais lors de la compilation il est faux.

C'est à dire?

Il faudrait penser à remettre compteur à zéro lorsqu'il atteint 20

Voilà les messages d'erreurs :

Prgm:16: error: expected unqualified-id before 'if'

if ( etatInterrupteur == LOW )

^

Prgm:20: error: expected unqualified-id before 'if'

if ( compteur == 20 )

^

exit status 1 expected unqualified-id before 'if'

faites ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement et postez nous le code qui vous pose soucis

autant pour moi, pour la remise a zero du compteur c'est compteur = 0; et non pas compteur == 0;

de plus tu as une accolade mal placer au dessus de ton premier if...

mais il faut la deplacer tout a la fin de ton programme...

void loop {

if (...){

... ... } if (...){ ... ... } } je penses que ca marchera mieux.

Le code fonctionne juste des erreurs de syntaxe.

int etatInterrupteur;
byte compteur;

void setup() {

  Serial.begin(9600);
  pinMode(2, OUTPUT);
}

void loop() {

  Serial.println(digitalRead(A0));
  delay(500);
  etatInterrupteur = digitalRead(A0);
  if ( etatInterrupteur == LOW )
  {
    compteur++;
  }
    if ( compteur == 20 )
    {
      Serial.println("Alerte");
      compteur == 0;
  }
}

pour faire un peu plus "propre"

const byte niveauAlerte = 20; // c'est plus pratique d'avoir une constante en début de programme avec un joli nom
byte etatInterrupteur;
byte compteur;

void setup() {
  Serial.begin(115200); // pas la peine d'aller lentement, passez la console à 115200
}

void loop() {
   etatInterrupteur = digitalRead(A0); // pourquoi prendre une pin analogique si c'est pour faire un digitalRead?
   Serial.println(etatInterrupteur);

   if ( etatInterrupteur == LOW )  {
      if ( ++compteur >= niveauAlerte )  { // ++compteur pré-incrémente puis effectue la comparaison
         Serial.println(F("Alerte!!")); // la macro F("") va économiser de la RAM en mettant la chaîne dans l'espace programme
         compteur = 0;
      } // fin si compteur atteint 20
      delay(500); // on va attendre que s'il est LOW
   } // fin si interrupteur LOW
}