RobTillaart / HeartBeat

Arduino library for a simple HeartBeat

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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?

@avandalen

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.