MurphyBat_LPC

Dependencies:   mbed

Revision:
0:a20f005ea7ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MurphyBat.cpp	Sun Aug 06 09:53:07 2017 +0000
@@ -0,0 +1,76 @@
+/*
+ * MurphyBat.cpp
+ *
+ *  Created on: 5 Aug 2017
+ *      Author: ciscer01
+ */
+
+#include <MurphyBat.hpp>
+#include <mbed.h>
+
+MurphyBat::MurphyBat(PinName Ir1, PinName Ir2, PinName Ir3, PinName Ir4, PinName Actuator):
+		mIr1(Ir1),
+		mIr2(Ir2),
+		mIr3(Ir3),
+		mIr4(Ir4),
+		BatI(0),
+		batActuator(Actuator),
+		batActuratorTimout(),
+		Fired(false) {
+
+	BatIrIn[0] = &mIr1;
+	BatIrIn[1] = &mIr2;
+	BatIrIn[2] = &mIr3;
+	BatIrIn[3] = &mIr4;
+	//BatIrTh[0] = 0.5; 0.5, 0.5, 0.5),
+	for (unsigned int i = 0; i < 4; i++){
+		for (unsigned int j = 0; j < avg_size; j++) {
+			BatIrVal[i][j] = 0;
+		}
+
+	}
+	BatIrTh[0] = 0.4f - 0.05f;
+	BatIrTh[1] = 0.3f - 0.05f;
+	BatIrTh[2] = 0.4f - 0.05f;
+	BatIrTh[3] = 0.3f - 0.05f;
+	batActuator.write(0);
+}
+
+void MurphyBat::update() {
+	bool fire = false;
+	float BatIrAvg[4];
+	for (unsigned int i = 0; (i < 4) && (fire == false); i++) {
+		//Read the Ir value
+		BatIrVal[i][BatI] = BatIrIn[i]->read();
+		//start the avarage computation
+		BatIrAvg[i] = BatIrVal[i][0];
+		for (unsigned int j = 1; j < avg_size; j++) {
+			BatIrAvg[i] += BatIrVal[i][j];
+		}
+		//Compute avarage
+		BatIrAvg[i] = BatIrAvg[i] / avg_size;
+		if (BatIrVal[i][BatI] > BatIrTh[i]) {
+			fire = true;
+		}
+	}
+	BatI = (BatI + 1) % avg_size;
+	if (fire) {
+		Fire();
+	}
+}
+
+void MurphyBat::FireCb(MurphyBat *mb){
+	mb->Fire();
+}
+
+void MurphyBat::Fire(void) {
+	if (Fired == false) {
+		Fired = true;
+		batActuator.write(1);
+		batActuratorTimout.attach_us(this,MurphyBat::FireCb, 200000);
+	} else {
+		Fired = false;
+		batActuator.write(0);
+		batActuratorTimout.detach();
+	}
+}