LaserClock mit durchschnitts Helligkeit

This commit is contained in:
mrbesen 2019-01-31 19:39:24 +01:00
parent c4fdec48f5
commit 5dbc3eb983
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
1 changed files with 35 additions and 5 deletions

View File

@ -12,9 +12,16 @@
DS3231 clock;
#define pressed digitalRead(12) == LOW
#define lightsens 1
#if lightsens
#define lightsensorpin A0
#define lightoff 1010
#define lighton 970
const unsigned char lightSensPin;
#define lighton 980
const size_t messure_size = 20;
unsigned short messure[messure_size];
size_t messure_pos = 0;
unsigned long messure_add = 0;
#endif
//pins for hour display
const unsigned char H[] = {8,9,10,11};
@ -80,6 +87,15 @@ void setup() {
}
pinMode(12, INPUT_PULLUP);
write();
//setup messure array
int brightness = analogRead(lightsensorpin);
//memset(messure, brightness, messure_size); //does only work for integers!
for(int i = 0; i < messure_size; i++) {
messure[i] = brightness;
}
messure_add = brightness * messure_size;
while(!pressed) delay(5);//wait for press
//setup time
@ -133,10 +149,24 @@ void loop() {
digitalWrite(13, millis()/1000 % 2 == 0);
delay(500);
int brightness = analogRead(A0);
if(brightness < lighton) {
//update lighting values
#if lightsens
unsigned short brightness = analogRead(lightsensorpin);//messure
messure_add -= messure[messure_pos]; //remove old value from avg
messure[messure_pos] = brightness; //add to array
messure_add += brightness; //add to avg
if((++messure_pos) == messure_size)//increment pos, check range
messure_pos = 0; //reset
unsigned short bavg = messure_add / messure_size;
if(bavg < lighton) {
brightmode = true;
} else if(brightness > lightoff) {
} else if(bavg > lightoff) {
brightmode = false;
}
#endif
}