Programmazione sensore ecg

Buongiorno a tutti, sono nuovo spero di scrivere nel posto giusto, in caso contrario mi scuso con i moderatori.
Ho iniziato da poco ad usare arduino. Ho iniziato un progettino per un regalo di natale. Il progetto consiste in un ecg con arduino nano e un sensore di battito AD8232 e un buzzer per arduino che suona quando non rileva il battito. Fino a qua tutto bene. Ora ho provato a scrivere il programma in modo che il buzzer suona solo dopo tot secondi che non rileva il battito ma il buzzer non suona mai...vi scrivo qui sotto il programma se qualcuno mi può dire dove ho sbagliato .

int buzzer = 12;     //buzzer connesso al pin 12
unsigned long previousMillis = 0;
unsigned long AvviaAllarme = 0;
const long interval = 1000;
unsigned long currentMillis = 0;
int ToneState = LOW;

void setup() {
 pinMode(10, INPUT);
 pinMode(11, INPUT);
 pinMode(buzzer, OUTPUT);
}

void loop() {
 currentMillis = millis();
 Serial.begin(9600);
 if ((digitalRead(10) == 1) || (digitalRead(11) == 1)) {
   Serial.println("Gagal");
   digitalWrite(LED_BUILTIN, HIGH);
   AvviaAllarme++;
 } else {
   Serial.println(analogRead(A1));
   AvviaAllarme = 0;
   digitalWrite(LED_BUILTIN, LOW);
 }
 delay(100);
 Serial.end();
 delay(100);
 if (AvviaAllarme >= 5000) {
   Beep();
 }
}

void Beep() {
 if (currentMillis - previousMillis >= interval) {
   if (ToneState == LOW) {
     ToneState = HIGH;
     tone(buzzer, 1000, 200);
   } else {
     noTone(buzzer);
     ToneState = LOW;
   }
   previousMillis = currentMillis;
 }
}

Benvenuto !
Essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… 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 ... Grazie. :slight_smile:

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell'apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

>Okrimer89: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post iniziale (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).

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

gpb01:
>Okrimer89: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post iniziale (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).

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

Ok provvedo

... e se scrivevi "ok, provvedo" senza riportare tutto il testo capivamo benissimo ugualmente!

La prossima volta non "riscrivo tutto" . Potresti aiutarmi?

È molto semplice: ogni volta che arriva un impulso, prendi il tempo con millis(), ad esempio: t=millis(); poi, con un if, se millis()-t>tempo_massimo, suona l'allarme.

Dove ho sbagliato nel mio sketch? Scusatemi ma ho iniziato ad avvicinarmi a questo mondo da pochissimo e idem ad usare arduino quindi chiedo scusa se risulto "ignorante" in materia

Secondo me nel tuo codice c'è che la variabile avviaAllarme non arriva mai al valore di 5000 o superiore, forse viene eseguito l'else e azzera la variabile prima di arrivare a 5000.

torn24:
Secondo me nel tuo codice c'è che la variabile avviaAllarme non arriva mai al valore di 5000 o superiore, forse viene eseguito l'else e azzera la variabile prima di arrivare a 5000.

Provo ad abbassare la variabile quindi?

Secondo me devi vedere se gli input dei pin avvengono per il tempo necessario. Se tutti e due i pin sono a zero prima che la variabile raggiunga 5000, viene eseguito l'else e riporta a zero la variabile.

Okrimer89:
Dove ho sbagliato nel mio sketch?

Tu stai facendo due controlli "temporali", ed evidentemente qualcosa non funziona!
imho hai bisogno solo di un "timer", che controlli ad ogni giro di loop.
Cerco di spiegarmi e spero sia corretto :slight_smile:

Se non c'è attività, fai partire un timer, solo se non è già partito
SE inizio_inattivita==0, inizio_inattivita = millis()
se c'è attività, azzeri il timer
inizio_inattivita==0

alla fine del loop controlli se il tempo di inattività è superiore all'intervallo che hai deciso, se si, suoni

Prova e facci sapere

Federico

Ok risolto grazie ai vostri consigli :slight_smile: gentilissimi la variabile avvia allarme era troppo alta ora va. Grazie ancora

Non è molto più semplice prendere il tempo a ogni impulso e azionare l'allarme se il tempo trascorso dall'ultimo impulso supera il valore impostato?...

Si solo che come ho scritto ho appena iniziato ad usare arduino quindi gran parte dello sketch l ho preso da vari spunti su internet quindi non saprei come cambiare il tutto

Se volessi aggiungere un led che accompagna il buzzer lampeggiando come dovrei fare?

Okrimer89:
Si solo che come ho scritto ho appena iniziato ad usare arduino quindi gran parte dello sketch l ho preso da vari spunti su internet quindi non saprei come cambiare il tutto

Però se mai provi, mai impari :wink:

Forse dovresti iniziare con lo studiare un po' di programmazione; ad esempio QUESTO e QUESTO sono un ottimo inizio.

Comunque nel mio post #11, c'è tutto quello che ti serve per provare almeno un'alternativa.

Federico

Okrimer89:
Se volessi aggiungere un led che accompagna il buzzer lampeggiando come dovrei fare?

Non posso che ribadire che ti serve studiare un po', prima di avventurarti in progetti leggermente più complessi!

Prova a realizzare gli esempi Blink presenti tra gli esempi nell'IDE. oppure li trovi qui, dove ci sono anche gli schemi.

Federico