Skip to content

Commit 2ad5084

Browse files
committed
Add MPU drum selection code
1 parent 6613126 commit 2ad5084

File tree

10 files changed

+604
-12
lines changed

10 files changed

+604
-12
lines changed

lib/BatteryL/BatteryL.cpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,20 @@ void BatteryL::measureBatteryLevel(){
5151
battery2Level = battery.level();
5252
}
5353
lastBatteryCheck = millis();
54-
Serial.print("Battery Level ");
55-
Serial.println(battery.level());
54+
// Serial.print("Battery Level ");
55+
56+
// Serial.println(battery.level());
5657

5758
String s = "bat:" + String(thisGlove) + ":" + String(battery.level());
59+
// String s = "bat:0:24";
60+
5861
wsCon.sendMsg(s);
59-
Serial.print("Battery Voltage ");
60-
Serial.println(battery.voltage());
62+
// Serial.print("Battery Voltage ");
63+
// Serial.println(battery.voltage());
6164

6265

6366
// testing
64-
wsCon.sendMsg("batReq:");
67+
// wsCon.sendMsg("batReq:");
6568

6669

6770
}

lib/BatteryL/BatteryL.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#define SENSE_PIN 32
55
#define ADC_RESOLUTION 12
66
#define ACTIVATION_PIN 12
7-
#define CHECK_INTERVAL 2000
7+
#define CHECK_INTERVAL 10000 // keep this interval large, mpu fifo can overflow when reading battery level
88

