rilevatore per interni, problema con sketch

Buonasera, sono uno studente che frequenta l'ultimo anno delle superiori e mi sto occupando del mio progetto d'esame. Si tratta di un rilevatore di interni con sensore di gas, shield Grove e un led RGB per segnalare la presenza o meno di gas nell'aria.
Il punto è che non riesco a capire l'ultima parte del codice poichè da tempo, a scuola, abbiamo abbandonato il linguaggio C per dedicarci ai pic.

ISR(TIMER1_OVF_vect)
{
if(airqualitysensor.counter==61)//set 2 seconds as a detected duty
{

airqualitysensor.last_vol=airqualitysensor.first_vol;
airqualitysensor.first_vol=analogRead(A0);
airqualitysensor.counter=0;
airqualitysensor.timer_index=1;
PORTB=PORTB^0x20;
}
else
{
airqualitysensor.counter++;
}
}

Ringrazio in anticipo chi potrà fornirmi una risposta!

Buongiorno e benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (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 il su citato REGOLAMENTO ...

... poi, fatto questo, in conformità al suddetto regolamento, punto 7, devi editare il tuo primo post (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).

Grazie,

Guglielmo

... vedo che NON hai letto con attenzione il REGOLAMENTO dato che hai fatto NON uno, ma ben DUE post duplicati (cross-posting, punto 7) inerenti a questo stesso argomento !!!

Entrambi i post, come da regolamento, sono stati cancellati. Continua quindi la tua discussione in questo thread che hai aperto inizialmente fornendo tutti i dettagli e facendo quello che ti ho chiesto qui solpra relativamente al pezzo di codice che hai messo.

Grazie,

Guglielmo

Va bene, ho capito. Cortesemente sto aspettando una risposta, e vi pregherei di darmi una mano perchè il tempo stringe. Grazie e buona giornata

NO, non hai capito visto che NON hai corretto il tuo primo post come richiesto nel mio post #1 !!!

Guglielmo

fffffasr:
... sto aspettando una risposta, e vi pregherei di darmi una mano perchè il tempo stringe.

Se qualcuno potrà farlo lo farà ... tieni presente che TUTTI siamo volontari NON pagati e che quindi rispondiamo, quando possiamo, nel nostro tempo libero e che ... nessuno è obbligato a farlo ... ::slight_smile:

Attendi quindi con pazienza.

Guglielmo

Va bene, comunque questo è il codice completo..grazie

#include"AirQuality.h"
#include"Arduino.h"


AirQuality airqualitysensor;
int current_quality =-1;
int led_red=11;
int led_green=10;
int led_blue=9;

void setup()
{
    pinMode(led_red,OUTPUT);
    pinMode(led_green,OUTPUT);
    pinMode(led_blue,OUTPUT);
     
    Serial.begin(9600);
    airqualitysensor.init(14);
    
     
}
void loop()
{
    
    current_quality=airqualitysensor.slope();
    if (current_quality >= 0)// if a valid data returned.
    {
        if (current_quality==0){
            Serial.println("High pollution! Force signal active");
            analogWrite(led_red,255);
            analogWrite(led_green,0);
            analogWrite(led_blue,0);
        }
        else if (current_quality==1){
            analogWrite(led_red,255);
            analogWrite(led_green,0);
            analogWrite(led_blue,0);
            Serial.println("High pollution!");
        }
        else if (current_quality==2){
            Serial.println("Low pollution!");
             analogWrite(led_red,0);
            analogWrite(led_green,0);
            analogWrite(led_blue,255);
        }
        else if (current_quality ==3){
            Serial.println("Fresh air");
            analogWrite(led_red,0);
            analogWrite(led_green,255);
            analogWrite(led_blue,0);
        }
    }
    
}
ISR(TIMER1_OVF_vect)
{
	if(airqualitysensor.counter==61)//set 2 seconds as a detected duty
	{

			airqualitysensor.last_vol=airqualitysensor.first_vol;
			airqualitysensor.first_vol=analogRead(A0);
			airqualitysensor.counter=0;
			airqualitysensor.timer_index=1;
			PORTB=PORTB^0x20;
	}
	else
	{
		airqualitysensor.counter++;
	}
}

Perdona ma ... cosa c'è di poco chiaro in questa mia frase:

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).

... che propio NON riesci a capire ? ? ? :o

Guglielmo

fffffasr:
Il punto è che non riesco a capire l'ultima parte del codice poichè da tempo, a scuola, abbiamo abbandonato il linguaggio C per dedicarci ai pic.

ISR(TIMER1_OVF_vect)
Ringrazio in anticipo chi potrà fornirmi una risposta!

Beh, e i pic non li programmi in C ?!?
Cosa non capisci, la ISR ? E' la gestione interrupt sulle mcu atmel, in quel caso interrupt sul timer1

Se guardi la AirQuality.cpp dentro alla init() alla fine c'e' scritto:

   //init the timer
    TCCR2A=0;//normal model
    TCCR2B=0x07;//set clock as 1024*(1/16M)
    TIMSK2=0x01;//enable overflow interrupt

ovvero manipola i registri della mcu per abilitare interrupt su timer1

SAN INTERNET:

Grazie per la risposta. In effetti, oltre alla ISR, non mi è chiaro proprio il successivo ciclo if-else

>fffffasr: ULTIMO AVVERTIMENTO ...

... o prima della prossima risposta fai quanto ti ho chiesto ai post #1, #2, #4 e #7 o ... chiudo il thread e ti prendi anche un "ban" per mancato rispetto del regolamento.

Guglielmo