Hallo, ich möchte euch gerne bitten mir bei folgenden Code
weiterzuhelfen. Ich möchte gerne den Wert der aktuellen PWM-Einstellung
am Display ausgeben.
Solange man sich in void Setup() Funktion befindet wird der Wert
"FanSpeed" an gezeigt. Danach erhalte ich nur mehr folgende Ausgabe.
1
#include<LiquidCrystal.h>
2
LiquidCrystallcd(12,11,5,4,3,2);
3
4
5
// Konstante Variablen
6
7
constintFanPin=9;// Pin für den Lüfter
8
constintTaster1Pin=7;// Pin für Taster 1
9
constintTaster2Pin=6;// Pin für Taster 2
10
11
// Variablen
12
13
intSchrittweite=60;// Variable für die Schrittweite pro Tasterdruck des PWM Wertes
14
intFanSpeed=75;// PWM Startwert des Lüfters (ca.30%)
15
intTaster1Status=0;// Variable zum speichern des Tasterstatus
16
intpreviousTaster1Status=0;
17
intTaster2Status=0;// Variable zum speichern des Tasterstatus
18
intpreviousTaster2Status=0;
19
20
21
22
23
24
voidsetup(){
25
26
lcd.begin(16,2);
27
lcd.print(FanSpeed);
28
29
TCCR1B=TCCR1B&0b11111000|0x01;// Setzt Timer1 (Pin 9 und 10) auf 31300Hz
30
31
pinMode(FanPin,OUTPUT);// Setzt den Pin des Lüfters als Ausgang
32
pinMode(Taster1Pin,INPUT);// Setzt den Pin des Tasters 1 als Eingang
33
pinMode(Taster2Pin,INPUT);// Setzt den Pin des Tasters 2 als Eingang
34
35
/* Der Lüfter bekommt 1 Sekunde einen Startimpuls und wir dann gedrosselt.
36
Das ist eine Sicherheitsmaßnahme, falls der Lüfter mit 30% nicht anläuft
37
*/
38
analogWrite(FanPin,255);
39
delay(1000);
40
analogWrite(FanPin,FanSpeed);
41
42
}
43
44
45
voidloop()
46
{
47
48
Taster1Status=digitalRead(Taster1Pin);// TasterPin1 lesen und Status speichern
49
Taster2Status=digitalRead(Taster2Pin);// TasterPin2 lesen und Status speichern
Johannes S. schrieb:> Solange man sich in void Setup() Funktion befindet wird der Wert> "FanSpeed" an gezeigt. Danach erhalte ich nur mehr folgende Ausgabe.
Und was stört dich daran? Das ist das, was du programmiert hast ;-)
Guck dir mal den Unterschied zwischen lcd.write() und lcd.print() an.
https://www.arduino.cc/en/Reference/LiquidCrystal
Ich möchte aber gerne wenn, ich das PWM-Signal um eine Schrittweite von
60 erhöhe, dass mir dann der aktuelle Wert angezeigt. Ich versuche das
mit dem folgenden Block zu erreichen.
1
lcd.clear();
2
lcd.setCursor(0,0);
3
lcd.write(FanSpeed);
Ich habe bereits beide lcd.write sowie lcd.print verwendet, leider ohne
Erfolg.
LG Hannes
Schau dur doch einmal die Doku zu den beiden Funktionen an. Write macht
nicht das was du willst! Print schon.
Außerdem kannst du dem Display nicht unendlich schnell Werte senden
(clear usw.). Das musst du unbedingt begrenzen (nur bei änderungen
ausführen)
Johannes S. schrieb:> Ich habe bereits beide lcd.write sowie lcd.print verwendet ...
Stimmt. Oben in setup(), wo die Ausgabe funktioniert, hast du print
verwendet und es erscheint die "75".
Unten, in deiner Hauptschleife verwendest du write().
Zu lcd.write() steht in der Beschreibung: "Write a character to the
LCD."
Der Zahlenwert 75 entspricht dem Zeichen 'U' und genau das zeigt dein
Display.
Danke, die Sache mit dem lcd.print() habe ich total übersehen. Leider
bringt das auch keine Lösung mit sich.
Erreiche ich durch die folgende Abfrage der Code innerhalb der
If-Bedingung nur einmal ausgeführt wird?
1
voidloop()
2
{
3
4
Taster1Status=digitalRead(Taster1Pin);// TasterPin1 lesen und Status speichern
5
Taster2Status=digitalRead(Taster2Pin);// TasterPin2 lesen und Status speichern
analogWrite(FanPin,FanSpeed);// Gibt den PWM Wert am FanPin aus
33
34
}
35
36
previousTaster1Status=Taster1Status;
37
previousTaster2Status=Taster2Status;
38
}
Aufgefallen ist mir, dass der Wert 255 angezeigt wird. Gibt das nicht
etwas, bei gleichzeitigen Verwendung von PWM und analogWrite() das Pins
nicht mehr zu verwenden sind?
LG hannes
Johannes S. schrieb:> Erreiche ich durch die folgende Abfrage der Code innerhalb der> If-Bedingung nur einmal ausgeführt wird?
1
voidloop()
2
{
3
delay(500);// Auch wenn's mich persönlich schmerzt..
4
5
#define TasteGedrueckt 1 // oder 0, das weiß ich jetzt nicht
6
7
Taster1Status=digitalRead(Taster1Pin);// TasterPin1 lesen und
8
Statusspeichern
9
Taster2Status=digitalRead(Taster2Pin);// TasterPin2 lesen und
10
Statusspeichern
11
12
// if Zweig ausführen, wenn Taste gedrückt wird..
13
if(((Taster1Status==TasteGedrueckt)&& \
14
(TasteGedrueckt!=previousTaster1Status))|| \
15
((Taster2Status==TasteGedrueckt)&& \
16
(TasteGedrueckt!=previousTaster1Status)))
17
18
// oder if Zweig ausführen, wenn Taste losgelassen wird..
19
/*
20
if (((Taster1Status != TasteGedrueckt) && \
21
(TasteGedrueckt == previousTaster1Status)) || \
22
((Taster2Status != TasteGedrueckt) && \
23
(TasteGedrueckt == previousTaster1Status)))
24
*/
25
{
26
27
28
if(Taster1Status==HIGH){
29
FanSpeed=FanSpeed+Schrittweite;
30
// delay(500);
31
}
32
if(Taster2Status==HIGH){
33
FanSpeed=FanSpeed-Schrittweite;
34
// delay(500);
35
}
36
37
if(FanSpeed>255){
38
FanSpeed=255;
39
}
40
41
if(FanSpeed<75){
42
FanSpeed=75;
43
}
44
45
// lcd.clear();
46
lcd.setCursor(0,0);
47
48
delay(5);// Auch wenn's mich persönlich schmerzt..
49
50
lcd.print(FanSpeed);
51
lcd.print(" ");
52
53
analogWrite(FanPin,FanSpeed);// Gibt den PWM Wert am FanPin aus
54
55
}
56
57
previousTaster1Status=Taster1Status;
58
previousTaster2Status=Taster2Status;
59
}
>> Aufgefallen ist mir, dass der Wert 255 angezeigt wird. Gibt das nicht> etwas, bei gleichzeitigen Verwendung von PWM und analogWrite() das Pins> nicht mehr zu verwenden sind?
..weiß ich nicht, aber lag wohl an Deinen Tastenabfragen und den delays
Viel Spaß /BirgerT
Malte S. schrieb:> Sorry, am Thema vorbei, aber kommt das nur mir irgendwie paradox> vor?>> Johannes S. schrieb:> // Konstante Variablen
Alle Konstanten sind variabel ;-)
@BirgerT
Danke für deine Bemühungen ich habe deinen Code verwendet, leider ohne
Erfolg. Es werden wieder lauter U`s am Dispaly ausgeben.
@Wolfgang
"75 entspricht dem Zeichen 'U'"
75 entspricht laut ASCII doch 'K'
Johannes S. schrieb:> @BirgerT>> Danke für deine Bemühungen ich habe deinen Code verwendet, leider ohne> Erfolg. Es werden wieder lauter U`s am Dispaly ausgeben.
Dann stell doch nochmal den aktuellen Code hier ein, vielleicht ist da
doch noch ein Fipptehler drin.
> @Wolfgang>> "75 entspricht dem Zeichen 'U'">> 75 entspricht laut ASCII doch 'K'
Uups - erwischt, gute Frage, woher kommt denn jetzt die 85?
Ach und der noch:
#define TasteGedrueckt HIGH // oder 0, das weiß ich jetzt nicht