Cooper Liu
/
Eurobot2013_Co-Processor
working version with calibration done
Fork of Eurobot2013 by
IR_Turret/IR_Turret.h
- Committer:
- xiaxia686
- Date:
- 2013-04-09
- Revision:
- 11:5ba926692210
File content as of revision 11:5ba926692210:
#ifndef MBED_IR_TURRET_H #define MBED_IR_TURRET_H #include "mbed.h" #include "PwmIn.h" #include "globals.h" #include "geometryfuncs.h" // Stepper motor defines go here, p30 is reserved for the hardware counter #define STEPPER_PERIOD 0.0001 //Stepper motor period in seconds, 50% duty cycle #define STEPPER_DIV 3200 // number of steps per cycle = default * microstep #define STEP_ANGLE ((float)(2*PI) / STEPPER_DIV) // step angle of stepper #define IR_TIMEOUT_STEP 45 //about 5 degrees #define IR_TIMEOUT (STEPPER_PERIOD*IR_TIMEOUT_STEP) // IR Sensor defines go here #define PWM_INVERT // inverts the PWM for the IR sensor pwm input #define PULSEPERIOD_US 1500 #define PULSEPERIOD ((float)1500/1000000) #define IR0_PULSEWIDTH 1000 #define IR1_PULSEWIDTH 750 #define IR2_PULSEWIDTH 500 #define PULSEWIDTH_TOLERANCE 125 #define STEPS_PER_PULSEPERIOD (PULSEPERIOD/STEPPER_PERIOD) /* SAMPLE IMPLEMENTATION! IR_TURRET my_ir_turret(stepper_pin,ir_pin); void callbinmain(int num, float dist) { //Here is where you deal with your brand new reading ;D } int main() { pc.printf("Hello World of RobotSonar!\r\n"); my_srf.callbackfunc = callbinmain; while (1); } */ class DummyCT; class IR_TURRET { public: IR_TURRET( PinName step_pin, PinName ir_pin); /** A assigns a callback function when a new reading is available **/ void (*callbackfunc)(int beaconnum, float angle, float variance); DummyCT* callbackobj; void (DummyCT::*mcallbackfunc)(int beaconnum, float angle, float variance); private : PwmOut _step; PwmIn _ir; Timeout _ir_timeout; void _ir_timeout_isr (void); void _ir_isr (float pulsewidth); int step_count_old; int IR_counter; int IR_step_counter; float pulsewidth_max; float _angle[3]; float _variance[3]; }; #endif