Diagnostic blinking LED voor errors toevoegen
avandalen opened this issue · comments
Beste Rob
Zelf heb ik een Heartbeat library gemaakt met een toevoeging van een diagnostic blinking LED, zie mijn artikel:
https://www.avdweb.nl/arduino/hardware-interfacing/heartbeat
Zo kun je dus bij errors de LED laten knipperen (voor elke fout een ander knipper-getal) . Als de error voorbij is dan gaat de hearbeat weer gewoon verder.
Zou je dit kunnen inbouwen bij jouw library?
Zie hier op github
https://github.com/avandalen/avdweb_HeartBeat
groetjes
Albert
Wat je eigenlijk doet - als ik het goed begrijp - is een pauze inlassen en dan gedefinieerd aantal "error" pulsen.
zoals je in onderstaand plaatje uitlegt.
/* _ _ _ _ _
* ___| |_| |_| |_____| |_| |___ skip one flash to create pause
* blinkCounts 3 0 2 0
* reset reset
*/
Denk dat dat goed mogelijk is om te maken, moet wel requirements scherp krijgen.
In het verleden heb ik de frequentie van de heartBeat gebruikt om aantal Amperes (0.2 - 20 logarithmisch) aan te geven.
Project moest een gewicht heffen waarbij de belasting opliep en dat werkte heel mooi.
Voor error codes denk ik aan de oude PC BIOS diagnostics. - https://www.computerhope.com/beep.htm
een mix van korte en lange pulsen (morse achtig)
Dus hardop denkend kom ik uit op de volgende call:
uint8_t HB.errorCode( "SSLL");
void HB.erroCodeOff(); // voortijdig stoppen
- Short pulse = 1 pulselength (tijd bepaald door frequentie)
- Long pulse = 3 pulselengths
Hoe denk je over bovenstaand voorstel?
Even zitten kloppen en een eerste (non optimized) versie gemaakt in de develop branch.
zit ook een simpel test sketch bij.
Give it a try.
Een punt van aandacht is dat de footprint best omhoog lijkt te gaan (nog niet gemeten)
Voor de final implementatie lijkt een afgeleide class bv "HeartBeatDiag" optimaler.
compiling simple example voor UNO
new size = 3464 RAM = 300
0.2.1 size = 3214 RAM = 295
Verschil in RAM is evident voor variabelen. 450 bytes meer code is toch veel => derived class
derived class zit nu in develop branch.
Ik heb even gedacht over deze interface
uint8_t HB.errorCode( uint32_t pattern);
HB.errorCode( 111333111 );
HB.errorCode( 131517191 );
HB.errorCode( 1133 );
het getal wordt decimaal uitgelezen om de pulslengte aan te geven. Ieder digit is tijdsduur.
Een 0 zou bv extra pauze kunnen zijn
Dan zijn heel veel meer patronen mogelijk, terwijl het voor de gebruiker goed te begrijpen is.
@avandalen
Mening?
@avandalen
implemented de numerieke versie in branch - https://github.com/RobTillaart/HeartBeat/tree/dev2
versies tot nu toe (compiling simpleHeartBeat.ino IDE 1.18.19 for UNO)
versie | SIZE | RAM | branch |
---|---|---|---|
0.2.1 | 3214 | 295 | master |
string | 3464 | 300 | develop |
nummeriek | 3824 | 305 | dev2 |
flexibiliteit heeft een prijs .
@avandalen
Created Pull Request with two derived classes, the string and the numeric interface.
Think both have their uses.
Merged the PR into master,
if problems arise, please reopen or create a new issue.