Hackathon/light_fast.ino

122 lines
2.7 KiB
Arduino
Raw Normal View History

2024-07-11 18:42:28 +02:00
#define Light_sensor A0
#define Lamp_mod 6
#define Move_sensor 2
// Gemessene Sensorwete des Helligkeitssensors
// max 945 in 02
// min 12 in 02
// max 922 in 04
// min 10 in 04
// max 630 in 01 ??
// min 58 in 01
// max 995 in 03
// max 19 in 03
uint8_t sensoflight(uint8_t lpin){
uint16_t light = map(analogRead(lpin), 10, 922, 0, 100);
return light;
}
uint8_t led_pwr;
// maximale dauer der funktion less than 860 * 10^-6 s
/*
tested with:
unsigned long time_stp;
unsigned long time_fin;
setlamp(Lamp_mod, 0);
time_stp = micros();
setlamp(Lamp_mod, 100);
time_fin = micros();
unsigned long need = time_fin - time_stp;
Serial.println (need);
delay(1000);
*/
void setlamp(uint8_t lpin, uint8_t lbrightness){
lbrightness = lbrightness%101;
uint8_t n_led_pwr = map(lbrightness, 0, 100, 0, 255);
analogWrite(lpin, n_led_pwr);
}
uint8_t movement_threshold;
void movement(){
if ((movement_threshold>=80)&&(movement_threshold+5<100)){
movement_threshold += 5;
}
else{
movement_threshold = 80;
}
if (Serial.availableForWrite()) {
if (movement_threshold-25 > 0) Serial.write(movement_threshold-25);
}
}
void setup() {
delay(random(0, 20));
pinMode(Move_sensor,INPUT);
attachInterrupt(digitalPinToInterrupt(Move_sensor), movement, RISING);
pinMode(Light_sensor,INPUT);
pinMode(Lamp_mod,OUTPUT);
Serial.begin(9600);
}
// functions werte definiert von 0 bis 100 darüber und unter chaos!
void setlight_with_wehtherinfluence(int8_t f_light){
// 0 - 100 limit.
f_light = (f_light % 101);
// aretmetics over 100 scans!
uint16_t env_light = 0;
for (int i=0; i <100; i++){
env_light += sensoflight(Light_sensor);
delayMicroseconds(10);
}
env_light = (env_light/100);
// aretmetic light of enviroment
int8_t setlight = f_light - env_light;
//if (setlight > 100) setlamp(Lamp_mod,100); // would still never heppen but if lamps won't flicker.
if (setlight > 0) setlamp(Lamp_mod,setlight);
else setlamp(Lamp_mod,0);
}
int maxwert = 945;
void loop() {
/*setlight_with_wehtherinfluence(30);
delay(1000);
setlight_with_wehtherinfluence(80);
delay(1000);
*/
/*
int test = analogRead(Light_sensor);
if (test < maxwert) maxwert = test;
Serial.println(maxwert);
*/
// testcode for precentage
// Serial.println(sensoflight(Light_sensor));
// Serial.println(movement_threshold);
if (movement_threshold) movement_threshold--; // time based light reduction!
setlight_with_wehtherinfluence(movement_threshold);
delay(100);
int8_t i;
while ((Serial.available())&&(i<10) ){
uint8_t msg = Serial.read();
if (msg < 101){
if ( msg >= movement_threshold ) movement_threshold= msg;
}
i++;
}
}