Här kommer så äntligen källkoden...
Till att börja med är det koden till själva klockan, som alltså är ett arduino projekt:
digisport_timing_firmware.zip
Klockan pratar ju seriellt över RS232 med PC:n, och här följer en kort presentation av protokollet.
Hastigheten på serieporten är 19200 baud.
<cr> = Ascii tecken 13 (Carriage Return)
<space> = Blanksteg
Klockan skickar varje 1/10 sekund den aktuella tiden, i formatet "hh:mm:ss.t<cr>".
Varje gång en ingång aktiveras, skickas ett event i formatet "<space>####<space>Cx<space>hh:mm:ss.tttt<space>00<cr>".
#### är ett löpnummer som ökas för varje event (startar med 0001, 0002 osv). Cx indikerar vilken ingång (C0 - C7) som eventet avser (C8-C9 är två virtuella ingångar, se nedan).
Sedan finns ett fåtal kommandon man kan skicka tillbaka till klockan:
"TRx<cr>"
Detta kommando får klockan att skicka ett event på samma sätt som om en ingång aktiverats. x kan vara 0-9, där 8 och 9 är två virtuella ingångar som bara kan aktiveras med detta kommando.
"IMxy<cr>"
Med det här kommandot kan man ställa om en ingång skall vara N.C. eller N.O, dvs om den skall reagera på brytande eller slutande kontakter. x motsvarar ingång (0-7) och y är 1 (N.C) eller 0 (N.O). Senast satta värde sparas i EEPROM och laddas igen vid nästa uppstart.
"IDx#####<cr>"
En ingång måste vara oaktiv en viss tid innan den reagerar för en ny trigg (för att undvika dubbeltriggar med t.ex. fotoceller), och den tiden kan sättas med det här kommandot. X motsvarar ingången (0-7) och ##### tiden i millisekunder. Standard är 50 ms, och senast satta tid sparas i EEPROM. Notera att alla 5 siffor måste anges, så t.ex. 50 ms skrivs som 00050.
"GIM<cr>"
Det här kommandot får klockan att skicka en sträng bestående av den aktuella ingångstypen för varje ingång (det som sätts med IM kommandot ovan). Returdatat är en sträng med formatet "#GIMx,x,x,x,x,x,x,x<cr>" där varje x är 1 eller 0 för ingång 0 till 7.
"GID<cr>"
Fungerar på samma sätt som GIM men skickar värdet på delaytiden istället. Returdata är "#GIDx,x,x,x,x,x,x,x<cr>".
"GSI<cr>"
Skickar en sträng som innehåller systeminformation. Returdata startar med "#GSI" och följs av en text och avslutas med <cr>.
"SThhmmss<cr>"
Sätter tiden på klockan till angivet värde.
"SYhhmmss<cr>"
Sätter tiden på klockan till angivet värde, och stoppar klockan. Den kommer börja räkna när nästa aktivering kommer på ingång 0. Används om man vill synka flera klockor till samma tid. Notera att medans den är i synkläge skickas ingen data från klockan.
I min nästa post kommer källkoden för PC programmet.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.