NerfUS mobile node that manages a target for the Nerf gun firing range
Dependencies: LedController mbed-rtos mbed NerfUSXbee Servomotor TargetManager
Fork of NerfUS by
main.cpp@49:4475f0760594, 2017-04-11 (annotated)
- Committer:
- GaiSensei
- Date:
- Tue Apr 11 20:00:27 2017 +0000
- Revision:
- 49:4475f0760594
- Parent:
- 46:853966aab733
- Child:
- 50:8cf0be9a61db
Details final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GaiSensei | 36:f55ce07292c9 | 1 | #include "mbed.h" |
GaiSensei | 39:a98413395b20 | 2 | #include "RealDigitalOut.hpp" |
GaiSensei | 39:a98413395b20 | 3 | #include "LedController.hpp" |
GaiSensei | 39:a98413395b20 | 4 | #include "LedController.hpp" |
GaiSensei | 39:a98413395b20 | 5 | #include "RealPwmOut.hpp" |
GaiSensei | 49:4475f0760594 | 6 | #include "RealServomotor.hpp" |
GaiSensei | 39:a98413395b20 | 7 | #include "RealXbeeTransmitter.hpp" |
GaiSensei | 39:a98413395b20 | 8 | #include "RealXbeeReceiver.hpp" |
GaiSensei | 39:a98413395b20 | 9 | #include "Target.hpp" |
GaiSensei | 46:853966aab733 | 10 | #include "Calibrator.hpp" |
GaiSensei | 39:a98413395b20 | 11 | #include "Bumper.hpp" |
GaiSensei | 46:853966aab733 | 12 | #include "TargetHitCalibrateCallback.hpp" |
GaiSensei | 39:a98413395b20 | 13 | #include "TargetHitCallback.hpp" |
GaiSensei | 39:a98413395b20 | 14 | #include "TargetMissedCallback.hpp" |
GaiSensei | 39:a98413395b20 | 15 | #include "NerfusTicker.hpp" |
GaiSensei | 39:a98413395b20 | 16 | #include "TargetManager.hpp" |
GaiSensei | 39:a98413395b20 | 17 | |
GaiSensei | 39:a98413395b20 | 18 | #include <vector> |
GaiSensei | 39:a98413395b20 | 19 | |
GaiSensei | 39:a98413395b20 | 20 | TargetManager* target_manager_pointer; |
GaiSensei | 39:a98413395b20 | 21 | |
GaiSensei | 39:a98413395b20 | 22 | void target_manager_callback(vector<uint8_t> message, int address[8]) |
GaiSensei | 39:a98413395b20 | 23 | { |
GaiSensei | 39:a98413395b20 | 24 | target_manager_pointer->execute(message, address); |
GaiSensei | 39:a98413395b20 | 25 | } |
dupm2216 | 0:e7c4a5d26268 | 26 | |
GaiSensei | 36:f55ce07292c9 | 27 | int main() |
GaiSensei | 46:853966aab733 | 28 | { |
GaiSensei | 39:a98413395b20 | 29 | //Transmitter |
GaiSensei | 39:a98413395b20 | 30 | RealXbeeTransmitter xbee_transmitter; |
GaiSensei | 40:1f0a5e5f24f6 | 31 | xbee_transmitter.init(); |
GaiSensei | 39:a98413395b20 | 32 | |
GaiSensei | 39:a98413395b20 | 33 | //Target 0 |
GaiSensei | 39:a98413395b20 | 34 | RealPwmOut servo_pwm_out_0(p21); |
GaiSensei | 49:4475f0760594 | 35 | RealServomotor servomotor_0(servo_pwm_out_0); |
GaiSensei | 49:4475f0760594 | 36 | servomotor_0.set_position_down(); |
GaiSensei | 39:a98413395b20 | 37 | |
GaiSensei | 49:4475f0760594 | 38 | ally_leds_0(p5); |
GaiSensei | 39:a98413395b20 | 39 | RealDigitalOut ennemy_leds_0(p6); |
GaiSensei | 39:a98413395b20 | 40 | LedController ally_leds_controller_0(ally_leds_0); |
GaiSensei | 39:a98413395b20 | 41 | LedController ennemy_leds_controller_0(ennemy_leds_0); |
GaiSensei | 39:a98413395b20 | 42 | |
GaiSensei | 39:a98413395b20 | 43 | Target target_0(servomotor_0, ally_leds_controller_0, ennemy_leds_controller_0, xbee_transmitter, 0); |
GaiSensei | 39:a98413395b20 | 44 | |
GaiSensei | 39:a98413395b20 | 45 | //Target 1 |
GaiSensei | 39:a98413395b20 | 46 | RealPwmOut servo_pwm_out_1(p22); |
GaiSensei | 49:4475f0760594 | 47 | RealServomotor servomotor_1(servo_pwm_out_1); |
GaiSensei | 49:4475f0760594 | 48 | servomotor_1.set_position_down(); |
GaiSensei | 39:a98413395b20 | 49 | |
GaiSensei | 39:a98413395b20 | 50 | RealDigitalOut ally_leds_1(p9); |
GaiSensei | 39:a98413395b20 | 51 | RealDigitalOut ennemy_leds_1(p10); |
GaiSensei | 39:a98413395b20 | 52 | LedController ally_leds_controller_1(ally_leds_1); |
GaiSensei | 39:a98413395b20 | 53 | LedController ennemy_leds_controller_1(ennemy_leds_1); |
GaiSensei | 39:a98413395b20 | 54 | |
GaiSensei | 39:a98413395b20 | 55 | Target target_1(servomotor_1, ally_leds_controller_1, ennemy_leds_controller_1, xbee_transmitter, 1); |
GaiSensei | 39:a98413395b20 | 56 | |
GaiSensei | 46:853966aab733 | 57 | wait_ms(250); |
GaiSensei | 46:853966aab733 | 58 | |
GaiSensei | 46:853966aab733 | 59 | //Bumpers |
GaiSensei | 46:853966aab733 | 60 | PinName bumper_0_pin = p11; |
GaiSensei | 46:853966aab733 | 61 | PinName bumper_1_pin = p12; |
GaiSensei | 46:853966aab733 | 62 | Bumper bumper_0(bumper_0_pin, NULL); |
GaiSensei | 46:853966aab733 | 63 | Bumper bumper_1(bumper_1_pin, NULL); |
GaiSensei | 46:853966aab733 | 64 | |
GaiSensei | 46:853966aab733 | 65 | //Servomotor calibration |
GaiSensei | 46:853966aab733 | 66 | Calibrator calibrator_0(servomotor_0); |
GaiSensei | 46:853966aab733 | 67 | Calibrator calibrator_1(servomotor_1); |
GaiSensei | 46:853966aab733 | 68 | TargetHitCalibrateCallback target_hit_calibrate_callback_0(calibrator_0); |
GaiSensei | 46:853966aab733 | 69 | TargetHitCalibrateCallback target_hit_calibrate_callback_1(calibrator_1); |
GaiSensei | 46:853966aab733 | 70 | |
GaiSensei | 46:853966aab733 | 71 | bumper_0.set_callbacks(&target_hit_calibrate_callback_0); |
GaiSensei | 46:853966aab733 | 72 | calibrator_0.calibrate(); |
GaiSensei | 46:853966aab733 | 73 | servomotor_0.set_position_down(); |
GaiSensei | 46:853966aab733 | 74 | printf("Servomotor 0 calibrated\r\n"); |
GaiSensei | 46:853966aab733 | 75 | |
GaiSensei | 46:853966aab733 | 76 | bumper_1.set_callbacks(&target_hit_calibrate_callback_1); |
GaiSensei | 46:853966aab733 | 77 | calibrator_1.calibrate(); |
GaiSensei | 46:853966aab733 | 78 | servomotor_1.set_position_down(); |
GaiSensei | 46:853966aab733 | 79 | printf("Servomotor 1 calibrated\r\n"); |
GaiSensei | 46:853966aab733 | 80 | |
GaiSensei | 39:a98413395b20 | 81 | //Target Manager |
GaiSensei | 39:a98413395b20 | 82 | vector<TargetInterface*> targets; |
GaiSensei | 39:a98413395b20 | 83 | targets.push_back(&target_0); |
GaiSensei | 39:a98413395b20 | 84 | targets.push_back(&target_1); |
GaiSensei | 39:a98413395b20 | 85 | |
GaiSensei | 39:a98413395b20 | 86 | NerfusTicker target_timeout_ticker_0; |
GaiSensei | 39:a98413395b20 | 87 | NerfusTicker target_timeout_ticker_1; |
GaiSensei | 39:a98413395b20 | 88 | std::vector<NerfusTickerInterface*> target_timeout_tickers; |
GaiSensei | 39:a98413395b20 | 89 | target_timeout_tickers.push_back(&target_timeout_ticker_0); |
GaiSensei | 39:a98413395b20 | 90 | target_timeout_tickers.push_back(&target_timeout_ticker_1); |
GaiSensei | 39:a98413395b20 | 91 | |
GaiSensei | 39:a98413395b20 | 92 | TargetManager target_manager(targets, target_timeout_tickers); |
GaiSensei | 39:a98413395b20 | 93 | |
GaiSensei | 39:a98413395b20 | 94 | //Timeout tickers |
GaiSensei | 39:a98413395b20 | 95 | TargetMissedCallback target_missed_callback_0(target_manager, 0); |
GaiSensei | 39:a98413395b20 | 96 | TargetMissedCallback target_missed_callback_1(target_manager, 1); |
GaiSensei | 39:a98413395b20 | 97 | target_timeout_ticker_0.init(&target_missed_callback_0); |
GaiSensei | 39:a98413395b20 | 98 | target_timeout_ticker_1.init(&target_missed_callback_1); |
GaiSensei | 39:a98413395b20 | 99 | |
GaiSensei | 39:a98413395b20 | 100 | //Bumper 1 |
GaiSensei | 39:a98413395b20 | 101 | TargetHitCallback target_hit_callback_0(target_manager, 0); |
GaiSensei | 46:853966aab733 | 102 | bumper_0.set_callbacks(&target_hit_callback_0); |
GaiSensei | 39:a98413395b20 | 103 | |
GaiSensei | 39:a98413395b20 | 104 | //Bumper 2 |
GaiSensei | 39:a98413395b20 | 105 | TargetHitCallback target_hit_callback_1(target_manager, 1); |
GaiSensei | 46:853966aab733 | 106 | bumper_1.set_callbacks(&target_hit_callback_1); |
GaiSensei | 39:a98413395b20 | 107 | |
GaiSensei | 39:a98413395b20 | 108 | //Receiver |
GaiSensei | 39:a98413395b20 | 109 | target_manager_pointer = &target_manager; |
GaiSensei | 39:a98413395b20 | 110 | RealXbeeReceiver xbee_receiver; |
GaiSensei | 39:a98413395b20 | 111 | xbee_receiver.start(&target_manager_callback); |
GaiSensei | 40:1f0a5e5f24f6 | 112 | |
GaiSensei | 39:a98413395b20 | 113 | while(1) |
GaiSensei | 39:a98413395b20 | 114 | { |
GaiSensei | 39:a98413395b20 | 115 | } |
GaiSensei | 39:a98413395b20 | 116 | } |
GaiSensei | 39:a98413395b20 | 117 | |
GaiSensei | 39:a98413395b20 | 118 | |
GaiSensei | 39:a98413395b20 | 119 |