#pragma once #include #if defined( _VARIANT_ARDUINO_DUE_X ) || defined( ARDUINO_FEATHER52 ) #define ATM_PLAYER_DISABLE_TONE #endif class Atm_player : public Machine { public: enum { IDLE, START, SOUND, QUIET, NEXT, REPEAT, FINISH }; // STATES enum { EVT_START, EVT_STOP, EVT_TOGGLE, EVT_TIMER, EVT_EOPAT, EVT_REPEAT, ELSE }; // EVENTS Atm_player( void ) : Machine(){}; Atm_player& begin( int pin = -1 ); Atm_player& trace( Stream& stream ); Atm_player& trigger( int event ); int state( void ); Atm_player& play( int* pat, int size ); Atm_player& play( uint32_t* pat, int size ); Atm_player& play( int freq, int period, int pause = 0 ); Atm_player& repeat( uint16_t v = -1 ); Atm_player& speed( float v ); Atm_player& pitch( float v ); Atm_player& start( void ); Atm_player& stop( void ); Atm_player& toggle( void ); Atm_player& onFinish( Machine& machine, int event = 0 ); Atm_player& onFinish( atm_cb_push_t callback, int idx = 0 ); Atm_player& onNote( Machine& machine, int event = 0 ); Atm_player& onNote( atm_cb_push_t callback, int idx = 0 ); Atm_player& onNote( int sub, Machine& machine, int event = 0 ); Atm_player& onNote( int sub, atm_cb_push_t callback, int idx = 0 ); private: int pin; int* pattern16; // Can also be 32 bit on some hardware (teensy 3.x) uint32_t* pattern32; uint16_t patternsize; uint8_t patternwidth; int step; uint16_t repeatCount; float speedFactor, pitchFactor; int stub[3]; atm_timer_millis timer; atm_counter counter_repeat; enum { ENT_IDLE, ENT_START, ENT_SOUND, ENT_QUIET, ENT_NEXT, ENT_REPEAT, ENT_FINISH }; // ACTIONS enum { ON_FINISH, ON_NOTE, CONN_MAX = 3 }; // CONNECTORS atm_connector connectors[CONN_MAX]; int event( int id ); void action( int id ); }; /* Automaton::ATML::begin - Automaton Markup Language START START SOUND IDLE IDLE QUIET IDLE IDLE NEXT IDLE IDLE REPEAT SOUND IDLE IDLE FINISH START IDLE START Automaton::ATML::end */