Teraz należy przerobić program tak, aby w przypadku wykrycia dużego stężenia niebezpiecznego gazu w powietrzu świeciła czerwona dioda LED. Zmodyfikowany program został umieszczony poniżej (pliki projektowe znajdują się również w sekcji do pobrania na koniec artykułu).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
/* * AirQuality Demo V1.0. * connect to A0 to start testing. it will needs about 20s to start * By: http://www.seeedstudio.com * * Modyfikacje: Patryk Mądry * Mikrokontroler 2017 r. */ #include"AirQuality.h" #include"Arduino.h" AirQuality airqualitysensor; int current_quality =-1; void setup() { Serial.begin(9600); airqualitysensor.init(14); pinMode(2, OUTPUT); // Dioda } 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"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED } else if (current_quality==1) { Serial.println("High pollution!"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED } else if (current_quality==2) { Serial.println("Low pollution!"); digitalWrite(2, LOW); // Ustawienie pinu 2 na stan niski - zgaszenie diody LED } else if (current_quality ==3) { Serial.println("Fresh air"); digitalWrite(2, LOW); // Ustawienie pinu 2 na stan niski - zgaszenie diody LED } } } 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++; } } |
W pętli głównej programu do zmiennej current_quality jest przypisywana wartość od 0 do 3, gdzie wartość równa 0 lub 1 informują o dużej ilości cząsteczek w powietrzu, wartość 2 o niskiej ilości cząsteczek gazu w powietrzu, a 3 bardzo małej ilości lub ich braku). Następnie sprawdzana jest wartość tej zmiennej i wyświetlona wartość z czujnika oraz komunikat o ilości cząsteczek w wokół czujnika.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED } else if (current_quality==1) { Serial.println("High pollution!"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED } |
Gdy zmienna current_quality jest równa 0 lub 1, stężenie gazu w powietrzu jest wysokie i musi zapalić się dioda ostrzegające przed tym zjawiskiem. Aby program funkcjonował w ten sposób należy dodać kod, który spowoduje zaświecenie naszej czerwonej diody LED w warunku dla wartości 0 i 1. Kod do realizacji tego zadania wygląda następująco:
1 |
digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED |
Gdy czujnik wykrył niewielkie stężenie cząsteczek lub nie wykrył ich wcale, zmienna current_quality przyjmuje wartości 2 lub 3. Wtedy dioda LED musi być zgaszona. Należy więc dodać linijkę kodu, która spowoduje ustawienie stanu niskiego na pinie 2 w warunku dla wartości 2 oraz 3:
1 |
digitalWrite(2, LOW); // Ustawienie pinu 2 na stan niski - zgaszenie diody LED |
Diodę można zastąpić np. buzzerem, który będzie informować o wysokim stężeniu niebezpiecznego gazu w postaci dźwiękowej.
Działanie programu zostało zaprezentowane na poniższym wideo: