hab da ein kleines Problem und zwar möchte ich gerne mehrere Lichtsensoren unabhängig von einander steuern.Wenn zum Bsp.es in der küche dunkel wird soll das licht an gehen und im Flur aber noch nicht erst wenn es dort dunkler wird hab ihr für mich eine Lösung habe bereits mehere Code geschrieben klappt aber leider nicht
int Analog0 = A0;// Analogen Eingang 0 als Analog0 definieren
int Analog1 = A1;
int helligkeit = 0; // Variabel helligkeit auf 0 setzen
int helligkeit1 = 0;
int helldunkelgrenze = 83; // Grenzwert hell-dunkel
int helldunkelgrenze1 = 133;
void setup() {
Serial.begin(9600); //Serial-Übertragung auf 300Baud-reicht völlig
pinMode(14, OUTPUT); //Digitaler-Ausgang 10 für LED-Ansteuerung
pinMode(13, OUTPUT);
}
void loop() {
helligkeit = analogRead(Analog0); // Helligkeitssensor auslesen
helligkeit1 = analogRead(Analog1);
Serial.println(helligkeit, DEC); // Ausgabe in dezimal über Serial mit Linefeed zum Einstellen des Grenzwertes “helldunkelgrenze”
if (helligkeit < helldunkelgrenze)
{
digitalWrite(14, HIGH); // LED an
}
if (helligkeit > helldunkelgrenze)
{
digitalWrite(14, LOW); // LED aus
}
delay(150); // 500ms Pause, damit nicht zuviele Zahlen über den Screen laufen
if (helligkeit1 < helldunkelgrenze1)
{
digitalWrite(13, HIGH); // LED an
}
if (helligkeit1 > helldunkelgrenze1)
{
digitalWrite(13, LOW); // LED aus
}
delay(150); // 500ms Pause, damit nicht zuviele Zahlen über den Screen laufen
}
clemens5555:
pinMode(14, OUTPUT); //Digitaler-Ausgang 10 für LED-Ansteuerung
Dies Zeile passt nicht. Willst du vielleicht D10 anstelle D14 verwenden, denn D14 gibt es beim Arduino-Uno eigentlich nicht.
Und, du wirst, wenn dein Code läuft ein anderes Problem bekommen:
if (helligkeit < helldunkelgrenze){
digitalWrite(14, HIGH); // LED an
}
if (helligkeit > helldunkelgrenze){
digitalWrite(14, LOW); // LED aus
}
Du schaltest Licht ein, wenn es zu dunkel ist.
Dann wird es hell werden (weil ja das Licht brennt!)
und das Licht wird wieder ausgeschalten.
Es sei denn, du platzierst deinen Sensor so, dass er nur das externe Licht misst.
Ausserdem würde ich noch eine Hysterese einbauen, damit es nicht flackert. zum Beispiel so:
if (helligkeit < helldunkelgrenze* 0.9){
digitalWrite(14, HIGH); // LED an
}
if (helligkeit > helldunkelgrenze *1.1){
digitalWrite(14, LOW); // LED aus
}
Michael, klar ist deine Methode besser.
Ich wollte eigentlich nur das Prinzip einer Hysterese deutlich machen.
Ich war mir nicht sicher, ob der Fredersteller das kennt.
leider klappt mein umgeschriebener Coder nicht ich kann nicht unabhängig von denn 1 Lichtsensor zu denn anderen Lichtsensor schalten dunkel ich denn einen Sensor ab gehen gleich alle 2 Leds an obwohl der 1 sensor nicht abgedunkelt ist was mache ich falsch so sieht mein Code aus
ich verwende das Arduino Bord 2560
int Analog0 = A0;
int Analog1 = A1;
int helligkeit = 0;
int helligkeit1 = 0;
int helldunkelgrenze = 83;
int helldunkelgrenze1 = 133;
void setup() {
Serial.begin(9600);
pinMode(14, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
helligkeit = analogRead(Analog0);
helligkeit1 == analogRead(Analog1);
Serial.println(helligkeit, DEC);
const byte hysterese = 10;
if (helligkeit > helldunkelgrenze+hysterese) digitalWrite(13,LOW); // aus
if (helligkeit < helldunkelgrenze-hysterese) digitalWrite(13,HIGH); // an
const byte hysterese1 = 10;
if (helligkeit1 > helldunkelgrenze1+hysterese1) digitalWrite(14,LOW); // aus
if (helligkeit1 < helldunkelgrenze1-hysterese1) digitalWrite(14,HIGH); // an
}
Mit Uwes Korrektur geht es auf meinem UNO. Meine restlichen Veränderungen sind nur Kosmetik.
const byte Analog0 = A0; // ist eine Konstante
const byte Analog1 = A1; // ist eine Konstante
int helligkeit = 0; // ist eine Variable
int helligkeit1 = 0; // ist eine Variable
const int helldunkelgrenze = 83; // ist eine Konstante
const int helldunkelgrenze1 = 133; // ist eine Konstante
const byte hysterese = 10; // ist die halbe Hysterese
const byte hysterese1 = 10; // ist die halbe Hysterese
void setup() {
Serial.begin(9600);
pinMode(8 , OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
helligkeit = analogRead(Analog0);
helligkeit1 = analogRead(Analog1);
Serial.println(helligkeit, DEC);
if (helligkeit > helldunkelgrenze+hysterese) digitalWrite(8,LOW); // aus
if (helligkeit < helldunkelgrenze-hysterese) digitalWrite(8,HIGH); // an
if (helligkeit1 > helldunkelgrenze1+hysterese1) digitalWrite(9,LOW); // aus
if (helligkeit1 < helldunkelgrenze1-hysterese1) digitalWrite(9,HIGH); // an
delay(500); // Nur wegen der Anzeige, sonst loeschen
}
michael_x:
Die Logik stimmt nicht ganz:
if(zustand)
heisst genaugenommen
if(zustand==an)
und schaltet nicht oder an
im else Zweig (wenn schon aus) ebenso: entweder nichts tun oder nochmal zustand = aus setzen.
Das stimmt, da habe ich einen logischen Bock eingebaut. so ist das leider, wenn man gerade nicht genug Lichtsensoren da hat
(und einen Knick in der Denke)
Hier mal eine korrigierte Version.
(nicht schöner, aber hoffentlich korrekter)