
MurphyBat_LPC
Dependencies: mbed
MurphyBat.cpp@0:a20f005ea7ae, 2017-08-06 (annotated)
- Committer:
- SamuelEarnshawARM
- Date:
- Sun Aug 06 09:53:07 2017 +0000
- Revision:
- 0:a20f005ea7ae
06/08/2017 Murphybat_LPC
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
SamuelEarnshawARM | 0:a20f005ea7ae | 1 | /* |
SamuelEarnshawARM | 0:a20f005ea7ae | 2 | * MurphyBat.cpp |
SamuelEarnshawARM | 0:a20f005ea7ae | 3 | * |
SamuelEarnshawARM | 0:a20f005ea7ae | 4 | * Created on: 5 Aug 2017 |
SamuelEarnshawARM | 0:a20f005ea7ae | 5 | * Author: ciscer01 |
SamuelEarnshawARM | 0:a20f005ea7ae | 6 | */ |
SamuelEarnshawARM | 0:a20f005ea7ae | 7 | |
SamuelEarnshawARM | 0:a20f005ea7ae | 8 | #include <MurphyBat.hpp> |
SamuelEarnshawARM | 0:a20f005ea7ae | 9 | #include <mbed.h> |
SamuelEarnshawARM | 0:a20f005ea7ae | 10 | |
SamuelEarnshawARM | 0:a20f005ea7ae | 11 | MurphyBat::MurphyBat(PinName Ir1, PinName Ir2, PinName Ir3, PinName Ir4, PinName Actuator): |
SamuelEarnshawARM | 0:a20f005ea7ae | 12 | mIr1(Ir1), |
SamuelEarnshawARM | 0:a20f005ea7ae | 13 | mIr2(Ir2), |
SamuelEarnshawARM | 0:a20f005ea7ae | 14 | mIr3(Ir3), |
SamuelEarnshawARM | 0:a20f005ea7ae | 15 | mIr4(Ir4), |
SamuelEarnshawARM | 0:a20f005ea7ae | 16 | BatI(0), |
SamuelEarnshawARM | 0:a20f005ea7ae | 17 | batActuator(Actuator), |
SamuelEarnshawARM | 0:a20f005ea7ae | 18 | batActuratorTimout(), |
SamuelEarnshawARM | 0:a20f005ea7ae | 19 | Fired(false) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 20 | |
SamuelEarnshawARM | 0:a20f005ea7ae | 21 | BatIrIn[0] = &mIr1; |
SamuelEarnshawARM | 0:a20f005ea7ae | 22 | BatIrIn[1] = &mIr2; |
SamuelEarnshawARM | 0:a20f005ea7ae | 23 | BatIrIn[2] = &mIr3; |
SamuelEarnshawARM | 0:a20f005ea7ae | 24 | BatIrIn[3] = &mIr4; |
SamuelEarnshawARM | 0:a20f005ea7ae | 25 | //BatIrTh[0] = 0.5; 0.5, 0.5, 0.5), |
SamuelEarnshawARM | 0:a20f005ea7ae | 26 | for (unsigned int i = 0; i < 4; i++){ |
SamuelEarnshawARM | 0:a20f005ea7ae | 27 | for (unsigned int j = 0; j < avg_size; j++) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 28 | BatIrVal[i][j] = 0; |
SamuelEarnshawARM | 0:a20f005ea7ae | 29 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 30 | |
SamuelEarnshawARM | 0:a20f005ea7ae | 31 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 32 | BatIrTh[0] = 0.4f - 0.05f; |
SamuelEarnshawARM | 0:a20f005ea7ae | 33 | BatIrTh[1] = 0.3f - 0.05f; |
SamuelEarnshawARM | 0:a20f005ea7ae | 34 | BatIrTh[2] = 0.4f - 0.05f; |
SamuelEarnshawARM | 0:a20f005ea7ae | 35 | BatIrTh[3] = 0.3f - 0.05f; |
SamuelEarnshawARM | 0:a20f005ea7ae | 36 | batActuator.write(0); |
SamuelEarnshawARM | 0:a20f005ea7ae | 37 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 38 | |
SamuelEarnshawARM | 0:a20f005ea7ae | 39 | void MurphyBat::update() { |
SamuelEarnshawARM | 0:a20f005ea7ae | 40 | bool fire = false; |
SamuelEarnshawARM | 0:a20f005ea7ae | 41 | float BatIrAvg[4]; |
SamuelEarnshawARM | 0:a20f005ea7ae | 42 | for (unsigned int i = 0; (i < 4) && (fire == false); i++) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 43 | //Read the Ir value |
SamuelEarnshawARM | 0:a20f005ea7ae | 44 | BatIrVal[i][BatI] = BatIrIn[i]->read(); |
SamuelEarnshawARM | 0:a20f005ea7ae | 45 | //start the avarage computation |
SamuelEarnshawARM | 0:a20f005ea7ae | 46 | BatIrAvg[i] = BatIrVal[i][0]; |
SamuelEarnshawARM | 0:a20f005ea7ae | 47 | for (unsigned int j = 1; j < avg_size; j++) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 48 | BatIrAvg[i] += BatIrVal[i][j]; |
SamuelEarnshawARM | 0:a20f005ea7ae | 49 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 50 | //Compute avarage |
SamuelEarnshawARM | 0:a20f005ea7ae | 51 | BatIrAvg[i] = BatIrAvg[i] / avg_size; |
SamuelEarnshawARM | 0:a20f005ea7ae | 52 | if (BatIrVal[i][BatI] > BatIrTh[i]) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 53 | fire = true; |
SamuelEarnshawARM | 0:a20f005ea7ae | 54 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 55 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 56 | BatI = (BatI + 1) % avg_size; |
SamuelEarnshawARM | 0:a20f005ea7ae | 57 | if (fire) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 58 | Fire(); |
SamuelEarnshawARM | 0:a20f005ea7ae | 59 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 60 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 61 | |
SamuelEarnshawARM | 0:a20f005ea7ae | 62 | void MurphyBat::FireCb(MurphyBat *mb){ |
SamuelEarnshawARM | 0:a20f005ea7ae | 63 | mb->Fire(); |
SamuelEarnshawARM | 0:a20f005ea7ae | 64 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 65 | |
SamuelEarnshawARM | 0:a20f005ea7ae | 66 | void MurphyBat::Fire(void) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 67 | if (Fired == false) { |
SamuelEarnshawARM | 0:a20f005ea7ae | 68 | Fired = true; |
SamuelEarnshawARM | 0:a20f005ea7ae | 69 | batActuator.write(1); |
SamuelEarnshawARM | 0:a20f005ea7ae | 70 | batActuratorTimout.attach_us(this,MurphyBat::FireCb, 200000); |
SamuelEarnshawARM | 0:a20f005ea7ae | 71 | } else { |
SamuelEarnshawARM | 0:a20f005ea7ae | 72 | Fired = false; |
SamuelEarnshawARM | 0:a20f005ea7ae | 73 | batActuator.write(0); |
SamuelEarnshawARM | 0:a20f005ea7ae | 74 | batActuratorTimout.detach(); |
SamuelEarnshawARM | 0:a20f005ea7ae | 75 | } |
SamuelEarnshawARM | 0:a20f005ea7ae | 76 | } |