Cooper Liu
/
Eurobot2013_Co-Processor
working version with calibration done
Fork of Eurobot2013 by
IR_Turret/IR_Turret.h@11:5ba926692210, 2013-04-09 (annotated)
- Committer:
- xiaxia686
- Date:
- Tue Apr 09 15:32:47 2013 +0000
- Revision:
- 11:5ba926692210
woking version (calibrated)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xiaxia686 | 11:5ba926692210 | 1 | #ifndef MBED_IR_TURRET_H |
xiaxia686 | 11:5ba926692210 | 2 | #define MBED_IR_TURRET_H |
xiaxia686 | 11:5ba926692210 | 3 | |
xiaxia686 | 11:5ba926692210 | 4 | |
xiaxia686 | 11:5ba926692210 | 5 | |
xiaxia686 | 11:5ba926692210 | 6 | #include "mbed.h" |
xiaxia686 | 11:5ba926692210 | 7 | #include "PwmIn.h" |
xiaxia686 | 11:5ba926692210 | 8 | #include "globals.h" |
xiaxia686 | 11:5ba926692210 | 9 | #include "geometryfuncs.h" |
xiaxia686 | 11:5ba926692210 | 10 | |
xiaxia686 | 11:5ba926692210 | 11 | // Stepper motor defines go here, p30 is reserved for the hardware counter |
xiaxia686 | 11:5ba926692210 | 12 | #define STEPPER_PERIOD 0.0001 //Stepper motor period in seconds, 50% duty cycle |
xiaxia686 | 11:5ba926692210 | 13 | #define STEPPER_DIV 3200 // number of steps per cycle = default * microstep |
xiaxia686 | 11:5ba926692210 | 14 | #define STEP_ANGLE ((float)(2*PI) / STEPPER_DIV) // step angle of stepper |
xiaxia686 | 11:5ba926692210 | 15 | #define IR_TIMEOUT_STEP 45 //about 5 degrees |
xiaxia686 | 11:5ba926692210 | 16 | #define IR_TIMEOUT (STEPPER_PERIOD*IR_TIMEOUT_STEP) |
xiaxia686 | 11:5ba926692210 | 17 | |
xiaxia686 | 11:5ba926692210 | 18 | |
xiaxia686 | 11:5ba926692210 | 19 | // IR Sensor defines go here |
xiaxia686 | 11:5ba926692210 | 20 | #define PWM_INVERT // inverts the PWM for the IR sensor pwm input |
xiaxia686 | 11:5ba926692210 | 21 | #define PULSEPERIOD_US 1500 |
xiaxia686 | 11:5ba926692210 | 22 | #define PULSEPERIOD ((float)1500/1000000) |
xiaxia686 | 11:5ba926692210 | 23 | #define IR0_PULSEWIDTH 1000 |
xiaxia686 | 11:5ba926692210 | 24 | #define IR1_PULSEWIDTH 750 |
xiaxia686 | 11:5ba926692210 | 25 | #define IR2_PULSEWIDTH 500 |
xiaxia686 | 11:5ba926692210 | 26 | #define PULSEWIDTH_TOLERANCE 125 |
xiaxia686 | 11:5ba926692210 | 27 | #define STEPS_PER_PULSEPERIOD (PULSEPERIOD/STEPPER_PERIOD) |
xiaxia686 | 11:5ba926692210 | 28 | |
xiaxia686 | 11:5ba926692210 | 29 | /* SAMPLE IMPLEMENTATION! |
xiaxia686 | 11:5ba926692210 | 30 | IR_TURRET my_ir_turret(stepper_pin,ir_pin); |
xiaxia686 | 11:5ba926692210 | 31 | |
xiaxia686 | 11:5ba926692210 | 32 | |
xiaxia686 | 11:5ba926692210 | 33 | void callbinmain(int num, float dist) { |
xiaxia686 | 11:5ba926692210 | 34 | //Here is where you deal with your brand new reading ;D |
xiaxia686 | 11:5ba926692210 | 35 | } |
xiaxia686 | 11:5ba926692210 | 36 | |
xiaxia686 | 11:5ba926692210 | 37 | int main() { |
xiaxia686 | 11:5ba926692210 | 38 | pc.printf("Hello World of RobotSonar!\r\n"); |
xiaxia686 | 11:5ba926692210 | 39 | my_srf.callbackfunc = callbinmain; |
xiaxia686 | 11:5ba926692210 | 40 | |
xiaxia686 | 11:5ba926692210 | 41 | while (1); |
xiaxia686 | 11:5ba926692210 | 42 | } |
xiaxia686 | 11:5ba926692210 | 43 | |
xiaxia686 | 11:5ba926692210 | 44 | */ |
xiaxia686 | 11:5ba926692210 | 45 | |
xiaxia686 | 11:5ba926692210 | 46 | class DummyCT; |
xiaxia686 | 11:5ba926692210 | 47 | |
xiaxia686 | 11:5ba926692210 | 48 | class IR_TURRET { |
xiaxia686 | 11:5ba926692210 | 49 | public: |
xiaxia686 | 11:5ba926692210 | 50 | |
xiaxia686 | 11:5ba926692210 | 51 | IR_TURRET( |
xiaxia686 | 11:5ba926692210 | 52 | PinName step_pin, |
xiaxia686 | 11:5ba926692210 | 53 | PinName ir_pin); |
xiaxia686 | 11:5ba926692210 | 54 | |
xiaxia686 | 11:5ba926692210 | 55 | |
xiaxia686 | 11:5ba926692210 | 56 | /** A assigns a callback function when a new reading is available **/ |
xiaxia686 | 11:5ba926692210 | 57 | void (*callbackfunc)(int beaconnum, float angle, float variance); |
xiaxia686 | 11:5ba926692210 | 58 | DummyCT* callbackobj; |
xiaxia686 | 11:5ba926692210 | 59 | void (DummyCT::*mcallbackfunc)(int beaconnum, float angle, float variance); |
xiaxia686 | 11:5ba926692210 | 60 | |
xiaxia686 | 11:5ba926692210 | 61 | |
xiaxia686 | 11:5ba926692210 | 62 | |
xiaxia686 | 11:5ba926692210 | 63 | private : |
xiaxia686 | 11:5ba926692210 | 64 | PwmOut _step; |
xiaxia686 | 11:5ba926692210 | 65 | PwmIn _ir; |
xiaxia686 | 11:5ba926692210 | 66 | Timeout _ir_timeout; |
xiaxia686 | 11:5ba926692210 | 67 | void _ir_timeout_isr (void); |
xiaxia686 | 11:5ba926692210 | 68 | void _ir_isr (float pulsewidth); |
xiaxia686 | 11:5ba926692210 | 69 | |
xiaxia686 | 11:5ba926692210 | 70 | int step_count_old; |
xiaxia686 | 11:5ba926692210 | 71 | int IR_counter; |
xiaxia686 | 11:5ba926692210 | 72 | int IR_step_counter; |
xiaxia686 | 11:5ba926692210 | 73 | float pulsewidth_max; |
xiaxia686 | 11:5ba926692210 | 74 | float _angle[3]; |
xiaxia686 | 11:5ba926692210 | 75 | float _variance[3]; |
xiaxia686 | 11:5ba926692210 | 76 | |
xiaxia686 | 11:5ba926692210 | 77 | |
xiaxia686 | 11:5ba926692210 | 78 | |
xiaxia686 | 11:5ba926692210 | 79 | }; |
xiaxia686 | 11:5ba926692210 | 80 | |
xiaxia686 | 11:5ba926692210 | 81 | #endif |