99
class BatteryL{
1010

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
#include "InstrumentSelector.h"
2+
#include <Arduino.h>
3+
4+
InstrumentSelector::InstrumentSelector() {
5+
6+
// instrument angle ranges
7+
bottomDrum1YawMin = -90.0;
8+
bottomDrum1YawMax = -10.0;
9+
bottomDrum1PitchMin = -30.0;
10+
bottomDrum1PitchMax = 35.0;
11+
12+
bottomDrum2YawMin = 10.0;
13+
bottomDrum2YawMax = 90.0;
14+
bottomDrum2PitchMin = -30.0;
15+
bottomDrum2PitchMax = 35.0;
16+
17+
symbol1YawMin = -90.0;
18+
symbol1YawMax = -20.0;
19+
symbol1PitchMin = 35.0;
20+
symbol1PitchMax = 90.0;
21+
22+
symbol2YawMin = 20.0;
23+
symbol2YawMax = 90.0;
24+
symbol2PitchMin = 35.0;
25+
symbol2PitchMax = 90.0;
26+
}
27+
28+
void InstrumentSelector::selectInstrument(float *yaw, float *pitch, int *selectedInstrumentID) {
29+
30+
31+
32+
// Check if the angles fall within the defined ranges for each instrument
33+
if (*yaw >= bottomDrum1YawMin && *yaw <= bottomDrum1YawMax && *pitch >= bottomDrum1PitchMin && *pitch <= bottomDrum1PitchMax)
34+
{
35+
// printInstrumentInfo("Bottom Drum 1", yaw, pitch);
36+
*selectedInstrumentID = 1;
37+
}
38+
else if (*yaw >= bottomDrum2YawMin && *yaw <= bottomDrum2YawMax && *pitch >= bottomDrum2PitchMin && *pitch <= bottomDrum2PitchMax)
39+
{
40+
// printInstrumentInfo("Bottom Drum 2", yaw, pitch);
41+
// Serial.print(" Yaw: ");
42+
// Serial.print(*yaw);
43+
// Serial.print(" Pitch: ");
44+
// Serial.print(*pitch);
45+
// Serial.print(" Instrument: ");
46+
// Serial.println("Bottom Drum 2");
47+
*selectedInstrumentID = 2;
48+
49+
}
50+
else if (*yaw >= symbol1YawMin && *yaw <= symbol1YawMax && *pitch >= symbol1PitchMin && *pitch <= symbol1PitchMax)
51+
{
52+
// printInstrumentInfo("Symbol 1", yaw, pitch);
53+
*selectedInstrumentID = 3;
54+
55+
}
56+
else if (*yaw >= symbol2YawMin && *yaw <= symbol2YawMax && *pitch >= symbol2PitchMin && *pitch <= symbol2PitchMax)
57+
{
58+
// printInstrumentInfo("Symbol 2", yaw, pitch);
59+
*selectedInstrumentID = 4;
60+
61+
}
62+
else
63+
{
64+
// printInstrumentInfo("No instrument", *yaw, *pitch);
65+
*selectedInstrumentID = 0;
66+
67+
}
68+
69+
// for some reason printing here is inefficient, and it will cause the mpu fifo buffer to overflow lol
70+
// Serial.println("Bottom Drum 2");
71+
72+
73+
lightUpSelectedInstrument(selectedInstrumentID);
74+
75+
}
76+
77+
78+
// for some reason this function is inefficient
79+
void InstrumentSelector::printInstrumentInfo(int *id, float *yaw, float *pitch) {
80+
81+
Serial.print(" Yaw: ");
82+
Serial.print(*yaw);
83+
Serial.print(" Pitch: ");
84+
Serial.print(*pitch);
85+
Serial.print(" Instrument: ");
86+
switch (*id)
87+
{
88+
case 1:
89+
Serial.println("Bottom Drum 1");
90+
break;
91+
case 2:
92+
93+
Serial.println("Bottom Drum 2");
94+
break;
95+
96+
case 3:
97+
Serial.println("Symbol 1");
98+
break;
99+
100+
case 4:
101+
102+
Serial.println("Symbol 2");
103+
break;
104+
105+
default:
106+
Serial.println("No instrument");
107+
break;
108+
109+
}
110+
111+
}
112+
113+
void InstrumentSelector::setLEDController(LEDController *ledController) {
114+
this->ledController = ledController;
115+
}
116+
117+
void InstrumentSelector::lightUpSelectedInstrument(int *selectedInstrumentID) {
118+
this->ledController->showSelectedInstrument(selectedInstrumentID);
119+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#ifndef INSTRUMENTSELECTOR_H
2+
#define INSTRUMENTSELECTOR_H
3+
4+
#include "LEDController.h"
5+
6+
class InstrumentSelector {
7+
public:
8+
InstrumentSelector();
9+
void selectInstrument(float *yawVal, float *pitchVal, int *selectedInstrumentID);
10+
void setLEDController(LEDController* ledController);
11+
void printInstrumentInfo(int *id, float *yaw, float *pitch);
12+
13+
14+
private:
15+
LEDController* ledController;
16+
17+
float bottomDrum1YawMin;
18+
float bottomDrum1YawMax;
19+
float bottomDrum1PitchMin;
20+
float bottomDrum1PitchMax;
21+
22+
float bottomDrum2YawMin;
23+
float bottomDrum2YawMax;
24+
float bottomDrum2PitchMin;
25+
float bottomDrum2PitchMax;
26+
27+
float symbol1YawMin;
28+
float symbol1YawMax;
29+
float symbol1PitchMin;
30+
float symbol1PitchMax;
31+
32+
float symbol2YawMin;
33+
float symbol2YawMax;
34+
float symbol2PitchMin;
35+
float symbol2PitchMax;
36+
37+
float yaw;
38+
float pitch;
39+
40+
41+
void lightUpSelectedInstrument(int *selectedInstrumentID);
42+
};
43+
44+
#endif

lib/LEDController/LEDController.cpp

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
#include "LEDController.h"
2+
3+
LEDController::LEDController(int leftDrumPin, int rightDrumPin, int leftSymbolPin, int rightSymbolPin)
4+
: leftDrumPin(leftDrumPin), rightDrumPin(rightDrumPin), leftSymbolPin(leftSymbolPin), rightSymbolPin(rightSymbolPin) {
5+
pinMode(leftDrumPin, OUTPUT);
6+
pinMode(rightDrumPin, OUTPUT);
7+
pinMode(leftSymbolPin, OUTPUT);
8+
pinMode(rightSymbolPin, OUTPUT);
9+
10+
digitalWrite(leftDrumPin, LOW);
11+
digitalWrite(rightDrumPin, LOW);
12+
digitalWrite(leftSymbolPin, LOW);
13+
digitalWrite(rightSymbolPin, LOW);
14+
}
15+
16+
void LEDController::showSelectedInstrument(int *instrumentID) {
17+
// Replace with actual LED control logic
18+
switch (*instrumentID) {
19+
case 1:
20+
digitalWrite(leftDrumPin, HIGH);
21+
digitalWrite(rightDrumPin, LOW);
22+
digitalWrite(leftSymbolPin, LOW);
23+
digitalWrite(rightSymbolPin, LOW);
24+
break;
25+
case 2:
26+
digitalWrite(leftDrumPin, LOW);
27+
digitalWrite(rightDrumPin, HIGH);
28+
digitalWrite(leftSymbolPin, LOW);
29+
digitalWrite(rightSymbolPin, LOW);
30+
break;
31+
case 3:
32+
digitalWrite(leftDrumPin, LOW);
33+
digitalWrite(rightDrumPin, LOW);
34+
digitalWrite(leftSymbolPin, HIGH);
35+
digitalWrite(rightSymbolPin, LOW);
36+
break;
37+
case 4:
38+
digitalWrite(leftDrumPin, LOW);
39+
digitalWrite(rightDrumPin, LOW);
40+
digitalWrite(leftSymbolPin, LOW);
41+
digitalWrite(rightSymbolPin, HIGH);
42+
break;
43+
default:
44+
digitalWrite(leftDrumPin, LOW);
45+
digitalWrite(rightDrumPin, LOW);
46+
digitalWrite(leftSymbolPin, LOW);
47+
digitalWrite(rightSymbolPin, LOW);
48+
break;
49+
}
50+
}
51+
52+
void LEDController::showMPU6050Error() {
53+
unsigned long currentMillis = millis();
54+
static unsigned long previousMillis = 0;
55+
static int state = LOW;
56+
if (currentMillis - previousMillis >= 500) {
57+
previousMillis = currentMillis;
58+
state = !state;
59+
digitalWrite(BUILTIN_LED, state);
60+
61+
digitalWrite(leftDrumPin, state);
62+
digitalWrite(rightDrumPin, state);
63+
digitalWrite(leftSymbolPin, LOW);
64+
digitalWrite(rightSymbolPin, LOW);
65+
}
66+
else {
67+
digitalWrite(BUILTIN_LED, LOW);
68+
69+
digitalWrite(leftDrumPin, LOW);
70+
digitalWrite(rightDrumPin, LOW);
71+
digitalWrite(leftSymbolPin, LOW);
72+
digitalWrite(rightSymbolPin, LOW);
73+
}
74+
}
75+
76+
77+
void LEDController::showAPEnabled() {
78+
// pattern like loading
79+
unsigned long currentMillis = millis();
80+
static unsigned long previousMillis = 0;
81+
static int state = LOW;
82+
static int ledIndex = 0;
83+
int ledPins[] = {leftDrumPin, rightDrumPin, leftSymbolPin, rightSymbolPin};
84+
const unsigned long interval = 500;
85+
86+
if (currentMillis - previousMillis >= interval) {
87+
previousMillis = currentMillis;
88+
89+
for (int i = 0; i < 4; i++) {
90+
digitalWrite(ledPins[i], LOW);
91+
}
92+
93+
digitalWrite(ledPins[ledIndex], HIGH);
94+
95+
ledIndex++;
96+
if (ledIndex >= 4) {
97+
ledIndex = 0; // Reset to start
98+
}
99+
}
100+
}
101+
102+
void LEDController::lightUpAll() {
103+
unsigned long currentMillis = millis();
104+
static unsigned long previousMillis = 0;
105+
static int state = LOW;
106+
if (currentMillis - previousMillis >= 1000) {
107+
previousMillis = currentMillis;
108+
state = !state;
109+
digitalWrite(leftDrumPin, state);
110+
digitalWrite(rightDrumPin, state);
111+
digitalWrite(leftSymbolPin, state);
112+
digitalWrite(rightSymbolPin, state);
113+
}
114+
else {
115+
digitalWrite(leftDrumPin, LOW);
116+
digitalWrite(rightDrumPin, LOW);
117+
digitalWrite(leftSymbolPin, LOW);
118+
digitalWrite(rightSymbolPin, LOW);
119+
}
120+
}

lib/LEDController/LEDController.h

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#ifndef LEDCONTROLLER_H
2+
#define LEDCONTROLLER_H
3+
4+
#include <Arduino.h>
5+
6+
class LEDController {
7+
public:
8+
LEDController(int leftDrumPin, int rightDrumPin, int leftSymbolPin, int rightSymbolPin);
9+
void showSelectedInstrument(int *instrumentID);
10+
void showMPU6050Error();
11+
void showAPEnabled();
12+
void lightUpAll();
13+
14+
private:
15+
int leftDrumPin;
16+
int rightDrumPin;
17+
int leftSymbolPin;
18+
int rightSymbolPin;
19+
};
20+
21+
#endif

0 commit comments

Comments
 (0)