MurphyBat_LPC

Dependencies:   mbed

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?

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