Hallo zusammen,
Ich zuerst einmal ich bin ein Arduino Anfänger .
Ich wollte ich ein LED Streifen mit einem Helligkeitssensor (TSL2561) über ein Arduino steuern. Die Technik funktioniert soweit schon mal. Allerdings habe ich ein Problem mit meinem Sketch.
Ich will das der LED Streifen hochgedimmt wird wenn das Licht unter 500 LUX ist. und wenn das Licht über 750 LUX ist soll der Streifen langsam runtergedimmt werden. Zwischen 500 und 750 LUX soll gar nichts passieren. Hier mal mein bisheriger Sketch:
#include "Wire.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_TSL2561_U.h"
#define LEDROT 6
#define LEDGRUEN 5
#define LEDBLAU 3
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
void configureSensor(void)
{
tsl.enableAutoRange(true);
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS);
}
void setup()
{
pinMode(LEDROT, OUTPUT);
pinMode(LEDGRUEN, OUTPUT);
pinMode(LEDBLAU, OUTPUT);
}
void loop()
{
int Zuschlag = 1;
start:
sensors_event_t event;
tsl.getEvent(&event);
delay(150);
if (event.light < 500)
for (int i = Zuschlag; i <= 255; i = Zuschlag)
{
analogWrite(LEDROT, i);
analogWrite(LEDGRUEN, i);
analogWrite(LEDBLAU, i);
delay(20);
int Zuschlag = Zuschlag + 1;
goto start;
}
if (event.light >= 500 && event.light <= 750)
{
delay(300);
goto start;
}
if (event.light > 750)
for (int i = Zuschlag; i >= 0; i = Zuschlag)
{
analogWrite(LEDROT, i);
analogWrite(LEDGRUEN, i);
analogWrite(LEDBLAU, i);
delay(300);
int Zuschlag = Zuschlag - 1;
goto start;
}
}
Wenn ich mit diesem Sketch meinen Sensor verdunkel, erhöht sich die Helligkeit nur einmal und bleibt dann gleich. Ich will aber dass es die Helligkeit solange erhöht oder senkt bis es zwischen 500 und 750 Lux hell ist.
Kann mir jemand weiterhelfen??? :o
Danke für deine schnelle Antwort.
Das ganze hat ich auch schon so. Dann dimmt sich der LED streifen aber leider pausenlos von 0 auf 255 hoch und runter.
ist ein uint8_t nicht genau dasselbe wie ein byte? Oder was genau macht dieser Befehl?
Ich kann den sketch von ardubu leider erst morgen ausprobieren, da ich mein Arduino nicht da habe...
Im Prinzip wollte ich dass mein Sensor misst dann gegebenenfalls die helligkeit um eine Stufe erhöht und dann wieder misst und dann wieder die Helligkeit um eine Stufe erhöht... das ganz solange bis ich dann zwischen 500 und 750 lux mithilfe des Led Streifens bin. Deswegen das goto um die Schleife vorzeitig abzbrechen und wieder zu messen, da ja sonst die Led bis 255 hochregeln..., oder?
Das ist kein Befehl. Sondern ein Datentyp. Byte ist lediglich eine Arduino-Bezeichnung für uint8_t. Ansonsten ist z.B. unint16_t unabhängig vom Prozessor, da int auf 8 Bit System 2 Byte hat und und auf 32 Bit System 4 Byte.
Das ist so eine Stelle wo voreilige Optimierung schlecht ist. Wenn man da int draus macht kann die Variable auch größere Werte annehmen.
Eventuell wirkt sich der Wert von ledlevel aber nicht ausreichend auf die Helligkeit aus, so dass er wohl an eine der Grenzen ( 0 oder 255 ) geht und dort bleibt.
Arduino wird in C programmiert nicht in Basic wo man GOTO braucht.
In Deinem Orginal Sketch braucht es 1x Goto gar nicht weil loop() sowieso eine Schleife ist. Im FOR ist goto falsch weil Du sofort aus der Schleife herausspringst.
In 99,9% der Fälle brauchst Du goto nicht und zum 0,1% ten Fall kommen weder ich noch Du.
for (int i = Zuschlag; i <= 255; i = Zuschlag)
Diese for Schleife hat keinen Sinn da sich die Variable nie ändert. Ja sie funktioniert irgendwie aber das ist kein C.