Moin zusammen,
Ich muss mittels eines Potis eine Zeit einstellen können.
Diese soll auch auf zehntel Sekunden genau einstellbar sein.
Auch möchte ich die Zeit auf einem 4zeiligen LCD Display (2004)
darstellen.
Es klappt “soweit - so gut”. [Anzeige] 0.00 → 20.00
Frage: Wie begrenze ich float “auf eine Nachkommastelle” und/oder
die Ausgabe der Anzeige auf nur eine Nachkommastelle?
void loop()
{ // Zeitverteiler
unsigned long m = millis();
Einlesen();
if ((m - Time1 > Interval1)&&Merker==2)
{MaskeDisplay();
Merker=0;}
if (m - Time1 > Interval1)
{UpdateDisplay();
Time1 = m;
Merker++;}
}
void Einlesen()
{
valD = map(analogRead(PotiDPin), 0, 1023, 0, 200);
Anzeige=valD*0.1;
}
void MaskeDisplay()
{lcd.setCursor(0,3); // Anfang auf Stelle 0, Zeile 3 setzen
lcd.print("Dosierzeit:"); // Text ausgeben
}
void UpdateDisplay()
{
lcd.setCursor(12,3); // Anfang auf Stelle 12, Zeile 3 setzen
lcd.print(" "); // Lösche vorherige Anzeige
lcd.setCursor(12,3); // Anfang auf Stelle 12, Zeile 3 setzen
lcd.print(Anzeige); // Gebe Wert aus
}
Der Anfang des Sketches, auch wenn er evtl nicht von Nöten ist…
#include "Wire.h"
#include "LiquidCrystal_I2C.h" // Library für LCD aufgerufen
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Stelle die Adresse auf 0x3F, Setze Anschlusspins
// Variablen deklarieren
const int PotiAPin = A0; //PotiMotor A
const int PotiBPin = A1; //PotiMotor B
const int PotiCPin = A2; //Poti Mischer
const int PotiDPin = A3; //Poti Zeit
const int Trigger = 2; //Abzug Pistole auf D2
const int Mischer = 3; //PWM Mischer
const int MotA = 5; //PWM Motor A
const int MotB = 6; //PWM Motor B
const int NurA = 7; //Taster "Nur A"
const int NurB = 8; //Taster "Nur B"
const int Flush = 9; //Taster "Spülen"
const int Piepser = 10; //Piepser
const int LEDon =11; //LED Einschalter
const int Warn = 12; //Blauer Taster Licht
int valA;
int valB;
int valC;
int valD;
int Merker =2;
// Zeiten (ohne delay()) anlegen
long Time1 = millis(); // Zeit zum Updaten des Displays
long Time2 = millis(); // Zeit bis zum Spülvorgang
long Time3 = millis(); // Dauer Spülvorgang
long Time4 = millis();; // Dosierzeit - wird durch Poti "Zeit" * 1000 bestimmt
long Interval1 = 700; // Zeit bis zum LCD Update
long Interval2 = 50000; // Zeit bis zum Spülvorgang
long Interval3 = 8000; // Dauer Spülvorgang
long Interval4; // Dosierzeit - wird durch Poti "Zeit" * 1000 bestimmt
float Anzeige; // um Sekunden auch als Komma-Zahl anzuzeigen
float AzuB;
// Warnen geht auch ohne weiteren Interval, bloß nicht "m" zurücksetzen
void setup()
{
// initialisiere serielle Kommunikation mit Rechner
Serial.begin(9600);
lcd.begin(20,4); // initialisiere lcd für 20 Chars 4 Linien
lcd.backlight(); // LCD Hintergrundbeleuchtung aktivieren
lcd.clear(); // LCD löschen
pinMode(Trigger, INPUT_PULLUP);
pinMode(MotA, OUTPUT);
pinMode(MotB, OUTPUT);
pinMode(Mischer, OUTPUT);
pinMode(NurA, INPUT_PULLUP);
pinMode(NurB, INPUT_PULLUP);
pinMode(Flush, INPUT_PULLUP);
pinMode(Piepser, OUTPUT);
pinMode(LEDon, OUTPUT);
pinMode(Warn, OUTPUT);
analogWrite(MotA, 0); //set motor A to run at (0/255 = 0)% duty cycle (stop)
analogWrite(MotB, 0); //set motor B to run at (0/255 = 0)% duty cycle (stop)
analogWrite(Mischer, 0); //set motor Mixer to run at (0/255 = 0)% duty cycle (stop)
}
Danke für Eure Infos und dass Ihr hier seid
Stefan