A safe using the mbed, dc motor, solenoid, and more!

Dependencies:   4DGL-uLCD-SE DebounceIn Motordriver PinDetect SDFileSystem mbed-rtos mbed

Committer:
adamlawrence
Date:
Fri Apr 29 20:01:29 2016 +0000
Revision:
0:6b5c0ae5acc6
initial commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adamlawrence 0:6b5c0ae5acc6 1 #include <mbed.h>
adamlawrence 0:6b5c0ae5acc6 2
adamlawrence 0:6b5c0ae5acc6 3 typedef struct uFMT_STRUCT {
adamlawrence 0:6b5c0ae5acc6 4 short comp_code;
adamlawrence 0:6b5c0ae5acc6 5 short num_channels;
adamlawrence 0:6b5c0ae5acc6 6 unsigned sample_rate;
adamlawrence 0:6b5c0ae5acc6 7 unsigned avg_Bps;
adamlawrence 0:6b5c0ae5acc6 8 short block_align;
adamlawrence 0:6b5c0ae5acc6 9 short sig_bps;
adamlawrence 0:6b5c0ae5acc6 10 } FMT_STRUCT;
adamlawrence 0:6b5c0ae5acc6 11
adamlawrence 0:6b5c0ae5acc6 12
adamlawrence 0:6b5c0ae5acc6 13 /** wave file player class.
adamlawrence 0:6b5c0ae5acc6 14 *
adamlawrence 0:6b5c0ae5acc6 15 * Example:
adamlawrence 0:6b5c0ae5acc6 16 * @code
adamlawrence 0:6b5c0ae5acc6 17 * #include <mbed.h>
adamlawrence 0:6b5c0ae5acc6 18 * #include <wave_player.h>
adamlawrence 0:6b5c0ae5acc6 19 *
adamlawrence 0:6b5c0ae5acc6 20 * AnalogOut DACout(p18);
adamlawrence 0:6b5c0ae5acc6 21 * wave_player waver(&DACout);
adamlawrence 0:6b5c0ae5acc6 22 *
adamlawrence 0:6b5c0ae5acc6 23 * int main() {
adamlawrence 0:6b5c0ae5acc6 24 * FILE *wave_file;
adamlawrence 0:6b5c0ae5acc6 25 *
adamlawrence 0:6b5c0ae5acc6 26 * printf("\n\n\nHello, wave world!\n");
adamlawrence 0:6b5c0ae5acc6 27 * wave_file=fopen("/sd/44_8_st.wav","r");
adamlawrence 0:6b5c0ae5acc6 28 * waver.play(wave_file);
adamlawrence 0:6b5c0ae5acc6 29 * fclose(wave_file);
adamlawrence 0:6b5c0ae5acc6 30 * }
adamlawrence 0:6b5c0ae5acc6 31 * @endcode
adamlawrence 0:6b5c0ae5acc6 32 */
adamlawrence 0:6b5c0ae5acc6 33 class wave_player {
adamlawrence 0:6b5c0ae5acc6 34
adamlawrence 0:6b5c0ae5acc6 35 public:
adamlawrence 0:6b5c0ae5acc6 36 /** Create a wave player using a pointer to the given AnalogOut object.
adamlawrence 0:6b5c0ae5acc6 37 *
adamlawrence 0:6b5c0ae5acc6 38 * @param _dac pointer to an AnalogOut object to which the samples are sent.
adamlawrence 0:6b5c0ae5acc6 39 */
adamlawrence 0:6b5c0ae5acc6 40 wave_player(AnalogOut *_dac);
adamlawrence 0:6b5c0ae5acc6 41
adamlawrence 0:6b5c0ae5acc6 42 /** the player function.
adamlawrence 0:6b5c0ae5acc6 43 *
adamlawrence 0:6b5c0ae5acc6 44 * @param wavefile A pointer to an opened wave file
adamlawrence 0:6b5c0ae5acc6 45 */
adamlawrence 0:6b5c0ae5acc6 46 void play(FILE *wavefile);
adamlawrence 0:6b5c0ae5acc6 47
adamlawrence 0:6b5c0ae5acc6 48 /** Set the printf verbosity of the wave player. A nonzero verbosity level
adamlawrence 0:6b5c0ae5acc6 49 * will put wave_player in a mode where the complete contents of the wave
adamlawrence 0:6b5c0ae5acc6 50 * file are echoed to the screen, including header values, and including
adamlawrence 0:6b5c0ae5acc6 51 * all of the sample values placed into the DAC FIFO, and the sample values
adamlawrence 0:6b5c0ae5acc6 52 * removed from the DAC FIFO by the ISR. The sample output frequency is
adamlawrence 0:6b5c0ae5acc6 53 * fixed at 2 Hz in this mode, so it's all very slow and the DAC output isn't
adamlawrence 0:6b5c0ae5acc6 54 * very useful, but it lets you see what's going on and may help for debugging
adamlawrence 0:6b5c0ae5acc6 55 * wave files that don't play correctly.
adamlawrence 0:6b5c0ae5acc6 56 *
adamlawrence 0:6b5c0ae5acc6 57 * @param v the verbosity level
adamlawrence 0:6b5c0ae5acc6 58 */
adamlawrence 0:6b5c0ae5acc6 59 void set_verbosity(int v);
adamlawrence 0:6b5c0ae5acc6 60
adamlawrence 0:6b5c0ae5acc6 61 private:
adamlawrence 0:6b5c0ae5acc6 62 void dac_out(void);
adamlawrence 0:6b5c0ae5acc6 63 int verbosity;
adamlawrence 0:6b5c0ae5acc6 64 AnalogOut *wave_DAC;
adamlawrence 0:6b5c0ae5acc6 65 Ticker tick;
adamlawrence 0:6b5c0ae5acc6 66 unsigned short DAC_fifo[256];
adamlawrence 0:6b5c0ae5acc6 67 short DAC_wptr;
adamlawrence 0:6b5c0ae5acc6 68 volatile short DAC_rptr;
adamlawrence 0:6b5c0ae5acc6 69 short DAC_on;
adamlawrence 0:6b5c0ae5acc6 70 };
adamlawrence 0:6b5c0ae5acc6 71
adamlawrence 0:6b5c0ae5acc6 72