Guten Tag
Ich wollte ein Programm entwerfen, das mir unter anderem mittels PWM einen Lüfter steuert:
- mittels Taster soll die Geschwindigkeit in 4 Stufen (Aus, langsam, mittel, schnell) geschaltet werden
Das Programm habe ich soweit geschrieben:
/* I/O-Ports */
const byte bytPWMLuefter = 3; // PWM-Ausgang für Lüftergeschwindigkeit
const boolean blnLuefterTaster = 15; // Taster Umschaltung Lüfer-Speed
/* Variablen */
boolean blnTasterLuefterStatus = 0; // Taster gedrückt?
byte bytLevelLuefterspeed = 0; // Levelzähler (0,1,2,3)
byte bytLuefterspeed = 0; // Speedwert (0-255)
/* ----------------------------------------------------------------------------------------------------------------- */
void setup(){
/* I/O-Ports */
pinMode(bytPWMLuefter, OUTPUT); // D2 auf Ausgang
pinMode(blnLuefterTaster, INPUT); // A1 auf Eingang
digitalWrite(blnLuefterTaster, HIGH); // Pull-Up für A1
/* Displays */
Serial.begin (9600); // Startet die serielle Kommunikation
delay (1000); // Startzeitverzögerung
}
/* ---------------------------------------------------------------------------------------------------------------- */
void loop(){
// Zähler für den Speed-Level
if(blnTasterLuefterStatus == 0 && digitalRead(blnLuefterTaster) == LOW){
blnTasterLuefterStatus = 1;
bytLevelLuefterspeed ++;
if(bytLevelLuefterspeed > 3){
bytLevelLuefterspeed = 0;
}
}
if(digitalRead(blnLuefterTaster) == HIGH){
blnTasterLuefterStatus = 0;
}
Serial.print("Level: ") ;
Serial.println(digitalRead(bytLevelLuefterspeed));
if (analogRead(bytLuefterspeed) == 0){
bytLuefterspeed = 0;
}
if (analogRead(bytLuefterspeed) == 1){
bytLuefterspeed = 70;
}
if (analogRead(bytLuefterspeed) == 2){
bytLuefterspeed = 150;
}
if (analogRead(bytLuefterspeed) == 3){
bytLuefterspeed = 255;
}
analogWrite(bytPWMLuefter, analogRead(bytLuefterspeed));
Serial.print("PWM: ") ;
Serial.println(digitalRead(bytLuefterspeed));
}
Von der Logik her würd ich sagen es sollte gehen ... tut es aber 0 =(
Wenn ich mir dann den Wert des Levels via SM ausgeben lasse steht da beim Start "1"?
--> byte bytLevelLuefterspeed = 0; sollte doch eigentlich einen Startwert von 0 haben ... auch zählt der nicht einfach hoch sondern wechselt immer nur zwischen 1 und 0 hin und her
Start: 1
- Tastendruck: 0
- Tastendruck: 0
- Tastendruck: 0
- Tastendruck: 1
Und selbst wenn ich den Wert 1 habe müsste ja der PWM Ausgang angesteuert werden ... da passiert genauso wenig etwas ...
Kann mir jemand nen Hinweis geben, was ich falsch mache? - hab in den letzten Stunden soviel Sachen umgeschrieben das ich echt nur noch Chaos sehe ...
Gruß Scorch