UBISS2024exam

From Sketching with Hardware at LMU Wiki
Revision as of 13:54, 13 June 2024 by Skwhadmin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
from machine import Pin, ADC
from time import sleep

# Initialize the light sensor (LDR) and LED
ldr = ADC(Pin(12))
led = Pin(20, Pin.OUT)

def get_duty_cycle(light_value):
    # Map the light value to the duty cycle
    # Completely dark (350) -> 90% on, 10% off
    # Completely bright (790) -> 10% on, 90% off
    min_light = 350
    max_light = 790
    min_duty = 90
    max_duty = 10
    
    duty_cycle = min_duty + (max_duty - min_duty) * ((light_value - min_light) / (max_light - min_light))
    return duty_cycle

while True:
    # Read the light value
    light_value = ldr.read_u16()  # Read the analog value (16-bit)
    light_value = (light_value / 65535) * (790 - 350) + 350  # Scale to 350-790 range

    # Calculate the duty cycle
    duty_cycle = get_duty_cycle(light_value)
    
    # Calculate on and off times
    on_time = duty_cycle / 100.0
    off_time = 1.0 - on_time
    
    # Control the LED
    led.on()
    sleep(on_time)
    led.off()
    sleep(off_time)