5 - Gamma Correction

Our eyes don't respond linearly, so we shouldn't increase our LED's brightness linearly. A little math goes a long way.

Video

Gamma Correction

Code

"""
Pico Slice 1 - RGB Mixer
Tutorial 5 - Gamma Correction
"""

import time
import board
from pwmio import PWMOut
from analogio import AnalogIn

# A funcion to handle gamma correction
def Gamma_Correct (linear_input):
    gamma = 3
    maximum = 65535
    output = int(((linear_input/maximum)**gamma)*maximum)
    return output

# Represent the Pot in code as an AnalogIn object.
r_pot = AnalogIn(board.A2)

# Represent the Red LED as a PWMOut object.
r_led = PWMOut(board.GP2, duty_cycle=0, frequency=5000, variable_frequency=False)


while True:                                     # Loop Forever:
    input_val = r_pot.value                         # Read the potentiometer's current value (16-bit)
    r_led.duty_cycle = Gamma_Correct(input_val)     # Set the red LED's duty-cycle (16-bit) to the gamma corrected pot value
    time.sleep(0.1)                                 # Do nothing for 100 milliseconds

Last updated