Errore nella compilazione

Buongiorno a tutti, vi volevo chiedere aiuto riguardo al programma che ho scritto per il mio progetto della maturità.
il progetto tratta di un sensore a gas che attiva un buzzer, una ventola e un sensore tmp, se il tmp rileva un valore di temperatura oltre a una certa soglia manda un messaggio con la shield gsm. il programma è il seguente:
#include <GSM.h>
#define PINNUMBER "3333"

GSM gsmAccess;
GSM_SMS sms;

char remoteNumber[20]= "3423606518";

char txtMsg[200]="temperatura superiore ai 30 gradi";

int gas=0;
float T=0;//temperatura
int sensorTmp=A1;
int tmpPin=A2;
int gasPin=A0;
float const q = 1023/5.0;//quanto copnversione analogico/digitale
boolean AllarmeAttivato;
boolean gsm_inizializzazione ();
boolean Attiva_Allarme (int gas);
void sendSMS ();
void setup()
{

pinMode(A0,INPUT); //sensore gas
pinMode(8, OUTPUT); //ventola
pinMode(12, OUTPUT); //Buzzer
pinMode(A2,INPUT);//sensore di temperatura 

 }

void loop(){
Serial.begin(9600);
while(true){
 while(gsm_inizializzazione()==false){ 
   Serial.println("GSM non inizializzata, riprovo a connettermi");
 delay(500);
 }
 Serial.println("GSM inizializzata");
 
//funzione per lettura e scritturadei valori del gas e del tmp
sensorTmp=analogRead(tmpPin); //leggo il valore del sensore di temperatura
//Visualizzo la temperatura sul monitor
Serial.println(T);

gas=analogRead(gasPin); //leggo il valore del sensore di gas
//Visualizzo il valore del gas sul monitor
Serial.println("il valore del gas è:");
Serial.println(gas);
//parte di attivazione dell'allarme
AllarmeAttivato=Attiva_Allarme(gas);
//Parte gestione invio SMS
if(AllarmeAttivato==true){
sendSMS();
}
//acquisisco i dati ogni 1/2 secondo
delay(500);
}
}
void sendSMS(){//funzione da impostare se la temperatura è maggiore di 30 gradi
Serial.print("Message to mobile number: ");
 Serial.println(remoteNumber);
// testo del messaggio
 Serial.println("INVIO");
 Serial.println();
 Serial.println("Messaggio:");
 Serial.println(txtMsg);

// invio del messaggio
 sms.beginSMS(remoteNumber);
 sms.print(txtMsg);
 sms.endSMS(); 
 Serial.println("\nCOMPLETE!\n");  
}
//connessione gsm
// funzione stato della connessione
 boolean notConnected = true;

// Avvio della shiel GSM
// If your SIM has PIN, pass it as a parameter of begin() in quotes
boolean gsm_Inizializzazione(){
 while(notConnected)
 {
   if(gsmAccess.begin(PINNUMBER)==GSM_READY){
     notConnected = false;
     return(true);
   }
   else
   {
     Serial.println("Not connected");
     delay(1000);
     return(false);
   }
 }
//funzione per l'attivazione del buzzer e della ventola
boolean Attiva_Allarme(gas);{//aggiungi il delay tolto
if ( gas > 20)
{
//buzzer ON
analogWrite(12, 30); 
//attivo la ventola
digitalWrite(8, HIGH);
return(true);}
else
{
//buzzer OFF
analogWrite(12, 0);
//disattivo la ventola
digitalWrite(8, LOW);
return(false);
}
}}

Inizialmente mi dava un errore alla riga 96 dicendomi che mancava una "," o un ";" prima della parentesi "{". al che ho controllato tutte le parentsi, virgole e punti e virgola e siccome non ho trovato errori ho aggiunto il ";" richiesto prima della {. Ho compilato e mi ha detto che mancava una } alla fine di tutto il codice e dopo averla aggiunta mi ha dato "errore durante la compilazione". Riuscireste a darmi una mano? io lo st guardando da due giorni ma non riesco a trovare l'errore

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Due consigli.

  1. nel IDE usa CTRL+T che indenta meglio le cose facilitando la ricerca delle graffe che danno problemi.
  2. le graffe NON sono un fastidio. Parere mio, mooolto meglio scriverle così:
while(true)
{
  while(gsm_inizializzazione()==false)[/color]
  { 
    Serial.println("GSM non inizializzata, riprovo a connettermi");[/color]
    delay(500);
  }

Se noti l'IDE ultimo quando vai su una graffa evidenzia quella corrispondente. Se in stessa colonna facili da trovare

Ho fatto le presentazione e ho letto il regolamento, scusate se ho mancato alle regole del forum in questo post, le ignoravo;
Ti ringrazio per i consigli sull'indentazione delle parentesi. Avresti qualche suggerimento per la correzione dell'errore del mio codice? non riesco proprio a uscirne

@ssortejio: Ti è stato già detto che il codice, in conformità al REGOLAMENTO, punto 7, DEVE essere racchiuso tra i tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra), quindi ...

... devi editare il tuo primo post (in basso a destra del post, bottone More -> Modify) e racchiudere il codice all'interno dei tag CODE.

Guglielmo

ssortejio:
Inizialmente mi dava un errore alla riga 96 dicendomi che mancava una "," o un ";" prima della parentesi "{". al che ho controllato tutte le parentsi, virgole e punti e virgola e siccome non ho trovato errori ho aggiunto il ";" richiesto prima della {. Ho compilato e mi ha detto che mancava una } alla fine di tutto il codice e dopo averla aggiunta mi ha dato "errore durante la compilazione". Riuscireste a darmi una mano? io lo st guardando da due giorni ma non riesco a trovare l'errore

