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@40:1f0a5e5f24f6, 2017-04-09 (annotated)
- Committer:
- GaiSensei
- Date:
- Sun Apr 09 21:22:08 2017 +0000
- Revision:
- 40:1f0a5e5f24f6
- Parent:
- 39:a98413395b20
- Child:
- 46:853966aab733
Fix mallocs in interrupt. Use local variables instead of vector.push_back
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 | 39:a98413395b20 | 6 | #include "Servomotor.hpp" |
GaiSensei | 39:a98413395b20 | 7 | #include "RealXbeeTransmitter.hpp" |
GaiSensei | 39:a98413395b20 | 8 | #include "RealXbeeReceiver.hpp" |
GaiSensei | 39:a98413395b20 | 9 | #include "Target.hpp" |
GaiSensei | 39:a98413395b20 | 10 | #include "Bumper.hpp" |
GaiSensei | 39:a98413395b20 | 11 | #include "TargetHitCallback.hpp" |
GaiSensei | 39:a98413395b20 | 12 | #include "TargetMissedCallback.hpp" |
GaiSensei | 39:a98413395b20 | 13 | #include "NerfusTicker.hpp" |
GaiSensei | 39:a98413395b20 | 14 | #include "TargetManager.hpp" |
GaiSensei | 39:a98413395b20 | 15 | |
GaiSensei | 39:a98413395b20 | 16 | #include <vector> |
GaiSensei | 39:a98413395b20 | 17 | |
GaiSensei | 39:a98413395b20 | 18 | TargetManager* target_manager_pointer; |
GaiSensei | 39:a98413395b20 | 19 | |
GaiSensei | 39:a98413395b20 | 20 | void target_manager_callback(vector<uint8_t> message, int address[8]) |
GaiSensei | 39:a98413395b20 | 21 | { |
GaiSensei | 39:a98413395b20 | 22 | target_manager_pointer->execute(message, address); |
GaiSensei | 39:a98413395b20 | 23 | } |
dupm2216 | 0:e7c4a5d26268 | 24 | |
GaiSensei | 36:f55ce07292c9 | 25 | int main() |
Maxime Dupuis |
2:6e467e4978f9 | 26 | { |
GaiSensei | 39:a98413395b20 | 27 | //Transmitter |
GaiSensei | 39:a98413395b20 | 28 | RealXbeeTransmitter xbee_transmitter; |
GaiSensei | 40:1f0a5e5f24f6 | 29 | xbee_transmitter.init(); |
GaiSensei | 39:a98413395b20 | 30 | |
GaiSensei | 39:a98413395b20 | 31 | //Target 0 |
GaiSensei | 39:a98413395b20 | 32 | RealPwmOut servo_pwm_out_0(p21); |
GaiSensei | 39:a98413395b20 | 33 | Servomotor servomotor_0(servo_pwm_out_0); |
GaiSensei | 39:a98413395b20 | 34 | |
GaiSensei | 39:a98413395b20 | 35 | RealDigitalOut ally_leds_0(p5); |
GaiSensei | 39:a98413395b20 | 36 | RealDigitalOut ennemy_leds_0(p6); |
GaiSensei | 39:a98413395b20 | 37 | LedController ally_leds_controller_0(ally_leds_0); |
GaiSensei | 39:a98413395b20 | 38 | LedController ennemy_leds_controller_0(ennemy_leds_0); |
GaiSensei | 39:a98413395b20 | 39 | |
GaiSensei | 39:a98413395b20 | 40 | Target target_0(servomotor_0, ally_leds_controller_0, ennemy_leds_controller_0, xbee_transmitter, 0); |
GaiSensei | 39:a98413395b20 | 41 | |
GaiSensei | 39:a98413395b20 | 42 | //Target 1 |
GaiSensei | 39:a98413395b20 | 43 | RealPwmOut servo_pwm_out_1(p22); |
GaiSensei | 39:a98413395b20 | 44 | Servomotor servomotor_1(servo_pwm_out_1); |
GaiSensei | 39:a98413395b20 | 45 | |
GaiSensei | 39:a98413395b20 | 46 | RealDigitalOut ally_leds_1(p9); |
GaiSensei | 39:a98413395b20 | 47 | RealDigitalOut ennemy_leds_1(p10); |
GaiSensei | 39:a98413395b20 | 48 | LedController ally_leds_controller_1(ally_leds_1); |
GaiSensei | 39:a98413395b20 | 49 | LedController ennemy_leds_controller_1(ennemy_leds_1); |
GaiSensei | 39:a98413395b20 | 50 | |
GaiSensei | 39:a98413395b20 | 51 | Target target_1(servomotor_1, ally_leds_controller_1, ennemy_leds_controller_1, xbee_transmitter, 1); |
GaiSensei | 39:a98413395b20 | 52 | |
GaiSensei | 39:a98413395b20 | 53 | //Target Manager |
GaiSensei | 39:a98413395b20 | 54 | vector<TargetInterface*> targets; |
GaiSensei | 39:a98413395b20 | 55 | targets.push_back(&target_0); |
GaiSensei | 39:a98413395b20 | 56 | targets.push_back(&target_1); |
GaiSensei | 39:a98413395b20 | 57 | |
GaiSensei | 39:a98413395b20 | 58 | NerfusTicker target_timeout_ticker_0; |
GaiSensei | 39:a98413395b20 | 59 | NerfusTicker target_timeout_ticker_1; |
GaiSensei | 39:a98413395b20 | 60 | std::vector<NerfusTickerInterface*> target_timeout_tickers; |
GaiSensei | 39:a98413395b20 | 61 | target_timeout_tickers.push_back(&target_timeout_ticker_0); |
GaiSensei | 39:a98413395b20 | 62 | target_timeout_tickers.push_back(&target_timeout_ticker_1); |
GaiSensei | 39:a98413395b20 | 63 | |
GaiSensei | 39:a98413395b20 | 64 | TargetManager target_manager(targets, target_timeout_tickers); |
GaiSensei | 39:a98413395b20 | 65 | |
GaiSensei | 39:a98413395b20 | 66 | //Timeout tickers |
GaiSensei | 39:a98413395b20 | 67 | TargetMissedCallback target_missed_callback_0(target_manager, 0); |
GaiSensei | 39:a98413395b20 | 68 | TargetMissedCallback target_missed_callback_1(target_manager, 1); |
GaiSensei | 39:a98413395b20 | 69 | target_timeout_ticker_0.init(&target_missed_callback_0); |
GaiSensei | 39:a98413395b20 | 70 | target_timeout_ticker_1.init(&target_missed_callback_1); |
GaiSensei | 39:a98413395b20 | 71 | |
GaiSensei | 39:a98413395b20 | 72 | //Bumper 1 |
GaiSensei | 39:a98413395b20 | 73 | PinName bumper_0_pin = p11; |
GaiSensei | 39:a98413395b20 | 74 | TargetHitCallback target_hit_callback_0(target_manager, 0); |
GaiSensei | 39:a98413395b20 | 75 | Bumper bumper_0(bumper_0_pin, target_hit_callback_0); |
GaiSensei | 39:a98413395b20 | 76 | |
GaiSensei | 39:a98413395b20 | 77 | //Bumper 2 |
GaiSensei | 39:a98413395b20 | 78 | PinName bumper_1_pin = p12; |
GaiSensei | 39:a98413395b20 | 79 | TargetHitCallback target_hit_callback_1(target_manager, 1); |
GaiSensei | 39:a98413395b20 | 80 | Bumper bumper_1(bumper_1_pin, target_hit_callback_1); |
GaiSensei | 39:a98413395b20 | 81 | |
GaiSensei | 39:a98413395b20 | 82 | //Receiver |
GaiSensei | 39:a98413395b20 | 83 | target_manager_pointer = &target_manager; |
GaiSensei | 39:a98413395b20 | 84 | RealXbeeReceiver xbee_receiver; |
GaiSensei | 39:a98413395b20 | 85 | xbee_receiver.start(&target_manager_callback); |
GaiSensei | 40:1f0a5e5f24f6 | 86 | |
GaiSensei | 39:a98413395b20 | 87 | while(1) |
GaiSensei | 39:a98413395b20 | 88 | { |
GaiSensei | 39:a98413395b20 | 89 | } |
GaiSensei | 39:a98413395b20 | 90 | } |
GaiSensei | 39:a98413395b20 | 91 | |
GaiSensei | 39:a98413395b20 | 92 | |
GaiSensei | 39:a98413395b20 | 93 |