Atm_analog.hpp 989 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. #include <Automaton.h>
  3. class Atm_analog : public Machine {
  4. public:
  5. enum { IDLE, SAMPLE, SEND }; // STATES
  6. enum { EVT_TRIGGER, EVT_TIMER, ELSE }; // EVENTS
  7. Atm_analog( void ) : Machine(){};
  8. Atm_analog& begin( int attached_pin, int sampleRate = 50 );
  9. Atm_analog& average( uint16_t* v, uint16_t size );
  10. Atm_analog& trace( Stream& stream );
  11. int state( void );
  12. Atm_analog& range( int toLow, int toHigh );
  13. Atm_analog& onChange( Machine& machine, int event = 0 );
  14. Atm_analog& onChange( atm_cb_push_t callback, int idx = 0 );
  15. Atm_analog& set( int value );
  16. private:
  17. enum { ENT_SAMPLE, ENT_SEND }; // ACTIONS
  18. short pin;
  19. atm_timer_millis timer;
  20. int v_sample, v_threshold, v_previous;
  21. atm_connector onchange;
  22. uint16_t* avg_buf;
  23. uint16_t avg_buf_size;
  24. uint16_t avg_buf_head;
  25. uint32_t avg_buf_total;
  26. int toLow, toHigh;
  27. int avg();
  28. int sample();
  29. virtual int read_sample();
  30. int event( int id );
  31. void action( int id );
  32. };