Errore di compilazione con if

scusate ma dove risiede l’errore di compilazione(credo sia una cosa banale)

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

#define LED 2  // LED collegato al pin digitale 13  
#define BUTTON 7              // pin di input dove è collegato il pulsante  
int val = 0;                  // si userà val per conservare lo stato del pin di input  
int stato = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso  
  
void setup() {  
  mySerial.begin(9600); // setto la comunicazione seriale
 Serial.println("ok go");  //scrivo sul monitor seriale
   delay(1000);
  pinMode(LED, OUTPUT);       // imposta il pin digitale come output  
  pinMode(BUTTON, INPUT);     // imposta il pin digitale come input  
}  
  
void loop() 
if (mySerial.available()>0)  
  {
  while (mySerial.available())
  {
    char dato = mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
    switch (dato)
    {
      case 'A': // Se ricevo la lettera A,     
        {
          digitalWrite(2, LOW); // attivo il relè collegato al pin12
          mySerial.println("Relè 1 ON");
          break;
        }  
  val = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva  
  
  // controlla che l'input sia HIGH (pulsante premuto)  
  // e cambia lo stato del led  
  if (val == HIGH) {  
    stato = 1 - stato;  
  }   
  
  if (stato == 1) {  
    digitalWrite(LED, HIGH);   // accende il led  
  }  
  else {  
    digitalWrite(LED, LOW);    //spegne il led  
  }
  1. le graffe nei vari case NON richiedono graffe ed anzi portano ad errori su quel break che non ti stò a spiegare (lggi un libro di C); il break; chiude il case
 case 'A': // Se ricevo la lettera A,     
          digitalWrite(2, LOW); // attivo il relè collegato al pin12
          mySerial.println("Relè 1 ON");
          break;
  1. ogni graffa aperta necessita di graffa chiusa. Abbasso il codice scritto con le graffe aperte a fondo riga, abituati a scrivere così:
if(test1) 
{ if(test2)
  { 
    comando;
  }
}

come vedi in colonna le graffe relative, facili da vedere
3. usa CTRL+T nell IDE che ti aiuta con le graffe.

Hai ragione sono a corto di basi.Ultima richiesta se dovessi associare piu' output con una unica variabile come si dovrebbe fare?

ais26:
Hai ragione sono a corto di basi.Ultima richiesta se dovessi associare piu’ output con una unica variabile come si dovrebbe fare?

Non ho capito la domanda.

hai ragione...provo a spiegarmi

nel mio codice ho usato questo: #define BUTTON 7
in seguito nel setup imposto 7 come output. Se io volessi dire che button deve essere usato per le uscite 7,8,9.Come si dovrebbe scrivere?

comunque l'errore del compilatore è il seguente: error: expected initializer before 'if'
riguarda le graffe?

Si, il compilatore va nel pallone, manca la graffa di apertura della loop() ed in verità manca anche la chiusura

void loop() 
{
...
}

ais26:
hai ragione…provo a spiegarmi

nel mio codice ho usato questo: #define BUTTON 7
in seguito nel setup imposto 7 come output. Se io volessi dire che button deve essere usato per le uscite 7,8,9.Come si dovrebbe scrivere?

Quindi hai 3 button ? Duplichi tutto quello che riguarda BUTTON (anzi triplichi) magari dando un nome con un numero,
BUTTON1, BUTTON2 e BUTTON3

nid69ita:
Si, il compilatore va nel pallone, manca la graffa di apertura della loop() ed in verità manca anche la chiusura

void loop() 

{

}

Non solo, ne apri 7 e ne chiudi solo 4
Ciao Uwe

grazie mille