Stap 4: Softwareontwerp
Het doel van dit was om de klokkentoren verdreven van de PC. Arduino van USB -> seriële verbinding was de ideale manier om dit te doen.
De arduino seriële gegevens worden ontvangen van de PC die correspondeert met welke notities om te spelen. Het protocol is eenvoudig; de noten zijn allemaal in hun equivalenten van ASCII-tekst. Er is ook een numerieke getal als een variabele vertraging.
Bijvoorbeeld de PC stuurt: "cde2fgABC" en de Arduino speelt klokken 1,2,3, rust voor de helft een notitie en vervolgens speelt klokken 4,5,6,7 & 8.
Tip van de hoed aan John Plocher voor zijn ServoBells-project, dat deels geïnspireerd van dit project.
Arduino Side-Code:
De arduino-code de seriële gegevens ontvangt, decodeert welke opmerking of de vertraging te spelen, en klik vervolgens op de juiste manier knevels de elektromagneten.
Spreken over die. Zorg ervoor dat uw code is zo ontworpen dat elektromagneten niet opgeslagen in de worden!. Als u niets opgeeft bij een solenoïde op per ongeluk, het zal smelten. Ik heb dit opgelost door mijn opmerking routines blok tot de solenoïde wordt uitgeschakeld, in plaats van constant stembureaus, enz.
PC Side-Code:
Het clientprogramma is geschreven in C#. Het heeft knoppen voor elke afzonderlijke noot, evenals knoppen voor voorgeprogrammeerde melodieën. De opmerking gegevens worden verzonden naar de seriële poort.
De broncode voor alles is aangesloten.
Ruimte voor verbetering:
- Polyfone notities
Ik ben de vakgroep voor twee noten tegelijk worden gespeeld als ik denk niet dat elke muziek geschikt voor montage in 1 octaaf zou vereisen hen gebleven. Bovendien afvuren meerdere solenoïde kan
- Het doden van de wachtrij
De PC stuurt grote zinnen van tonen tot de arduino, die vervolgens ze verwerkt tot de wachtrij wordt leeggemaakt. Echter voor grote wijsjes dit kan vermoeiend en kan het wenselijk zijn om het onderbreken van een lopende tune te kunnen zijn. Dit kan worden bereikt door het hebben van sommige andere brief in de seriële zin (bijv: ' x') als een code voor het spoelen van de buffer.