Stap 3: De elektronica en programma uitgelegd
Zoals uitgelegd dat ben ik met behulp van een Arduino Nano (of kloon) station 3 * 595 shift registreert en een RTC verbonden met de I2C tijd te houden. Op dit punt zal ik proberen en uitleggen van de meer uitdagende delen van de code, zoals het is niet duidelijk uit, te werken (hoewel gemakkelijk zodra u het uit te werken).
De tijd wordt geleverd door de real-time klok 0-59 seconden, minuten 0-59, en uren 0-23. Omdat de klok is gebaseerd op 5's die u wilt verdelen van de minuten (en uur) door 5 eerst geeft dit je de "5 minuten" rij (tweede
een up) als u vervolgens uitwerken van de absolute waarde van de berekening dan die geeft je de rest die de 0-4 minuten (bodemlijn).
d.w.z. minuten = 48
48/5 = 9 (opslaan als minFives)
48 %5 = 3 (opslaan als minUnits)
9 verlichting op de tweede rij voor 45 minuten dan 3 lampjes op de onderste rij gedurende 3 minuten, voeg de twee samen geeft u 48.
verblijf bij de notulen die het volgende probleem is de 595 verschuiving registreren alleen 8 bits houdt en mij nood voor toepassing een volledig en dan 3 "bits" van een ander registreren.
Om te doen deze blik bij de minFives (0-11) en als het getal groter dan 7 is dan de waarde gesplitst in twee waarden.
dat wil zeggen als (minFives > 7)
De volgende kwestie is het weergeven van alle lichten en niet alleen het feitelijke aantal, dus in het bovenstaande voorbeeld (48) hebt u 3 lampjes op de onderste rij en 9 lichten op de tweede rij. Dus om dit te corrigeren voor de onderste rij die u wilt inschakelen van lichte 1en 2 licht en licht 3, wat betekent dat een aantal 7 (total 1 + 2 + 4) moet worden gestuurd naar de seriële register. Ik ben zeker dat er meer dan één manier om dit te doen maar ik koos voor het uitvoeren van een lus voor de gegeven nummer en voor elke lus dubbele het indexnummer en toevoegen aan het bestand. (zie hieronder voor de pow() functie als alternatief)
dat wil zeggen
Hopelijk kunt u dit uit te werken, maar in principe krijg je het juiste vereiste aantal LED's verlicht voor een bepaald gegeven getal.
dat wil zeggen 1 = 1, 2 = 3, 3 = 7, 4 = 15, 5 = 31
Ik realiseerde me nadat ik dit schreef dat ik gebruiken de pow()-functie, kon dus ik zal nog een keer te proberen en zien of zijn efficiënter. in het volgende voorbeeld, ingang 6 (pow(2,6)) -1 = 63
(Ik probeerde het uit en er niet echt veel verschil in de tijd, beide zijn echt snel. Ik denk dat de pow() ziet er netter maar ik geplakt met de bovenstaande functie)