Hallo miteinander,
ich möchte gerade einen bestehenden Code umschreiben der für die PWM Steuerung gedacht ist.
Ich habe dabei ein LCD eingebunden das mir die Leistung in % anzeigen soll. Mein Problem dabei ist nur
folgendes, ich kann ganz normal in 10er Schritten hoch springen aber wenn ich einmal bei 100 angekommen bin bleibt die 0 an 3er Stelle stehen und zeigt mir dann beim runter schalten 900, 800, 700, ... an. Hat jemand eine Ahnung wie ich das Problem im Griff bekomme? Im seriellen Monitor zeigt es die Zahl auch ganz normal an.
//*
Arduino Tutorial 3.2 - Lüftergeschwindigkeit per Taster wechseln
by Scynd 2014
In diesem Tutorial geht es darum die Geschindigkeit eines Lüfters
per tastendruck um einen vordefinierten Wert zu erhöhen oder zu senken.
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
// Konstante Variablen
const int FanPin = 9; // Pin für den Lüfter
const int Taster1Pin = 2; // Pin für Taster 1
const int Taster2Pin = 3; // Pin für Taster 2
int d = 100;
// Variablen
int Schrittweite = 10; // Variable für die Schrittweite pro Tasterdruck des PWM Wertes
int FanSpeed = 50; // PWM Startwert des Lüfters (ca.30%)
int Taster1Status = 0; // Variable zum speichern des Tasterstatus
int Taster2Status = 0; // Variable zum speichern des Tasterstatus
void setup() {
lcd.begin(16, 2);
TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
Serial.begin(9600); // Setzt die Baudrate für die Ausgabe am Serial Monitor auf 9600
pinMode(FanPin, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
pinMode(Taster1Pin, INPUT); // Setzt den Pin des Tasters 1 als Eingang
pinMode(Taster2Pin, INPUT); // Setzt den Pin des Tasters 2 als Eingang
/* Der Lüfter bekommt 1 Sekunde einen Startimpuls und wir dann gedrosselt.
Das ist eine Sicherheitsmaßnahme, falls der Lüfter mit 30% nicht anläuft
*/
analogWrite(FanPin, 100);
delay(1000);
analogWrite(FanPin, FanSpeed);
}
void loop() {
Taster1Status = digitalRead(Taster1Pin); // TasterPin1 lesen und Status speichern
Taster2Status = digitalRead(Taster2Pin); // TasterPin2 lesen und Status speichern
// Wenn Taster 1 gedrückt ist, um den Wert von "Schrittweite" erhöhen
if(Taster1Status == HIGH) {
FanSpeed = FanSpeed + Schrittweite;
delay(500);
}
// Wenn Taster 2 gedrückt ist, um den Wert von "Schrittweite" senken
if(Taster2Status == HIGH) {
FanSpeed = FanSpeed - Schrittweite;
delay(500);
}
// Der ausgegebene PWM Wert wird auf den Bereich 75-255 begrenzt
if(FanSpeed > 100) {
FanSpeed = 100;
}
if(FanSpeed < 0) {
FanSpeed = 0;
}
analogWrite(FanPin, FanSpeed); // Gibt den PWM Wert am FanPin aus
lcd.setCursor(0, 0);
lcd.write("Akkutr\341ger");
lcd.setCursor(0, 1);
lcd.write("Leistung ");
lcd.setCursor(10, 1);
lcd.print(FanSpeed);
lcd.setCursor(13, 1);
lcd.write("% ");
Serial.println(FanSpeed); // Gibt den FanSpeed Wert im Seriellen Monitor aus
}