Per primo dacci anche tutti gli errori.

poi nella funzione boolean gsm_Inizializzazione() c'é una "}" di troppo
poi il loop() é giá una funzione che viene chiamata di continuo. non serve un "while(true)". Metti il Serial.begin nel setup() e cosí puoi toglere il while(true)

Le entrate analogiche usate come entrate analogiche non hanno bisogno di un pinMode. togliele

Il "boolean notConnected = true;" nella riga 77 é fuori da qualsiasi funzione. Questo é un errore.

riga 96: "boolean Attiva_Allarme(gas);{" nella definizione della funzione non ci va il ";"

Forse dovresti imparare meglio il linguaggio di programmazione.

Usa il notepad++ come editore impostando come linguaggio il C++. puoi visualizzare l' inizio e fine delle parentesi.

Quale Arduino stai usando?

Ciao Uwe

tipo di Arduino: Arduino UNO
errori:
"
Arduino:1.6.6 (Windows 10), Scheda:"Arduino/Genuino Uno"

sketch\gsm_ultimo.ino.cpp.o: In function `loop':

C:\Users\Marco\Desktop\gsm_ultimo/gsm_ultimo.ino:35: undefined reference to `gsm_inizializzazione()'

collect2.exe: error: ld returned 1 exit status

exit status 1
Errore durante la compilazione

"
codice:

#include <GSM.h>
#define PINNUMBER "3333"


GSM gsmAccess;
GSM_SMS sms;

char remoteNumber[20] = "3423606518";

char txtMsg[200] = "temperatura superiore ai 30 gradi";

int gas = 0;
float T = 0; //temperatura
int sensorTmp = A1;
int tmpPin = A2;
int gasPin = A0;
float const q = 1023 / 5.0; //quanto copnversione analogico/digitale
boolean AllarmeAttivato;
boolean gsm_inizializzazione ();
boolean Attiva_Allarme (int gas);
void sendSMS ();
void setup()
{

  pinMode(A0, INPUT); //sensore gas
  pinMode(8, OUTPUT); //ventola
  pinMode(12, OUTPUT); //Buzzer
  pinMode(A2, INPUT); //sensore di temperatura

}

void loop() {
  Serial.begin(9600);
  while (true) {
    while (gsm_inizializzazione() == false) {
      Serial.println("GSM non inizializzata, riprovo a connettermi");
      delay(500);
    }
    Serial.println("GSM inizializzata");

    //funzione per lettura e scritturadei valori del gas e del tmp
    sensorTmp = analogRead(tmpPin); //leggo il valore del sensore di temperatura
    //Visualizzo la temperatura sul monitor
    Serial.println(T);

    gas = analogRead(gasPin); //leggo il valore del sensore di gas
    //Visualizzo il valore del gas sul monitor
    Serial.println("il valore del gas è:");
    Serial.println(gas);
    //parte di attivazione dell'allarme
    AllarmeAttivato = Attiva_Allarme(gas);
    //Parte gestione invio SMS
    if (AllarmeAttivato == true) {
      sendSMS();
    }
    //acquisisco i dati ogni 1/2 secondo
    delay(500);
  }
}
void sendSMS() { //funzione da impostare se la temperatura è maggiore di 30 gradi
  Serial.print("Message to mobile number: ");
  Serial.println(remoteNumber);
  // testo del messaggio
  Serial.println("INVIO");
  Serial.println();
  Serial.println("Messaggio:");
  Serial.println(txtMsg);

  // invio del messaggio
  sms.beginSMS(remoteNumber);
  sms.print(txtMsg);
  sms.endSMS();
  Serial.println("\nCOMPLETE!\n");
}
//connessione gsm
// funzione stato della connessione
boolean notConnected = true;

// Avvio della shiel GSM
// If your SIM has PIN, pass it as a parameter of begin() in quotes
boolean gsm_Inizializzazione() {
  while (notConnected)
  {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
      notConnected = false;
      return (true);
    }
    else
    {
      Serial.println("Not connected");
      delay(1000);
      return (false);
    }
  }
}
  //funzione per l'attivazione del buzzer e della ventola
  boolean Attiva_Allarme(int gas) {//aggiungi il delay tolto
    if ( gas > 20)
    {
      //buzzer ON
      analogWrite(12, 30);
      //attivo la ventola
      digitalWrite(8, HIGH);
      return (true);
    }
    else
    {
      //buzzer OFF
      analogWrite(12, 0);
      //disattivo la ventola
      digitalWrite(8, LOW);
      return (false);
    }
  }

La dichiarazione dei pin analogici la tengo così il circuito risulta maggiormente comprensibile in relazione al codice, lo dovrò esporre anche a commissari esterni che magari non sanno niente a riguardo;
Il ciclo while l'ho aggiunto perché il programma si bloccava perché non ciclava correttamente;
La riga 77 serve ad inizializzare la variabile not_Connected a true;
Si, non sono una cima in programmazione, anzi, non pensavo che avrei riscontrato così tante difficoltà, vi ringrazio per la pazienza e per la disponibilità.

La dichiarazione dei pin analogici la tengo così il circuito risulta maggiormente comprensibile in relazione al codice, lo dovrò esporre anche a commissari esterni che magari non sanno niente a riguardo;

No, é proprio un errore perché attivi il pin come entrata digitale.

La riga 77 serve ad inizializzare la variabile not_Connected a true;

allora mettila sopra all'inizio dove sono le altre variabili,

"gsm_inizializzazione" é una funzione diversa dalla "gsm_Inizializzazione" devi stare attento alle lettere scritte in maiuscolo/minuscolo.

Ciao Uwe