Arduino kontrollerade Bell Tower/Carillon (4 / 5 steg)
Steg 4: Software Design
Målet för detta var att ha klocktornet driven från datorn. Arduino's USB--> seriell länk var det perfekta sättet att göra detta.
Arduino får seriella data från den dator som motsvarar som noterar att spela. Protokollet är enkelt; Anteckningarna är alla i motsvarigheterna ascii-text. Det finns också ett numeriska tal som en variabel fördröjning.
T.ex. den PC skickar: "cde2fgABC" och Arduino spelar bells 1,2,3, vilar för halva en anteckning och spelar sedan bells 4,5,6,7 & 8.
Tips på hatten till John Plocher för sitt ServoBells projekt, som delvis inspirerat detta projekt.
Arduino Side-koden:
Arduino koden mottar seriella, avkodar vilken anteckning eller dröjsmål att spela, och sedan växlar till magnetventiler på lämpligt sätt.
På tal om det. Se till att din kod är utformat så att magnetventiler inte är hålls i!. Om du lämnar en magnetventil på av misstag, det smälter . Jag löste detta genom att göra min anmärkning rutiner block tills nödsänkningssolenoiden är avslagen, snarare än att ständigt polling, etc.
PC-sidan kod:
Klientprogram skrevs i C#. Den har knappar för varje enskild ton, samt knappar för förprogrammerade melodier. Obs data skickas till den seriella porten.
Källkoden för allt fästas.
Utrymme för förbättringar:
- Polyfoniska anteckningar
Jag lämnade bort möjligheten för två anteckningar att spelas samtidigt, som jag inte trodde att någon kan passa in på 1 oktav låtar skulle förutsätta. Dessutom skjuter mer än en magnetventil kan
- Döda kön
Datorn skickar stora meningarna i anteckningar till arduino, som sedan behandlar dem tills kön mynnar ut. Men för stora låtar kan detta vara tröttsamt och det kan vara önskvärt för att kunna avbryta en rinnande melodi. Detta skulle kunna åstadkommas genom att ha några andra bokstaven i följetong meningen (e.g. "x") som en kod för att tömma bufferten.