Hallo Leute,
ich Baue mir gerade ein UV-Meter und habe ein kleines Problem im Loopteil.
Das Problem sind die if Bedingungen.
Da sie ja alle erfüllt werden, laufen sie in Dauerschleife durch.
Das soll natürlich nicht sein. :~
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int val;
void setup()
{
Serial.begin(9600);// open serial port, set the baud rate to 9600 bps
}
void loop()
{
Serial.println(val);
lcd.begin(16,2);
lcd.setCursor(0, 0);
lcd.print("UV Index= ");
val = analogRead(0);
if (val < 10)
{
lcd.setCursor(11, 0);
lcd.print("0");
delay(1000);
}
val = analogRead(0);
if (val > 10)
{
lcd.setCursor(11, 0);
lcd.print("1");
delay(1000);
}
val = analogRead(0);
if (val > 46)
{
lcd.setCursor(11, 0);
lcd.print("2");
delay(1000);
}
val = analogRead(0);
if (val > 65)
{
lcd.setCursor(11, 0);
lcd.print("3");
delay(1000);
}
val = analogRead(0);
if (val > 83)
{
lcd.setCursor(11, 0);
lcd.print("4");
delay(1000);
}
val = analogRead(0);
if (val > 103)
{
lcd.setCursor(11, 0);
lcd.print("5");
delay(1000);
}
val = analogRead(0);
if (val > 124)
{
lcd.setCursor(11, 0);
lcd.print("6");
delay(1000);
}
val = analogRead(0);
if (val > 142)
{
lcd.setCursor(11, 0);
lcd.print("7");
delay(1000);
}
}
Du solltest dich mit BlinkWithoutDelay -> millis() auseinandersetzen.
Desweiteren ist es nicht nötig, den AnalogEingang mehrmals innerhalb einer loop abzufragen. Eine loop dauert im nonBlocking-Code (ohne delay) < 1ms.
void setup()
{
lcd.begin(16,2);
lcd.print("UV Index = ");
}
void loop()
{
int val_raw = analogRead(0); // Einmal pro loop ausfuehren
int val = 0; // 0 - 7
if(val_raw < 10) val = 0;
else if(val_raw < 20) val = 1;
// ...
else val = 7;
static unsigned long last_millis;
if(millis() - last_millis >= 1000)
{
last_millis = millis();
lcd.setCursor(11,0);
lcd.print(val);
}
}
Thrillhouse:
Hallo Leute,
ich Baue mir gerade ein UV-Meter und habe ein kleines Problem im Loopteil.
Ich habe Dir mal ein "alternatives" Programm zu Deinem gemacht.
Schaue es Dir an und vielleicht kannst Du ein bisschen in Sachen Programmiertechnik lernen.
Dein Sketch ist einfach nur Chaos.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
lcd.begin(16,2); // LCD EINMALIG initialisieren
lcd.print("UV Index= "); // auch das braucht nur EINMALIG geschrieben werden
}
byte uvWerte[]={10, 46, 65, 83, 103, 124, 142}; // Wertetabelle UV-Index
int val, uvIndex;
void loop()
{
val = analogRead(A0); // Analogwert an A0 auslesen
uvIndex=0; // UV-Index mit Null annehmen ...
for (int i=0;i<7;i++) // alle 7 Werte der Tabelle prüfen
{
if (val>uvWerte[i]) uvIndex++; // ... und entsprechend der Wertetabelle erhöhen
}
Serial.print(val); // ADC-Wert ausgeben
Serial.print('\t'); // horizontaler Tabulator
Serial.println(uvIndex); // UV-Index ausgeben
lcd.setCursor(11, 0);
lcd.print(uvIndex);
delay(1000);
}
Danke super Seite....die kannte ich noch nicht.
Bei den meisten Seiten wird immer alles so oberflächlich erklärt...hier ist es viel besser beschrieben
Ich bedanke micht