01 — Getting Started
Your first programs
; Your first HIL-OS program
(LOG "Hello, HIL-OS!")
(LOG "Welcome to Hardware-in-the-Loop programming.")
(LOG "Edit this file, then run: hil-cli simulate hello-world.hil")
View code
(LOG "Starting blink on pin 13...")
(WHILE 1
(DO
(WRITE D 13 1)
(LOG "LED ON")
(DELAY 500)
(WRITE D 13 0)
(LOG "LED OFF")
(DELAY 500)
)
)
View code
(SET led_pin 13)
(SET delay_ms 300)
(SET counter 0)
(LOG "Variables initialized.")
(LOG "led_pin = " led_pin)
(SET x 10)
(SET y 3)
(SET sum (+ x y))
(SET product (* x y))
(LOG "x + y = " sum)
(LOG "x * y = " product)
(WHILE (< counter 5)
(DO
(WRITE D led_pin 1)
(DELAY delay_ms)
(WRITE D led_pin 0)
(DELAY delay_ms)
(SET counter (+ counter 1))
(LOG "Blink #" counter)
)
)
(LOG "Done! Total blinks: " counter)
View code
02 — Operators
Arithmetic, comparison, logic, math
(SET a 17)
(SET b 5)
(LOG "a = " a)
(LOG "b = " b)
(LOG "a + b = " (+ a b))
(LOG "a - b = " (- a b))
(LOG "a * b = " (* a b))
(LOG "a / b = " (/ a b))
(LOG "a % b = " (% a b))
(SET result (* (+ a b) (- a b)))
(LOG "(a+b)*(a-b) = " result)
(LOG "10 / 0 = " (/ 10 0))
(SET n 42)
(LOG "n % 2 = " (% n 2))
(IF (== (% n 2) 0)
(LOG "n is even")
(LOG "n is odd")
)
View code
(SET x 42)
(LOG "x = " x)
(LOG "(== x 42) = " (== x 42))
(LOG "(== x 0) = " (== x 0))
(LOG "(!= x 42) = " (!= x 42))
(LOG "(!= x 0) = " (!= x 0))
(LOG "(> x 10) = " (> x 10))
(LOG "(< x 10) = " (< x 10))
(LOG "(>= x 42) = " (>= x 42))
(LOG "(>= x 43) = " (>= x 43))
(LOG "(<= x 42) = " (<= x 42))
(LOG "(<= x 41) = " (<= x 41))
(SET temp 28)
(IF (>= temp 30)
(LOG "WARNING: Temperature too high!")
(IF (<= temp 15)
(LOG "WARNING: Temperature too low!")
(LOG "Temperature is within range.")
)
)
View code
(SET a 1)
(SET b 0)
(LOG "AND truth table:")
(LOG " (AND 1 1) = " (AND 1 1))
(LOG " (AND 1 0) = " (AND 1 0))
(LOG " (AND 0 0) = " (AND 0 0))
(LOG "OR truth table:")
(LOG " (OR 1 1) = " (OR 1 1))
(LOG " (OR 1 0) = " (OR 1 0))
(LOG " (OR 0 0) = " (OR 0 0))
(LOG "NOT truth table:")
(LOG " (NOT 0) = " (NOT 0))
(LOG " (NOT 1) = " (NOT 1))
(SET temp 25)
(SET humidity 70)
(LOG "temp > 20 AND humidity > 60: " (AND (> temp 20) (> humidity 60)))
(SET light 500)
(SET motion 1)
(IF (AND (> light 400) (== motion 1))
(LOG "Conditions met: bright and motion detected")
(LOG "Conditions not met")
)
(SET fan_on 0)
(IF (NOT fan_on)
(LOG "Fan is OFF — turning it on now")
(LOG "Fan is already ON")
)
View code
(SET raw_adc 512)
(SET pwm_val (MAP raw_adc 0 1023 0 255))
(LOG "ADC 512 maps to PWM: " pwm_val)
(SET unconstrained 500)
(SET clamped (CONSTRAIN unconstrained 0 255))
(LOG "500 constrained to [0,255] = " clamped)
(SET dice (RANDOM 1 6))
(LOG "Dice roll: " dice)
(SET x 15)
(SET y 42)
(LOG "MIN(15, 42) = " (MIN x y))
(LOG "MAX(15, 42) = " (MAX x y))
(LOG "ABS(-42) = " (ABS -42))
(LOG "ABS(10) = " (ABS 10))
(SET sensor (READ A 0))
(SET output (CONSTRAIN (MAP sensor 0 1023 0 255) 0 255))
(LOG "Sensor: " sensor " -> PWM: " output)
(SET setpoint 100)
(SET current 75)
(SET error (ABS (- setpoint current)))
(LOG "Error magnitude: " error)
View code
03 — Control Flow
IF, WHILE, FOR, BREAK, COND
(SET temp 25)
(LOG "Temperature: " temp " C")
(IF (> temp 30)
(LOG "It is hot!")
)
(IF (> temp 30)
(LOG "Hot — fan ON")
(LOG "Cool — fan OFF")
)
(SET level (READ A 0))
(IF (> level 800)
(LOG "NIGHT: LED ON, street lights active")
(IF (> level 400)
(LOG "DUSK: LED ON dimly")
(LOG "DAY: LED OFF")
)
)
(SET status (IF (> temp 25) 1 0))
(LOG "Status: " status)
View code
(SET count 5)
(LOG "Countdown:")
(WHILE (> count 0)
(DO
(LOG count "...")
(SET count (- count 1))
)
)
(LOG "LIFTOFF!")
(SET threshold 300)
(SET reading 500)
(SET attempts 0)
(WHILE (> reading threshold)
(DO
(SET reading (- reading 100))
(SET attempts (+ attempts 1))
(LOG "Attempt #" attempts ": reading=" reading)
)
)
(LOG "Threshold reached after " attempts " attempts")
View code
(LOG "Counting 0 to 4:")
(FOR i 0 5
(LOG "i = " i)
)
(SET sum 0)
(FOR i 0 10
(SET sum (+ sum i))
)
(LOG "Sum 0..9 = " sum)
(SET product 1)
(FOR i 1 6
(SET product (* product i))
)
(LOG "1*2*3*4*5 = " product)
(LOG "LED chase on pins 9,10,11:")
(FOR i 0 3
(DO
(WRITE D (+ 9 i) 1)
(DELAY 200)
(WRITE D (+ 9 i) 0)
)
)
(LOG "Chase complete")
View code
(LOG "--- BREAK Demo ---")
(SET i 0)
(WHILE (< i 100)
(DO
(IF (== i 5)
(DO
(LOG "Breaking at i=5!")
(BREAK)
)
)
(SET i (+ i 1))
)
(LOG "WHILE exited at i=" i))
(LOG "--- CONTINUE Demo ---")
(FOR i 0 10
(DO
(IF (== (% i 2) 0)
(CONTINUE)
)
(LOG "Odd number: " i)
)
)
(LOG "--- Nested BREAK Demo ---")
(SET outer_count 0)
(SET break_count 0)
(WHILE (< outer_count 3)
(DO
(SET inner 0)
(WHILE (< inner 10)
(DO
(IF (== inner 2) (BREAK))
(SET inner (+ inner 1))
(SET break_count (+ break_count 1))
)
)
(SET outer_count (+ outer_count 1))
)
)
(LOG "Inner iterations per outer: 2 (break at 2)")
(LOG "Total inner steps: " break_count)
View code
(SET command 2)
(COND
((== command 1) (LOG "Command: START motor"))
((== command 2) (LOG "Command: STOP motor"))
((== command 3) (LOG "Command: REVERSE motor"))
(1 (LOG "Command: UNKNOWN — no action"))
)
(SET state 0)
(LOG "--- State Machine ---")
(SET tick 0)
(WHILE (< tick 5)
(DO
(SET tick (+ tick 1))
(COND
((== state 0)
(DO
(LOG "State: IDLE -> RUNNING")
(SET state 1)
)
)
((== state 1)
(DO
(LOG "State: RUNNING -> tick=" tick)
(IF (>= tick 3) (SET state 2))
)
)
((== state 2)
(DO
(LOG "State: STOPPED -> IDLE")
(SET state 0)
)
)
)
)
)
(LOG "State machine demo complete.")
View code
04 — Functions
DEFUN and recursion
(DEFUN BLINK (pin count delay_ms)
(WHILE (> count 0)
(DO
(WRITE D pin 1) (DELAY delay_ms)
(WRITE D pin 0) (DELAY delay_ms)
(SET count (- count 1))
)
)
)
(DEFUN CELSIUS_TO_FAHRENHEIT (c)
(+ (/ (* c 9) 5) 32)
)
(DEFUN MAX3 (a b c)
(IF (AND (>= a b) (>= a c))
a
(IF (>= b c) b c)
)
)
(BLINK 13 3 200)
(LOG "Blink done.")
(SET temp_c 25)
(SET temp_f (CELSIUS_TO_FAHRENHEIT temp_c))
(LOG temp_c "C = " temp_f "F")
(SET m (MAX3 10 42 7))
(LOG "Max(10, 42, 7) = " m)
View code
(DEFUN FACTORIAL (n)
(IF (<= n 1) 1 (* n (FACTORIAL (- n 1))))
)
(DEFUN FIB (n)
(IF (<= n 2) n (+ (FIB (- n 1)) (FIB (- n 2))))
)
(DEFUN POWER (base exp)
(IF (== exp 0) 1 (* base (POWER base (- exp 1))))
)
(DEFUN PULSE (pin count)
(IF (> count 0)
(DO
(WRITE D pin 1) (DELAY 100)
(WRITE D pin 0) (DELAY 100)
(PULSE pin (- count 1))
)
)
)
(LOG "5! = " (FACTORIAL 5))
(LOG "fib(10) = " (FIB 10))
(LOG "2^8 = " (POWER 2 8))
(PULSE 13 5)
(LOG "Pulse sequence complete.")
View code
05 — Sensors
Read the physical world
(SET sensor_pin 0)
(SET led_pin 13)
(SET buzzer_pin 11)
(SET alarm_threshold 30)
(LOG "=== LM35 Temperature Monitor ===")
(WHILE 1
(DO
(SET temp (LM35 sensor_pin))
(LOG "Temperature: " temp " C")
(IF (>= temp alarm_threshold)
(DO
(LOG "!! OVERHEAT WARNING !!")
(WRITE D led_pin 1)
(TONE buzzer_pin 1000 200)
)
(WRITE D led_pin 0)
)
(DELAY 1000)
)
)
View code
(SET trig_pin 7)
(SET echo_pin 8)
(SET led_pin 13)
(SET buzzer_pin 11)
(SET warning_dist 20)
(LOG "=== Ultrasonic Distance Sensor ===")
(WHILE 1
(DO
(SET dist (ULTRASONIC trig_pin echo_pin))
(LOG "Distance: " dist " cm")
(IF (AND (<= dist warning_dist) (> dist 0))
(DO
(LOG "!! OBJECT TOO CLOSE !!")
(WRITE D led_pin 1)
(TONE buzzer_pin (MAP dist 0 20 2000 500) 100)
)
(WRITE D led_pin 0)
)
(DELAY 100)
)
)
View code
(SET ldr_pin 0)
(SET led_pin 13)
(SET dark_threshold 800)
(SET bright_threshold 400)
(SET is_on 0)
(LOG "=== Smart Night Light ===")
(WHILE 1
(DO
(SET light (READ A ldr_pin))
(IF (AND (>= light dark_threshold) (== is_on 0))
(DO
(WRITE D led_pin 1)
(SET is_on 1)
(LOG "NIGHTFALL (LDR=" light ") — LED ON")
)
)
(IF (AND (<= light bright_threshold) (== is_on 1))
(DO
(WRITE D led_pin 0)
(SET is_on 0)
(LOG "SUNRISE (LDR=" light ") — LED OFF")
)
)
(DELAY 500)
)
)
View code
(SET data_pin 4)
(SET sensor_type 22)
(LOG "=== DHT22 Sensor Reading ===")
(WHILE 1
(DO
(DHT-READ data_pin sensor_type)
(LOG "DHT22 reading complete on pin " data_pin)
(DELAY 2000)
)
)
View code
06 — Actuators
Servo, PWM, NeoPixel, Relay
(SET servo_pin 9)
(LOG "=== Servo Sweep Demo ===")
(FOR angle 0 181
(DO
(SERVO servo_pin angle)
(DELAY 15)
)
)
(LOG "Sweep complete — returning to 0.")
(SERVO servo_pin 0)
(DELAY 500)
View code
(SET fan_pin 9)
(SET sensor_pin 0)
(LOG "=== PWM Fan Controller ===")
(WHILE 1
(DO
(SET temp (LM35 sensor_pin))
(IF (>= temp 35)
(DO
(WRITE P fan_pin 255)
(LOG "CRITICAL: Fan 100% — Temp: " temp "C")
)
(IF (>= temp 28)
(DO
(SET speed (CONSTRAIN (MAP temp 28 35 128 255) 0 255))
(WRITE P fan_pin speed)
(LOG "WARM: Fan " speed "/255 — Temp: " temp "C")
)
(IF (>= temp 22)
(DO
(SET speed (CONSTRAIN (MAP temp 22 28 50 128) 0 255))
(WRITE P fan_pin speed)
(LOG "MILD: Fan " speed "/255 — Temp: " temp "C")
)
(DO
(WRITE P fan_pin 0)
(LOG "COOL: Fan OFF — Temp: " temp "C")
)
)
)
)
(DELAY 1000)
)
)
View code
(SET neo_pin 6)
(LOG "=== NeoPixel Color Demo ===")
(NEO-SET neo_pin 0 255 0)
(NEO-SHOW neo_pin)
(LOG "Red")
(DELAY 1000)
(NEO-SET neo_pin 255 0 0)
(NEO-SHOW neo_pin)
(LOG "Green")
(DELAY 1000)
(NEO-SET neo_pin 0 0 255)
(NEO-SHOW neo_pin)
(LOG "Blue")
(DELAY 1000)
(LOG "Fading through RGB...")
(FOR r 0 255
(DO (NEO-SET neo_pin r 0 0) (NEO-SHOW neo_pin))
)
(FOR g 0 255
(DO (NEO-SET neo_pin 0 g 0) (NEO-SHOW neo_pin))
)
(FOR b 0 255
(DO (NEO-SET neo_pin 0 0 b) (NEO-SHOW neo_pin))
)
(NEO-SET neo_pin 0 0 0)
(NEO-SHOW neo_pin)
(LOG "Color demo complete.")
View code
(SET relay_pin 7)
(SET button_pin 2)
(SET state 0)
(LOG "=== Relay Toggle Switch ===")
(PIN-MODE button_pin 0)
(PIN-MODE relay_pin 1)
(WRITE D relay_pin 1)
(WHILE 1
(DO
(SET btn (READ D button_pin))
(IF (== btn 1)
(DO
(SET state (IF (== state 0) 1 0))
(WRITE D relay_pin (IF (== state 1) 0 1))
(IF (== state 1)
(LOG "Relay ON — device powered")
(LOG "Relay OFF — device disconnected")
)
(DELAY 300)
)
)
(DELAY 50)
)
)
View code
07 — Communication
LCD, I2C, SPI, SD
(LOG "=== LCD Display Demo ===")
(LCD-INIT 7 6 5 4 3 2)
(LCD-CLEAR)
(LCD-PRINT 0 0 "HIL-OS v11")
(SET count 0)
(WHILE (< count 10)
(DO
(LCD-CLEAR)
(LCD-PRINT 0 0 "HIL-OS v11")
(LCD-PRINT 1 0 "Count: " count)
(DELAY 500)
(SET count (+ count 1))
)
)
(LCD-CLEAR)
(LCD-PRINT 0 0 "Demo Complete!")
(LOG "LCD demo finished.")
View code
(SET rtc_addr 0x68)
(LOG "=== I2C RTC Reader ===")
(I2C-WRITE rtc_addr 0x00 0x00)
(SET seconds (I2C-READ rtc_addr 0x00))
(LOG "Raw seconds: " seconds)
(I2C-WRITE rtc_addr 0x01 0x00)
(SET minutes (I2C-READ rtc_addr 0x01))
(LOG "Raw minutes: " minutes)
(WHILE 1
(DO
(SET ts (RTC-READ))
(LOG "RTC timestamp: " ts)
(DELAY 5000)
)
)
View code
08 — Projects
Complete real-world applications
(LOG ">> Initiating Emergency SOS Beacon...")
(SET led_pin 13)
(SET buz_pin 11)
(SET freq 750)
(SET unit_ms 100)
(SET dash_ms (* unit_ms 3))
(DEFUN DOT ()
(DO
(WRITE D led_pin 1)
(TONE buz_pin freq unit_ms)
(WRITE D led_pin 0)
(DELAY unit_ms)
)
)
(DEFUN DASH ()
(DO
(WRITE D led_pin 1)
(TONE buz_pin freq dash_ms)
(WRITE D led_pin 0)
(DELAY unit_ms)
)
)
(DEFUN LETTER_S ()
(DO (DOT) (DOT) (DOT) (DELAY (* unit_ms 2)) ))
(DEFUN LETTER_O ()
(DO (DASH) (DASH) (DASH) (DELAY (* unit_ms 2)) ))
(SET broadcasts 3)
(WHILE (> broadcasts 0)
(DO
(LOG " -> Transmitting: S O S")
(LETTER_S) (LETTER_O) (LETTER_S)
(DELAY (* unit_ms 4))
(SET broadcasts (- broadcasts 1))
)
)
(LOG ">> Beacon transmission complete.")
View code
(SET temp_sensor 0)
(SET fan_pin 13)
(SET buzzer_pin 11)
(SET fan_state 0)
(SET high_threshold 28)
(SET low_threshold 26)
(LOG "=== Digital Thermostat ===")
(LOG "High: " high_threshold "C | Low: " low_threshold "C")
(WHILE 1
(DO
(SET temp (LM35 temp_sensor))
(IF (AND (>= temp high_threshold) (== fan_state 0))
(DO
(WRITE D fan_pin 1)
(SET fan_state 1)
(LOG ">>> HIGH TEMP: " temp "C — FAN ON")
(TONE buzzer_pin 500 100)
)
)
(IF (AND (<= temp low_threshold) (== fan_state 1))
(DO
(WRITE D fan_pin 0)
(SET fan_state 0)
(LOG "<<< LOW TEMP: " temp "C — FAN OFF")
)
)
(DELAY 1000)
)
)
View code
(SET red 13) (SET yellow 12) (SET green 11)
(SET state 0) (SET timer 0)
(LOG "=== Traffic Light Controller ===")
(WRITE D red 0) (WRITE D yellow 0) (WRITE D green 0)
(SET cycles 0)
(WHILE (< cycles 5)
(DO
(COND
((== state 0)
(DO
(WRITE D green 1) (WRITE D yellow 0) (WRITE D red 0)
(LOG "GREEN — Go (" timer "s)")
(IF (>= timer 3) (DO (SET state 1) (SET timer 0)))
(DELAY 1000) (SET timer (+ timer 1))
)
)
((== state 1)
(DO
(WRITE D green 0) (WRITE D yellow 1) (WRITE D red 0)
(LOG "YELLOW — Caution (" timer "s)")
(IF (>= timer 1) (DO (SET state 2) (SET timer 0)))
(DELAY 1000) (SET timer (+ timer 1))
)
)
((== state 2)
(DO
(WRITE D green 0) (WRITE D yellow 0) (WRITE D red 1)
(LOG "RED — Stop (" timer "s)")
(IF (>= timer 3) (DO (SET state 0) (SET timer 0) (SET cycles (+ cycles 1))))
(DELAY 1000) (SET timer (+ timer 1))
)
)
)
)
)
(WRITE D red 0) (WRITE D yellow 0) (WRITE D green 0)
(LOG "Shut down after " cycles " cycles.")
View code
(SET sensor_pin 0)
(SET heater_pin 9)
(SET setpoint 25)
(LOG "=== PID Temperature Controller ===")
(LOG "Target: " setpoint "C")
(PID-INIT 0 heater_pin sensor_pin 2.0 0.5 0.1)
(CLOSED-LOOP 0 setpoint)
(LOG "PID engaged.")
(SET cycles 30)
(WHILE (> cycles 0)
(DO
(SET temp (LM35 sensor_pin))
(SET error (ABS (- setpoint temp)))
(LOG "Temp: " temp "C | Error: " error "C")
(IF (> error 5)
(LOG "WARNING: Large error — PID may need tuning!")
)
(DELAY 1000)
(SET cycles (- cycles 1))
)
)
(OPEN-LOOP 0 0)
(LOG "PID disengaged. Heater OFF.")
View code
(SET trig 7) (SET echo 8) (SET buz 11) (SET led 13)
(SET safe_dist 50) (SET warn_dist 30) (SET danger_dist 10)
(LOG "=== Parking Sensor ===")
(WHILE 1
(DO
(SET dist (ULTRASONIC trig echo))
(IF (> dist safe_dist)
(WRITE D led 0)
(IF (> dist warn_dist)
(DO
(WRITE D led 1)
(TONE buz (MAP dist warn_dist safe_dist 800 400) 100)
(LOG "WARN: " dist "cm")
)
(IF (> dist danger_dist)
(DO
(WRITE D led 1)
(TONE buz (MAP dist danger_dist warn_dist 2000 1000) 50)
(LOG "DANGER: " dist "cm")
)
(DO
(WRITE D led 1)
(TONE buz 3000 200)
(LOG "CRITICAL: " dist "cm — STOP!")
)
)
)
)
(DELAY 100)
)
)
View code
(SET shoulder 9) (SET elbow 10) (SET gripper 11)
(LOG "=== Robot Arm Demo ===")
(SERVO shoulder 90) (SERVO elbow 90) (SERVO gripper 90)
(DELAY 500)
(DEFUN GRIP_CLOSE ()
(DO (LOG "Gripper: closing")
(FOR angle 90 10 (SERVO gripper angle))
)
)
(DEFUN GRIP_OPEN ()
(DO (LOG "Gripper: opening")
(FOR angle 10 90 (SERVO gripper angle))
)
)
(LOG "--- Pick and Place ---")
(LOG "Reaching forward...")
(FOR angle 90 30 (DO (SERVO shoulder angle) (DELAY 15)))
(LOG "Lowering arm...")
(FOR angle 90 140 (DO (SERVO elbow angle) (DELAY 15)))
(GRIP_CLOSE) (DELAY 300)
(LOG "Lifting...")
(FOR angle 140 90 (DO (SERVO elbow angle) (DELAY 15)))
(LOG "Rotating...")
(FOR angle 30 150 (DO (SERVO shoulder angle) (DELAY 15)))
(FOR angle 90 140 (DO (SERVO elbow angle) (DELAY 15)))
(GRIP_OPEN) (DELAY 300)
(LOG "Returning home...")
(FOR angle 140 90 (DO (SERVO elbow angle) (DELAY 15)))
(FOR angle 150 90 (DO (SERVO shoulder angle) (DELAY 15)))
(LOG "Pick and Place complete!")
View code
(SET sensor_pin 0) (SET sd_cs 10) (SET log_interval 5000) (SET alarm_temp 30)
(LCD-INIT 7 6 5 4 3 2)
(LCD-CLEAR)
(LCD-PRINT 0 0 "Data Logger v1.0")
(LOG "=== Data Logger ===")
(SD-WRITE sd_cs "timestamp,temp_c,status")
(DELAY 100)
(SET entry 0)
(WHILE 1
(DO
(SET temp (LM35 sensor_pin))
(SET ts (* entry 5))
(SET status "NORMAL")
(IF (>= temp alarm_temp) (SET status "ALERT"))
(SD-WRITE sd_cs ts "," temp "," status)
(LCD-CLEAR)
(LCD-PRINT 0 0 "Temp: " temp " C")
(LCD-PRINT 1 0 "Log #" entry " " status)
(LOG "[" ts "ms] " temp "C [" status "]")
(IF (== status "ALERT")
(DO (TONE 11 1000 200) (WRITE D 13 1) (DELAY 200) (WRITE D 13 0))
)
(SET entry (+ entry 1))
(DELAY log_interval)
)
)
View code
(SET led 13) (SET buz 11)
(LOG "========================================")
(LOG " HIL-OS Interactive Menu System")
(LOG "========================================")
(LOG "")
(LOG " 1. Blink LED (fast)")
(LOG " 2. Blink LED (slow)")
(LOG " 3. Play scale")
(LOG " 4. Sensor read")
(LOG " 5. Math demo")
(LOG " 6. Rainbow LEDs")
(SET selection 4)
(COND
((== selection 1) (DO (LOG ">> Fast blink") (BLINK led 10 100)))
((== selection 2) (DO (LOG ">> Slow blink") (BLINK led 5 500)))
((== selection 3)
(DO (LOG ">> Playing scale")
(TONE buz 262 200) (DELAY 250)
(TONE buz 294 200) (DELAY 250)
(TONE buz 330 200) (DELAY 250)
(TONE buz 349 200) (DELAY 250)
(TONE buz 392 200) (DELAY 250)
(TONE buz 440 400)
)
)
((== selection 4)
(DO (LOG ">> Sensor readings:")
(LOG " LM35: " (LM35 0) "C")
(LOG " LDR: " (READ A 0))
(LOG " Ultra: " (ULTRASONIC 7 8) "cm")
)
)
((== selection 5)
(DO (LOG ">> Math operations:")
(LOG " 17 + 5 = " (+ 17 5))
(LOG " 17 - 5 = " (- 17 5))
(LOG " 17 * 5 = " (* 17 5))
(LOG " 17 / 5 = " (/ 17 5))
(LOG " 17 % 5 = " (% 17 5))
(LOG " MAX(17,5) = " (MAX 17 5))
(LOG " MIN(17,5) = " (MIN 17 5))
(LOG " ABS(-42) = " (ABS -42))
)
)
((== selection 6)
(DO (LOG ">> Rainbow LED demo")
(SET i 0)
(WHILE (< i 5)
(DO
(WRITE P led (MAP i 0 4 50 255))
(DELAY 300)
(SET i (+ i 1))
)
)
(WRITE P led 0)
)
)
(1 (LOG ">> Invalid selection!"))
)
(LOG "Menu demo complete.")
View code
(LOG ">> Initiating Golden Ratio Soundscape...")
(DEFUN FIB (n)
(IF (<= n 2) n (+ (FIB (- n 1)) (FIB (- n 2))))
)
(DEFUN FIB_TO_FREQ (n)
(COND
((== n 1) 262) ((== n 2) 294) ((== n 3) 330)
((== n 5) 349) ((== n 8) 392) ((== n 13) 440)
((== n 21) 494) ((== n 34) 523) (1 587)
)
)
(SET n 1)
(WHILE (<= n 10)
(DO
(SET fib_val (FIB n))
(SET freq (FIB_TO_FREQ fib_val))
(SET duration (MIN (* fib_val 50) 500))
(LOG "Note " n ": fib=" fib_val " freq=" freq "Hz")
(TONE 11 freq duration)
(DELAY (* duration 2))
(SET n (+ n 1))
)
)
(LOG ">> Golden Ratio Soundscape complete.")
View code
(LOG "=== Interrupt-Driven System ===")
(DEFUN ESTOP ()
(DO
(LOG "!!! E-STOP TRIGGERED !!!")
(WRITE D 13 0) (WRITE D 9 0)
(TONE 11 2000 500)
(EXIT)
)
)
(DEFUN LIGHT_SHIFT ()
(DO
(LOG "Ambient light shift detected")
(TONE 11 440 100)
)
)
(ON-EVENT 2 2 "ESTOP")
(ON-CHANGE A 0 150 "LIGHT_SHIFT")
(LOG "Interrupts armed.")
(SET running 1)
(SET cycle 0)
(WHILE (> running 0)
(DO
(SET cycle (+ cycle 1))
(WRITE D 13 1) (DELAY 500)
(WRITE D 13 0) (DELAY 500)
(LOG "Cycle " cycle " — running")
(IF (>= cycle 20)
(DO (LOG "Auto-shutdown.") (SET running 0))
)
)
)
(LOG "System halted.")
View code