Hallo, also ich habe hier einen Code zum Auslesen eines DHT22 Temperatursensors. Der Code ist leider nicht für eine Nutzung mit mehreren DHT's geschrieben. Im Code muss der DHT_PIN, DHT_TRIS und DHT_LAT vorab definiert werden. Nun möchte ich aber im Programm diese PINs wechseln so dass ich mehrere Sensoren auslesen kann. Ich habe schon es schon versucht mit #undef DHT_PIN und anschließendem neu definieren, allerdings ohne Erfolg. Der einmal am Anfang definierte PIN bleibt über die gesamte Programmlaufzeit bestehen, auch mit #undef und #define des neuen Pins. Was kann ich machen?
1 | #ifndef DHT22_H
|
2 | #define DHT22_H
|
3 | |
4 | #ifndef DHT_LAT
|
5 | #error "Define the LAT address of the DQ pin (example:LATCbits.LATC1) for writting"
|
6 | #endif
|
7 | |
8 | #ifndef DHT_PIN
|
9 | #error "Define the PORT address of the DQ pin (example:PORTCbits.RC1) for reading"
|
10 | #endif
|
11 | |
12 | #ifndef DHT_TRIS
|
13 | #error "Define the TRIS address of the DQ pin (example:TRISCbits.TRISC1)"
|
14 | #endif
|
15 | |
16 | #define OUTPUT 0
|
17 | #define INPUT 1
|
18 | |
19 | |
20 | unsigned char DHT_Read(void) |
21 | {
|
22 | |
23 | extern unsigned int DHTHdy; |
24 | extern unsigned int DHTTemp; |
25 | unsigned char Checksum; |
26 | unsigned char bitsum; |
27 | unsigned char bittime; |
28 | unsigned char i; |
29 | unsigned char timeout = 0; |
30 | |
31 | |
32 | DHT_TRIS = OUTPUT; |
33 | DHT_LAT = 0; |
34 | __delay_ms(10); //10ms Delay |
35 | DHT_LAT = 1; |
36 | DHT_TRIS = INPUT; |
37 | __delay_us(40); //40µs Delay |
38 | while(DHT_PIN == 0) { timeout++; if (timeout==255) return 0; } |
39 | timeout = 0; |
40 | while(DHT_PIN == 1) { timeout++; if (timeout==255) return 0; } |
41 | timeout = 0; |
42 | |
43 | |
44 | for (i=0;i<16;i++) |
45 | {
|
46 | bittime = 0; |
47 | while(DHT_PIN == 0) { timeout++; if (timeout==255) return 0; } |
48 | timeout = 0; |
49 | |
50 | .
|
51 | .
|
52 | .
|
53 | .
|
54 | .
|