Stap 15: programmeren
Enkel de firmware naar het flash.
De code is vrij uitgebreid, ik zal een overzicht geven van de volledige code.
Volledige firmware: https://github.com/victornpb/sketch_aug20b_som_rem...
displayRoutine.ino bevat:
- ledBlink - handvatten led knipperen en time out asynchroon
- currentViewMode - een van de mogelijke ones:
- VIEWMODE_NORMAL, toont het huidige volume, ga naar VIEW_IDLE
- VIEWMODE_ANIM_MUTE, afwisselend streepjes en het huidige volume in een gedefinieerde interval
- VIEWMODE_ANIM_VOLUP, de animatie en schakel over naar de VIEWMODE_NORMAL
- VIEWMODE_ANIM_VOLDW, de anim achteruit weergeven en schakel over naar de VIEWMODE_NORMAL
- VIEWMODE_LOCKED, van het display, en de decimaaltekens inschakelen
- VIEWMODE_IDLE, de display zal niet veranderen wat er momenteel op de buffer wordt weergegeven.
framesLenght en frames [] [2] is de werkelijke animatie en lengte.
- displayRoutine()
- functie aangeroepen op de hoofdlus het zal omgaan met de time-outs en noem het sevenSeg_displayHold() waarmee de gegevens op de eigenlijke weergave worden weergegeven.
sevenSeg.ino bevat:
Deze schets van de arduino software naar Station 7-segmenten display biedt multiplexing, asynchroon, en vereist geen niet externe hardware of timer interrupts. Slechts een enkel segment staat op op tijd, dit kan de display gedraaid worden met alleen de pinnen huidige, en vereist alleen een één weerstand per vertoning op de gemeenschappelijke pin, maakt het ook mogelijk het scherm te gebruiken een fractie van de volledige kracht.
- sevenSeg_font [] array met daarin een bitmap die vertegenwoordigen elk cijfer
- beelddata [] - byte buffer van elke 7 segment display
- sevenSeg_setNumber()-functie waarin de beelddata buffer met de juiste sevenSeg_font bitmap
- sevenSeg_displayHold() functie waarmee de multiplexing om te tekenen van elk cijfer met een vertraging van de assyncronous tussen segmenten worden uitgevoerd
EVC.ino bevat:
Bibliotheek voor het gebruik van PT2257 - elektronische Controller IC van het Volume.
- VOID evc_setVolume (uint8_t dB);
- VOID evc_setVolumeLeft (uint8_t dB);
- VOID evc_setVolumeRight (uint8_t dB);
- VOID evc_mute (bool wisselknop);
- nietig evc_off();
Remote.Ino bevat:
- Enum LgRemote
- Enum AiwaRemote
- lgMenu
De pijlen omhoog en omlaag om het volume worden gebruikt, maar wanneer op de menutoets wordt gedrukt, deze sleutels worden gebruikt om te navigeren door het menu, deze naamruimte wordt gebruikt om te verwerken wanneer een menutoets is ingedrukt en momentarly reageert niet meer tot de / DW sleutels om conflicten te voorkomen bij het navigeren in menu.
- onModeLocked
- onModeLockedOff
- routine()
- processKey (niet-ondertekende long-waarde, lange currentMillis)
- byte processRemote() deze functie wordt aangeroepen op elke lus en handgrepen en verzending die alles in verband met IR evenementen
sketch_aug20b_som_remote4.Ino
- Enum Cmd {CMD_NONE, CMD_VOLUP, CMD_VOLDW, CMD_MUTE}
- byte modus
- State machine
----
Ik schreef de firmware in stukken die u gebruiken mag als je wilt om uw eigen firmware:
Bibliotheek voor het gebruik van PT2257 - elektronische Controller IC van het Volume:
https://github.com/victornpb/Evc_pt2257
Schets met goede patroon met één of meer afstandsbedieningen acties uitvoeren:
https://github.com/victornpb/generic_remote_contro...
Dit arduino schets biedt software naar Station 7-segmenten display met multiplexing, geen externe driver vereist naar Station 1 of een paar weergegeven. Geen hardware-interrupt vereist, asynchrone uitvoering:
https://github.com/victornpb/ledDisp
Arduino voorbeeldcode om te rijden een 7-segmenten display, uit een bitmap-matrix: