Salve a tutti ho un problema con il mio codice Arduino

Salve a tutti, sono un neofita nel mondo di Arduino e sto avendo un problema a scrivere correttamente un codice. Devo far in modo che se viene rilevata una temperatura superiore ai 37.5 C° si accenda un cicalino per soli tre secondi. Ho provato ad utilizzare il ciclo if ma come immaginavo il cicalino continua a suonare fino a quando la temperatura non scende. Allego il mio codice.

int sensorPin = A0;  
float valori[10]; 


float sensorValue = 0;  
float V;
float R;
float T;
float C;
void setup() 
{
  Serial.begin(9600); 
  pinMode(7, OUTPUT);
}

void loop() 
{
  sensorValue= analogRead(0); 
  V=(5*sensorValue)/1024;                                      
  R = (5*(3900/V))-3900;                                         
  T=3470/log(R/(5000*pow(M_E,(-3470/298.15))));   
    
  C = T-273.15;

  for(int i = 0; i < 10; i++){
    valori[i] = C;
    }

    float media = 0.0;

    for(int i = 0; i < 10; i++){
    media += valori[i];
    }

    media = media/10.0;

    p==0;

  Serial.println(media );

  delay(500);
 
 
  
}
  


  void allarme(){

    digitalWrite(7, HIGH);
    delay(500);
    digitalWrite(7, LOW);
    delay(500);

Buongiorno e benvenuto :slight_smile: ,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra) e NON in quelli per le tabelle.

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:

Ci sono prima ancora delle cose che dovresti rivedere...

Intanto abituati ad indentare correttamente il codice oltre a commentare. Come diciamo sempre, non è per "estetica" ma per migliorare la leggibilità del codice, sia per te (soprattutto per programmi ben più grandi di questo, ma anche per quando devi rivedere un tuo codice a distanza di mesi) sia per noi (se dobbiamo aiutarti, almeno facilitaci il compito...). Per farlo, inizia premendo Ctrl-T nell'IDE e te lo sistema lui. Poi togli le righe vuote inutili (per separare blocchi di codice basta UNA riga vuota, sempre per questioni di migliore leggibilità).

Veniamo al codice. Tu leggi un valore dal sensore (tralascio i calcoli...) che poi metti in un array "valori[10]" dal quale calcoli la media. Peccato che nell'array tu stai mettendo lo STESSO valore per cui è inutile l'array così come il calcolo della media. O fai varie letture, distanziate da un certo tempo, oppure fai la lettura e metti quella come ultimo elemento dell'array, "spostando" quelli precedenti, e calcolando su questi la media.

Poi il tuo codice che hai postato è apparentemente incompleto, la funzione "allarme()" termina brutalmente senza alcuna graffa (e comunque la funzione non la chiami da nessuna parte del resto del codice).

Per semplificare le cose, intanto lascia stare il suono, fai scrivere sulla seriale una stringa (es. "ALLARME" seguito dalla temperatura media rilevata). Per evitare di farlo ripetere ad ogni loop, crea una variabile (ad esempio "bool InAllarme = false;") e quando rilevi l'allarme, ossia il superamento del valore di soglia, scrivi "ALLARME" solamente se la variabile "InAllarme" è "false", quindi la imposti a "true". Se invece la media è inferiore alla soglia imposteri a "false" questa variabile.

Spero che sia tutto chiaro, ma prova a scrivere il codice seguendo questi consigli e postalo nuovamente in caso di problemi così ti possiamo dire dove sbagli.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.