Skip to content

Instantly share code, notes, and snippets.

@thediveo
Created February 19, 2025 22:01
Show Gist options
  • Save thediveo/7cd73d9969b1b43925fcea3f53527e1a to your computer and use it in GitHub Desktop.
Save thediveo/7cd73d9969b1b43925fcea3f53527e1a to your computer and use it in GitHub Desktop.
RGB Chooser for DuckyPad Pro
// RGB Chooser for DuckyPad Pro
// DuckyPad Pro: https://github.com/dekuNukem/duckyPad-Pro/
VAR $r = 0
VAR $g = 0
VAR $b = 0
VAR $rselect = 18
VAR $gselect = 19
VAR $bselect = 20
VAR $bigstep = 5
VAR $smallstep = 1
// R/G/B 0/1/2
VAR $selected = 0
VAR $dist = 6*7
VAR $y = 30
VAR $yy = 127-5*12
SWC_RESET 99
WHILE 1
// light up R G B buttons
// with selected being brighter
SWC_SET $rselect 40+($selected==0)*(255-40) 0 0
SWC_SET $gselect 0 40+($selected==1)*(255-40) 0
SWC_SET $bselect 0 0 40+($selected==2)*(255-40)
OLED_CLEAR
OLED_CURSOR 60-$dist $y-16
OLED_PRINT R
OLED_CURSOR 60 $y-16
OLED_PRINT G
OLED_CURSOR 60+$dist $y-16
OLED_PRINT B
// underline selected channel
VAR $x = 60-$dist+$selected*$dist
OLED_RECT $x-7 $y-5 $x+14 $y-3 1
// help
OLED_CURSOR 63-(12*7)/2 $yy
OLED_PRINT Top Rot +/-1
OLED_CURSOR 63-5*7 $yy+1*12
OLED_PRINT Press -> 255
OLED_CURSOR 63-(15*7)/2 $yy+2*12
OLED_PRINT Bottom Rot +/-5
OLED_CURSOR 63-5*7 $yy+3*12
OLED_PRINT Press -> 0
OLED_CURSOR 63-(17*7)/2 $yy+5*12
OLED_PRINT Press +/- To Exit
// render R G B values
VAR $i = 0
WHILE $i <= 2
VAR $value = 0
IF $i == 0 THEN
$value = $r
ELSE IF $i == 1 THEN
$value = $g
ELSE
$value = $b
END_IF
VAR $pos = 0
IF $value < 10 THEN
$pos = 2
ELSE IF $value < 100 THEN
$pos = 1
END_IF
VAR $xx = 60-$dist+$i*$dist
OLED_CURSOR $xx-7+7*$pos $y
OLED_PRINT $value
$i = $i + 1
END_WHILE
OLED_UPDATE
$i = 1
WHILE $i <= 12
SWC_SET $i $r $g $b
$i = $i + 1
END_WHILE
VAR $dir = 0
VAR $step = 0
VAR $key = $_BLOCKING_READKEY
IF ($key >= 27) && ($key <= 28) THEN
LBREAK
ELSE IF $key == $rselect THEN
$selected = 0
OLED_UPDATE
CONTINUE
ELSE IF $key == $gselect THEN
$selected = 1
OLED_UPDATE
CONTINUE
ELSE IF $key == $bselect THEN
$selected = 2
OLED_UPDATE
CONTINUE
ELSE IF $key == 22 THEN
$dir = -1
$step = $smallstep
ELSE IF $key == 21 THEN
$dir = 1
$step = $smallstep
ELSE IF $key == 23 THEN
IF $selected == 0 THEN
$r = 255
ELSE IF $selected == 1 THEN
$g = 255
ELSE
$b = 255
END_IF
OLED_UPDATE
CONTINUE
ELSE IF $key == 25 THEN
$dir = -1
$step = $bigstep
ELSE IF $key == 24 THEN
$dir = 1
$step = $bigstep
ELSE IF $key == 26 THEN
IF $selected == 0 THEN
$r = 0
ELSE IF $selected == 1 THEN
$g = 0
ELSE
$b = 0
END_IF
OLED_UPDATE
CONTINUE
ELSE
OLED_UPDATE
CONTINUE
END_IF
IF $selected == 0 THEN
IF $dir == -1 THEN
$r = $r - $step
ELSE
$r = $r + $step
END_IF
IF $r >= 32768 THEN
$r = 0
ELSE IF $r >= 256 THEN
$r = 255
END_IF
ELSE IF $selected == 1 THEN
IF $dir == -1 THEN
$g = $g - $step
ELSE
$g = $g + $step
END_IF
IF $g >= 32768 THEN
$g = 0
ELSE IF $g >= 256 THEN
$g = 255
END_IF
ELSE
IF $dir == -1 THEN
$b = $b - $step
ELSE
$b = $b + $step
END_IF
IF $b >= 32768 THEN
$b = 0
ELSE IF $b >= 256 THEN
$b = 255
END_IF
END_IF
END_WHILE
SWC_RESET 99
OLED_RESTORE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment