commit 6da8d10f8419214ac53ddb83a08268800d36ecb2 Author: Reinout Meliesie Date: Sat Aug 23 19:05:48 2025 +0200 Initial serial-controlled version that works with Arduino IDE diff --git a/kulifuli-arduino.ino b/kulifuli-arduino.ino new file mode 100644 index 0000000..a87d8a6 --- /dev/null +++ b/kulifuli-arduino.ino @@ -0,0 +1,84 @@ +bool fanControlEntered = 0 ; + + +void setup () { + Serial . begin (9600) ; + + + // 122Hz @ 50% on pin 3 using T/C0 + + pinMode ( 3 , OUTPUT ) ; // 0C0B is connected to pin 3 + + TCCR0A = + 0 << COM0A1 | + 0 << COM0A0 | + 1 << COM0B1 | + 0 << COM0B0 | + 1 << WGM01 | + 1 << WGM00 ; + + TCCR0B = + 1 << WGM02 | + 1 << CS02 | + 0 << CS01 | + 1 << CS00 ; + + OCR0A = 127 ; + OCR0B = 63 ; + + + // 25kHz @ variable duty cycle on pins 9 and 10 using T/C1 + + pinMode ( 9 , OUTPUT ) ; // 0C1A is connected to pin 9 + pinMode ( 10 , OUTPUT ) ; // 0C1B is connected to pin 10 + + TCCR1A = + 1 << COM1A1 | + 0 << COM1A0 | + 1 << COM1B1 | + 0 << COM1B0 | + 0 << COM1C1 | + 0 << COM1C0 | + 1 << WGM11 | + 0 << WGM10 ; + + TCCR1B = + 1 << WGM13 | + 1 << WGM12 | + 0 << CS12 | + 1 << CS11 | + 0 << CS10 ; + + ICR1H = 0 ; + ICR1L = 79 ; + + OCR1AH = 0 ; + OCR1AL = 39 ; + OCR1BH = 0 ; + OCR1BL = 39 ; +} + + +void loop () { + if ( Serial . available () ) { + if (fanControlEntered) { + int dutyCyclePercent = Serial . parseInt () ; + int dutyCycle = map ( dutyCyclePercent , 0 , 100 , 0 , 79 ) ; + OCR1AL = dutyCycle ; + OCR1BL = dutyCycle ; + Serial . read () ; // Consume newline + + Serial . print ("duty-cycle ") ; + Serial . print (dutyCycle) ; + Serial . print ('\n') ; + } else { + String input = Serial . readString () ; + if ( input == "enter-fan-control" ) { + fanControlEntered = 1 ; + Serial . println ("success") ; + } else { + Serial . println ("error") ; + } + } + } +}