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 NerfUS

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?

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