Hi, folks. I have a problem. First what is working: I have a DHT11 sensor working on an Arduino Uno v3. Via serial I can read out the correct values of humidity and temperature. So far no problem. What is not working: Instead of an Arduino Uno I wanna use an Attiny44 or Attiny84. So I connected everything in the correct manner and programmed the Attiny with the Arduino Uno, which worked out fine. However The humidity readings always give out the value "1". I dont use serial or software serial but only a green LED to give the value. Thus, I know that the readings are not correct. I use the Attiny with 8MHz clock, so the DHT library should work. I use the standard DHT library from the arduino.cc page. Can anyone think of what's the problem? Thanks in advance guys!
The crystal ball says, there is an error in line 42. "I did everything right. But it doesn't work. And I'll not tell you exactly what I did". Did you really expect a different kind of help?
I did at least expect a non-sarcastic answer, or a more polite way of requesting more information. Anyway, here is the kind of code that I use. The humidity check does not work, since the value humidity read out is "1" and not the correct value: I am using that code on the Attiny setup:
1 | #include <dht11.h> |
2 | dht11 DHT11; |
3 | #define DHT11PIN 0
|
4 | |
5 | const int buttonPin = (4); |
6 | int tempPin = (A1); |
7 | |
8 | int ledRot = (3); //onboard LED |
9 | //int ledGruen = (3);
|
10 | float val1; //Temperatur LM35 |
11 | float val4; //Luftfeuchtigkeit DHT11 |
12 | |
13 | byte foilPower = 0; //Leistungswert der PWM |
14 | int buttonState = 0; //Knopfdruckvariable |
15 | int old_buttonState = 0; //Alte Knopfdruckvariable |
16 | |
17 | int val2 = 0; //Hilfsvariable |
18 | |
19 | void setup() |
20 | {
|
21 | analogReference(INTERNAL); |
22 | pinMode(1, OUTPUT); |
23 | pinMode(buttonPin, INPUT); |
24 | pinMode(ledRot,OUTPUT); |
25 | //pinMode(ledGruen,OUTPUT);
|
26 | |
27 | }
|
28 | |
29 | void loop() |
30 | {
|
31 | |
32 | //1)
|
33 | //Ein-Ausschalter:
|
34 | buttonState = digitalRead(buttonPin); |
35 | |
36 | if((buttonState==HIGH) && (old_buttonState==LOW)) { |
37 | |
38 | val2 = 1-val2; |
39 | delay(10); |
40 | }
|
41 | old_buttonState = buttonState; |
42 | |
43 | //2)
|
44 | //start if
|
45 | if (foilPower != 119) { |
46 | if (val2==1) { |
47 | foilPower = 255; |
48 | }
|
49 | else { |
50 | foilPower = 0; |
51 | }
|
52 | }
|
53 | //end if
|
54 | |
55 | //3)
|
56 | //start id
|
57 | if (val2==0) { |
58 | foilPower = 0; |
59 | }
|
60 | //end if
|
61 | |
62 | //4)
|
63 | //Temperaturauslesung LM35 inkl. Umrechnung:
|
64 | val1=(analogRead(tempPin)/9.31); |
65 | |
66 | //6)
|
67 | //Luftfeuchtigkeitsauslesung DHT11:
|
68 | val4=DHT11.humidity; |
69 | |
70 | //7)
|
71 | //Temperaturabhängige Leistungsregulation. Soll-Temperatur: 60° C:
|
72 | if (foilPower >0) { |
73 | if (val1>60) { |
74 | foilPower = 119; |
75 | }
|
76 | else (foilPower = 255); |
77 | }
|
78 | analogWrite(1,foilPower); |
79 | /*
|
80 | //8)
|
81 | //Abschaltautomatik wenn Luftfeuchtigkeit <=60.
|
82 | if (val1 >55) {
|
83 | if (val4 <= 60) {
|
84 | foilPower = 0;
|
85 | val2 = 0;
|
86 |
|
87 | }
|
88 | }
|
89 | */
|
90 | //LED rot
|
91 | if (val4 = 1) { |
92 | digitalWrite(ledRot,HIGH); |
93 | }
|
94 | else { |
95 | digitalWrite(ledRot,LOW); |
96 | }
|
97 | }
|
I am using that code on the Aduino setup
1 | #include "DHT.h" //von ladyada: https://github.com/adafruit/DHT-sensor-library |
2 | |
3 | #define DHTPIN 4 // benutzter ARDUINO-Pin
|
4 | #define DHTTYPE DHT11 // unser Sensor: DHT11
|
5 | |
6 | DHT dht(DHTPIN, DHTTYPE); |
7 | |
8 | const int buttonPin = 2; |
9 | int tempPin = (A0); |
10 | |
11 | int LED = 13; //onboard LED |
12 | float val1; //Temperatur LM35 |
13 | float val3; //Temperatur DHT11 |
14 | float val4; //Luftfeuchtigkeit DHT11 |
15 | //float dhtEinzelWerte[20];
|
16 | |
17 | byte foilPower = 0; //Leistungswert der PWM |
18 | int buttonState = 0; //Knopfdruckvariable |
19 | int old_buttonState = 0; //Alte Knopfdruckvariable |
20 | |
21 | int val2 = 0; //Hilfsvariable |
22 | |
23 | |
24 | |
25 | void setup() |
26 | {
|
27 | Serial.begin(9600); |
28 | analogReference(INTERNAL); |
29 | pinMode(3, OUTPUT); |
30 | pinMode(buttonPin, INPUT); |
31 | pinMode(LED,OUTPUT); |
32 | dht.begin(); |
33 | }
|
34 | |
35 | void loop() |
36 | {
|
37 | |
38 | //1)
|
39 | //Ein-Ausschalter:
|
40 | buttonState = digitalRead(buttonPin); |
41 | |
42 | if((buttonState==HIGH) && (old_buttonState==LOW)) { |
43 | |
44 | val2 = 1-val2; |
45 | delay(10); |
46 | }
|
47 | old_buttonState = buttonState; |
48 | |
49 | //2)
|
50 | //start if
|
51 | if (foilPower != 119) { |
52 | if (val2==1) { |
53 | foilPower = 255; |
54 | }
|
55 | else { |
56 | foilPower = 0; |
57 | }
|
58 | }
|
59 | //end if
|
60 | |
61 | //3)
|
62 | //start id
|
63 | if (val2==0) { |
64 | foilPower = 0; |
65 | }
|
66 | //end if
|
67 | |
68 | //4)
|
69 | //Temperaturauslesung LM35 inkl. Umrechnung:
|
70 | val1=(analogRead(tempPin)/9.31); |
71 | |
72 | //5)
|
73 | //Temperaturauslesung DHT11:
|
74 | val3=dht.readTemperature(); |
75 | |
76 | //6)
|
77 | //Luftfeuchtigkeitsauslesung DHT11:
|
78 | val4=dht.readHumidity();; |
79 | |
80 | |
81 | // Ausgabe der Daten seriell:
|
82 | Serial.print(val1,1); //Temperatur LM35 |
83 | Serial.print(" "); |
84 | //Serial.print(val3,1); //Temperatur DHT11
|
85 | //Serial.print(" ");
|
86 | Serial.print(val4,1); //Luftfeuchtigkeit DHT11 |
87 | Serial.print("\n"); |
88 | delay(50); |
89 | |
90 | //7)
|
91 | //Temperaturabhängige Leistungsregulation. Soll-Temperatur: 60° C:
|
92 | if (foilPower >0) { |
93 | if (val1>60) { |
94 | foilPower = 119; |
95 | }
|
96 | else (foilPower = 255); |
97 | }
|
98 | analogWrite(3,foilPower); |
99 | |
100 | //8)
|
101 | //Abschaltautomatik wenn Luftfeuchtigkeit <=60.
|
102 | if (val1 >55) { |
103 | if (val4 <= 60) { |
104 | foilPower = 0; |
105 | val2 = 0; |
106 | }
|
107 | }
|
108 | |
109 | //LED 13
|
110 | if (foilPower >0) { |
111 | digitalWrite(LED,HIGH); |
112 | }
|
113 | else { |
114 | digitalWrite(LED,LOW); |
115 | }
|
116 | }
|
Do you think that the lack of serial usage in the first code is the error? If you need any more information please let me know.
Do you really expect someone to spend at least 30min on someone elses code for nothing? Debug it yourself. And ask specific questions. Start from scratch, if necessary.
OK, A specific question: "why is the humidity readout in the code used in the Attiny setup "1"?
Eine ganz andere, dumme Frage: Aus den deutschen Kommentaren schließe ich, dass Deutsch deine Muttersprache ist. Warum schreibst du dann in einem deutschen Forum deine Fragen in Englisch? Im Arduino funktioniert alles (sagst du). Wenn du einen anderen CPU Typ nimmst, funktioniert nur die Temperatur und nicht die Feuchte (so interpretiere ich deine Fehlermeldung). Daraus würde ich schließen, dass der Fehler in der DHT11-Lib liegt, dass dort etwas sehr CPU spezifisch geschrieben ist. Andererseits ist diese Zeile val4=DHT11.humidity; verdächtig. Denn in der Arduino Version liest sie sich als val4=DHT11.humidity(); Und dein Compiler gibt dir keine Warnung? Du machst aus einer Funktionsadresse offenbar einen Float Wert. Seltsam. Aber Arduino ist nicht so ganz meine Welt.
@Georg: Wenn man "Neuer Beitrag" anklickt, erscheint ein Hinweis, dass, wenn man den Beitrag auf Englisch schriebe, eine größere Zielgruppe angesprochen würde. Habe aber verpeilt, dass ich dafür das andere Forum bzw. den Link hätte anklicken müssen ;). Daher war der Beitrag auf Englisch. Ich vermute auch, dass die Funktionsweise CPU-spezifisch ist. Ich kriege stets den Wert "1" bei den Attiny44, 84 und 85 raus. Einen Atmel habe ich nicht zur Hand, vermute aber, dass es, wie beim Arduino, funktionieren würde. Danke für den Hinweis. Der Unterschied im Befehl "()" liegt daran, dass ich im Code beim Arduino setup eine andere DHT lib verwende als für das Attiny setup. Ich habe aber beide libs bei beiden setups ausprobiert. Immer das gleiche Problem. Ich vermute, dass es was mit der seriellen Kommunikation zu tun hat. Das kann ich aber gerade nicht testen, da ich kein Kabel dafür zur Hand habe (also vom Steckbrett von den Pins zum USB Port am PC). Ich schätze, man kann die Signale über das Arduino zum PC weiterleiten. Ich muss mich da aber erst mal rein lesen. Hätte ja sein können, dass bereits jemand auf dieses Problem gestoßen ist.
Der DHT11 ist sehr kritisch im Timing. Warum stoppst du nicht die serielle Kommunikation, redest mit dem DHT11 und schaltest dann die Kommunikation wieder ein?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.