working version with calibration done

Fork of Eurobot2013 by Oskar Weigl

Committer:
xiaxia686
Date:
Tue Apr 09 15:32:47 2013 +0000
Revision:
11:5ba926692210
woking version (calibrated)

Who changed what in which revision?

UserRevisionLine numberNew 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