[RESOLU] Code erreur incompréhensible

Bonjour tous le monde,
je suis actuellement bloqué sur trois codes erreur que je ne comprends pas du tout. Le premier se répète deux fois: error:statement cannot resolve address of overloaded function. J’ai essayé de chercher mais je ne trouve que des pages concernant le C++. Le deuxième à l’air de concerner une déclaration: error:‘O’ was not declared in this scope mais je n’ai aucune variable à déclarer. Enfin le troisième on me dit que j’ai oublié un point virgule alors que c’est à la fin d’une condition.
Voici le code:

#include "LiquidCrystal.h"

double coupParMinute=0.0;
double uSv=0.0;
int etatBouton=0;
int temps=0;
int impulsion=0;
int etat_geiger=0;
const int speaker=13;
int n=0;
double coupParMinuteTableau[9]={0};
const int bouton=11;
const int led=9;
const int entree_geiger=10;
const int contacteur=12;
LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
int i=0;

void setup()
{
  pinMode(entree_geiger, INPUT);
  
  
  pinMode(led,OUTPUT);  
  digitalWrite(led, LOW);
  
  pinMode(bouton, INPUT);
  digitalWrite(bouton, HIGH);
  
  pinMode(contacteur, OUTPUT);
  digitalWrite (contacteur, LOW);
  
  pinMode(speaker, OUTPUT);
  digitalWrite(speaker, LOW);
  
  
  lcd.begin(16,2);
  lcd.clear; 
  lcd.setCursor(O, O);
  lcd.print("TPE 2012-2013");
  lcd.setCursor(0, 1);
  lcd.print("Le compteur Geiger");
  delay(1000); 
  lcd.clear;
  lcd.setCursor(0,0);
  lcd.print("CPM=");
  lcd.setCursor(4,0);
  lcd.print(coupParMinute);
  lcd.setCursor(0,1);
  lcd.print("uSv/h=");
  lcd.setCursor(6,1);
  lcd.print(uSv);
}

void loop()
{
  etatBouton= digitalRead(bouton);
  if (etatBouton==HIGH)
    digitalWrite(contacteur, LOW);
  else (etatBouton==LOW) 
    digitalWrite(contacteur, HIGH);
  
  temps=millis();

  while (1000<=(millis()-temps))
    {
        n++;
        while(impulsion<=10 || (millis()-temps)<=5000)
            {
              temps=millis();
              etat_geiger=digitalRead(entree_geiger);
              if(etat_geiger==HIGH)
                impulsion++;
                digitalWrite(led, HIGH);
                digitalWrite(speaker, HIGH);
              while(entree_geiger==HIGH)
              {
                etat_geiger=digitalRead(entree_geiger);
                if(etat_geiger==LOW)
                {
                    digitalWrite(speaker, LOW);
                }
              }
            }          
        if((millis()-temps)>=2000)
            coupParMinute= impulsion/(millis()-temps);
        else
            coupParMinuteTableau[n]=10/(millis()-temps)  ;                     
      
     }
if(coupParMinute==10)
    if(n==1)
        coupParMinute=10/(millis()-temps);
    else
    {    
        coupParMinute= moyenneTableau(coupParMinuteTableau, 10);
    }

coupParMinute*=60;
uSv=coupParMinute*0,057;
}

double moyenneTableau (double tableau[], int tailleTableau)
    {
        double resultat= 0.0;
            
        for(i=0; i<tailleTableau; i++)
            {
                resultat=resultat+tableau[i];
            }
                
        resultat= resultat/i;                
        return 0;
    }

Merci d’avance à ceux qui auront pris le temps de me lire et de me répondre.

Sur cette ligne ce sont des O (lettre O) au lieu de 0 (zéro)

  lcd.setCursor(O, O);
  lcd.setCursor(0, 0);

Il manque les parenthèse à la méthode clear

  lcd.clear;
  lcd.clear();

il manque un if après le else

  if (etatBouton==HIGH){
    digitalWrite(contacteur, LOW);}
  else (etatBouton==LOW) 
    digitalWrite(contacteur, HIGH);
  if (etatBouton==HIGH){
    digitalWrite(contacteur, LOW);}
  else if(etatBouton==LOW) 
    digitalWrite(contacteur, HIGH);

Merci à toi, ça faisait un moment que je cherchais. Je pensais que le else if ne s'utilisait que lorsqu'on avait besoin d'insérer plus de choix mais en fait c'était stupide de penser comme ça du moment qu'on plasse une condition le else ne suffit plus. Merci beaucoup :)

Je pensais que le else if ne s'utilisait que lorsqu'on avait besoin d'insérer plus de choix

Le if s'emploie si on met une condition quel qu’elle soit. Mais en fait dans ce cas on peut l'écrire comme ça:

if (etatBouton==HIGH){
    digitalWrite(contacteur, LOW);}
  else 
    digitalWrite(contacteur, HIGH);

puisque la condition etaBouton==LOW est complémentaire de l'autre condition.

Pour être honnête, j'avais corrigé la ligne sans vraiment lire la condition et du coup je n'avais pas vu qu'il y avait une simplification d'écriture possible.

Ou encore :

digitalWrite(contacteur, (etatBouton==HIGH)?LOW:HIGH);

J'adore la syntaxe : Condition?SiVrai:siFaux

Bonjour,

Grag38:
Ou encore :

digitalWrite(contacteur, (etatBouton==HIGH)?LOW:HIGH);

J’adore la syntaxe : Condition?SiVrai:siFaux

Attention la priorité du “if inline” est très basse, juste au dessus de la priorité de l’opérateur =.
Dans certain cas ça peut jouer des tours, toujours mettre des parenthèses autour du “if inline” :wink:

digitalWrite(contacteur, ((etatBouton == HIGH) ? LOW : HIGH));

Dans ce cas précis c’est inutile mais c’est une bonne habitude à prendre.