Laser Sensing Display for UI interfaces in the real world

Dependencies:   mbed

Fork of skinGames_forktest by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Sun Sep 23 10:11:43 2012 +0000
Revision:
31:5f039cbddee8
this is quite nice, but  I am going to make a deep modification of the bouncing principle: instead of depending on the penetration, it will just be a factor over the speed (perfect elastic bouncing being factorElastic=1, and perfectly absorption=0);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 31:5f039cbddee8 1 /* mbed Library - ADC
mbedalvaro 31:5f039cbddee8 2 * Copyright (c) 2010, sblandford
mbedalvaro 31:5f039cbddee8 3 * released under MIT license http://mbed.org/licence/mit
mbedalvaro 31:5f039cbddee8 4 */
mbedalvaro 31:5f039cbddee8 5
mbedalvaro 31:5f039cbddee8 6 #ifndef MBED_ADC_H
mbedalvaro 31:5f039cbddee8 7 #define MBED_ADC_H
mbedalvaro 31:5f039cbddee8 8
mbedalvaro 31:5f039cbddee8 9 #include "mbed.h"
mbedalvaro 31:5f039cbddee8 10
mbedalvaro 31:5f039cbddee8 11 #define XTAL_FREQ 12000000
mbedalvaro 31:5f039cbddee8 12 #define MAX_ADC_CLOCK 13000000
mbedalvaro 31:5f039cbddee8 13 #define CLKS_PER_SAMPLE 64
mbedalvaro 31:5f039cbddee8 14
mbedalvaro 31:5f039cbddee8 15 #define ADC_SAMPLE_RATE 150000
mbedalvaro 31:5f039cbddee8 16
mbedalvaro 31:5f039cbddee8 17
mbedalvaro 31:5f039cbddee8 18 class ADC {
mbedalvaro 31:5f039cbddee8 19 public:
mbedalvaro 31:5f039cbddee8 20
mbedalvaro 31:5f039cbddee8 21 //Initialize ADC with ADC maximum sample rate of
mbedalvaro 31:5f039cbddee8 22 //sample_rate and system clock divider of cclk_div
mbedalvaro 31:5f039cbddee8 23 //Maximum recommened sample rate is 184000
mbedalvaro 31:5f039cbddee8 24 ADC(int sample_rate, int cclk_div);
mbedalvaro 31:5f039cbddee8 25
mbedalvaro 31:5f039cbddee8 26 //Enable/disable ADC on pin according to state
mbedalvaro 31:5f039cbddee8 27 //and also select/de-select for next conversion
mbedalvaro 31:5f039cbddee8 28 void setup(PinName pin, int state);
mbedalvaro 31:5f039cbddee8 29
mbedalvaro 31:5f039cbddee8 30 //Return enabled/disabled state of ADC on pin
mbedalvaro 31:5f039cbddee8 31 int setup(PinName pin);
mbedalvaro 31:5f039cbddee8 32
mbedalvaro 31:5f039cbddee8 33 //Enable/disable burst mode according to state
mbedalvaro 31:5f039cbddee8 34 void burst(int state);
mbedalvaro 31:5f039cbddee8 35
mbedalvaro 31:5f039cbddee8 36 //Select channel already setup
mbedalvaro 31:5f039cbddee8 37 void select(PinName pin);
mbedalvaro 31:5f039cbddee8 38
mbedalvaro 31:5f039cbddee8 39 //Return burst mode enabled/disabled
mbedalvaro 31:5f039cbddee8 40 int burst(void);
mbedalvaro 31:5f039cbddee8 41
mbedalvaro 31:5f039cbddee8 42 /*Set start condition and edge according to mode:
mbedalvaro 31:5f039cbddee8 43 0 - No start (this value should be used when clearing PDN to 0).
mbedalvaro 31:5f039cbddee8 44 1 - Start conversion now.
mbedalvaro 31:5f039cbddee8 45 2 - Start conversion when the edge selected by bit 27 occurs on the P2.10 / EINT0 / NMI pin.
mbedalvaro 31:5f039cbddee8 46 3 - Start conversion when the edge selected by bit 27 occurs on the P1.27 / CLKOUT /
mbedalvaro 31:5f039cbddee8 47 USB_OVRCRn / CAP0.1 pin.
mbedalvaro 31:5f039cbddee8 48 4 - Start conversion when the edge selected by bit 27 occurs on MAT0.1. Note that this does
mbedalvaro 31:5f039cbddee8 49 not require that the MAT0.1 function appear on a device pin.
mbedalvaro 31:5f039cbddee8 50 5 - Start conversion when the edge selected by bit 27 occurs on MAT0.3. Note that it is not
mbedalvaro 31:5f039cbddee8 51 possible to cause the MAT0.3 function to appear on a device pin.
mbedalvaro 31:5f039cbddee8 52 6 - Start conversion when the edge selected by bit 27 occurs on MAT1.0. Note that this does
mbedalvaro 31:5f039cbddee8 53 not require that the MAT1.0 function appear on a device pin.
mbedalvaro 31:5f039cbddee8 54 7 - Start conversion when the edge selected by bit 27 occurs on MAT1.1. Note that this does
mbedalvaro 31:5f039cbddee8 55 not require that the MAT1.1 function appear on a device pin.
mbedalvaro 31:5f039cbddee8 56 When mode >= 2, conversion is triggered by edge:
mbedalvaro 31:5f039cbddee8 57 0 - Rising edge
mbedalvaro 31:5f039cbddee8 58 1 - Falling edge
mbedalvaro 31:5f039cbddee8 59 */
mbedalvaro 31:5f039cbddee8 60 void startmode(int mode, int edge);
mbedalvaro 31:5f039cbddee8 61
mbedalvaro 31:5f039cbddee8 62 //Return startmode state according to mode_edge=0: mode and mode_edge=1: edge
mbedalvaro 31:5f039cbddee8 63 int startmode(int mode_edge);
mbedalvaro 31:5f039cbddee8 64
mbedalvaro 31:5f039cbddee8 65 //Start ADC conversion
mbedalvaro 31:5f039cbddee8 66 void start(void);
mbedalvaro 31:5f039cbddee8 67
mbedalvaro 31:5f039cbddee8 68 //Set interrupt enable/disable for pin to state
mbedalvaro 31:5f039cbddee8 69 void interrupt_state(PinName pin, int state);
mbedalvaro 31:5f039cbddee8 70
mbedalvaro 31:5f039cbddee8 71 //Return enable/disable state of interrupt for pin
mbedalvaro 31:5f039cbddee8 72 int interrupt_state(PinName pin);
mbedalvaro 31:5f039cbddee8 73
mbedalvaro 31:5f039cbddee8 74 //Attach custom interrupt handler replacing default
mbedalvaro 31:5f039cbddee8 75 void attach(void(*fptr)(void));
mbedalvaro 31:5f039cbddee8 76
mbedalvaro 31:5f039cbddee8 77 //Restore default interrupt handler
mbedalvaro 31:5f039cbddee8 78 void detach(void);
mbedalvaro 31:5f039cbddee8 79
mbedalvaro 31:5f039cbddee8 80 //Append custom interrupt handler for pin
mbedalvaro 31:5f039cbddee8 81 void append(PinName pin, void(*fptr)(uint32_t value));
mbedalvaro 31:5f039cbddee8 82
mbedalvaro 31:5f039cbddee8 83 //Unappend custom interrupt handler for pin
mbedalvaro 31:5f039cbddee8 84 void unappend(PinName pin);
mbedalvaro 31:5f039cbddee8 85
mbedalvaro 31:5f039cbddee8 86 //Append custom global interrupt handler
mbedalvaro 31:5f039cbddee8 87 void append(void(*fptr)(int chan, uint32_t value));
mbedalvaro 31:5f039cbddee8 88
mbedalvaro 31:5f039cbddee8 89 //Unappend custom global interrupt handler
mbedalvaro 31:5f039cbddee8 90 void unappend(void);
mbedalvaro 31:5f039cbddee8 91
mbedalvaro 31:5f039cbddee8 92 //Set ADC offset to a value 0-7
mbedalvaro 31:5f039cbddee8 93 void offset(int offset);
mbedalvaro 31:5f039cbddee8 94
mbedalvaro 31:5f039cbddee8 95 //Return current ADC offset
mbedalvaro 31:5f039cbddee8 96 int offset(void);
mbedalvaro 31:5f039cbddee8 97
mbedalvaro 31:5f039cbddee8 98 //Return value of ADC on pin
mbedalvaro 31:5f039cbddee8 99 int read(PinName pin);
mbedalvaro 31:5f039cbddee8 100
mbedalvaro 31:5f039cbddee8 101 //Return DONE flag of ADC on pin
mbedalvaro 31:5f039cbddee8 102 int done(PinName pin);
mbedalvaro 31:5f039cbddee8 103
mbedalvaro 31:5f039cbddee8 104 //Return OVERRUN flag of ADC on pin
mbedalvaro 31:5f039cbddee8 105 int overrun(PinName pin);
mbedalvaro 31:5f039cbddee8 106
mbedalvaro 31:5f039cbddee8 107 //Return actual ADC clock
mbedalvaro 31:5f039cbddee8 108 int actual_adc_clock(void);
mbedalvaro 31:5f039cbddee8 109
mbedalvaro 31:5f039cbddee8 110 //Return actual maximum sample rate
mbedalvaro 31:5f039cbddee8 111 int actual_sample_rate(void);
mbedalvaro 31:5f039cbddee8 112
mbedalvaro 31:5f039cbddee8 113 //Return pin ID of ADC channel
mbedalvaro 31:5f039cbddee8 114 PinName channel_to_pin(int chan);
mbedalvaro 31:5f039cbddee8 115
mbedalvaro 31:5f039cbddee8 116 //Return pin number of ADC channel
mbedalvaro 31:5f039cbddee8 117 int channel_to_pin_number(int chan);
mbedalvaro 31:5f039cbddee8 118
mbedalvaro 31:5f039cbddee8 119
mbedalvaro 31:5f039cbddee8 120 private:
mbedalvaro 31:5f039cbddee8 121 int _pin_to_channel(PinName pin);
mbedalvaro 31:5f039cbddee8 122 uint32_t _data_of_pin(PinName pin);
mbedalvaro 31:5f039cbddee8 123
mbedalvaro 31:5f039cbddee8 124 int _adc_clk_freq;
mbedalvaro 31:5f039cbddee8 125 void adcisr(void);
mbedalvaro 31:5f039cbddee8 126 static void _adcisr(void);
mbedalvaro 31:5f039cbddee8 127 static ADC *instance;
mbedalvaro 31:5f039cbddee8 128
mbedalvaro 31:5f039cbddee8 129 uint32_t _adc_data[8];
mbedalvaro 31:5f039cbddee8 130 void(*_adc_isr[8])(uint32_t value);
mbedalvaro 31:5f039cbddee8 131 void(*_adc_g_isr)(int chan, uint32_t value);
mbedalvaro 31:5f039cbddee8 132 void(*_adc_m_isr)(void);
mbedalvaro 31:5f039cbddee8 133 };
mbedalvaro 31:5f039cbddee8 134
mbedalvaro 31:5f039cbddee8 135 extern ADC adc;
mbedalvaro 31:5f039cbddee8 136
mbedalvaro 31:5f039cbddee8 137 #endif