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
  | #include <SoftwareSerial.h>
#define windPin A0
SoftwareSerial pmsSerial(2, 3);
long pmValue=0;
long pmcf25=0;
long pmat25=0;
unsigned int temperature = 0;
unsigned int humandity = 0;
void retrievepm25(){
    int count = 0;
    unsigned char c;
    unsigned char high;
    while (pmsSerial.available()) {
        c = pmsSerial.read();
        if((count==0 && c!=0x42) || (count==1 && c!=0x4d))
            break;
        if(count > 27)
            break;
        else if(count == 4 || count == 6 || count == 8 || count == 10 || count == 12 || count == 14 || count == 24 || count == 26)
            high = c;
        else if(count == 7){
            pmcf25 = 256*high + c;
            pmValue = pmcf25;
        }
        else if(count == 13){
            pmat25 = 256*high + c;
            pmValue = pmat25;
        }
        else if(count == 25)
            temperature = (256*high + c)/10;
        else if(count == 27)
            humandity = (256*high + c)/10;
        count++;
    }
    while(pmsSerial.available())
        pmsSerial.read();
}
void setup() {
    Serial.begin(9600);
    pmsSerial.begin(9600);
}
void loop() {
    retrievepm25();
    Serial.print(temperature);
    Serial.print(";");
    Serial.print(humandity);
    Serial.print(";");
    Serial.print(pmat25);
    int windValue = analogRead(windPin);
    int Level = 6 * windValue * (5.0 / 1023.0);
    Serial.print(";");
    Serial.print(Level);
    Serial.println();
    delay(1000);
}
  |