Stap 3: C-programmering
De code is geschreven in C als ik niet de zorg voor het leren van de "gemakkelijker" processing taal welke arduino is gebaseerd op. Ik schreef de SPI en rf tranceiver interface zelf voor de leerervaring, maar geleend de i2c assembler-code van de avrfreaks.net. De shiftbright-interface is bitbanged in C-code.Één probleem dat ik tegenkwam was kleine irradic variaties in versnellingsmeter-uitgang, dit maakte het lampje van alot Vleug. Ik heb dit opgelost met een software low-pass filter. Een zwevend gewogen gemiddelde van de versnellingsmeter-waarden.
De rf-tranceiver ondersteuning hardware crc en ack met auto-retransmit, maar voor dit project de realtime, soepele aanpassing van de leds belangrijker was. Elk pakket met versnellingsmeter waarden hoeft niet te komen intact op de doellocatie, zolang beschadigde pakketten is verwijderd. Ik had geen problemen met verloren RF pakketten binnen 20 meter lijn van het zicht. Maar verder weg de link werd unstable en de leds niet continu bijgewerkt.
De hoofdlus van de zender in pseudo-code:
Initialize();
while (true) {}
Waarden = abs (get x, y, z versnellingsmeter values());
RF_send(values);
delay(20ms);
}
De hoofdlus van de ontvanger in pseudo-code:
Initialize();
while (true) {}
nieuwe waarden = blocking_receiveRF());
rgbValues = rgbValues + 0.2*(newValues-rgbValues);
schrijven van rgbValues naar shiftbrigth;
}