Skip to content

Commit 25e362e

Browse files
committed
Pads and joystick are working fine.
1 parent 189103c commit 25e362e

File tree

3 files changed

+40
-31
lines changed

3 files changed

+40
-31
lines changed

RX/RX.pde

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "nRF24L01.h"
55
#include "MirfHardwareSpiDriver.h"
66

7-
#define CHANNEL 16
7+
#define CHANNEL 1
88

99
void hello();
1010

@@ -33,47 +33,50 @@ void loop()
3333
static bool padsStates[N_PADS] = {0};
3434
bool padsPressed = false;
3535

36-
static int joyCtrls[2] = {14, 15};
37-
static uint8_t joyLastVals[2] = {0};
38-
uint8_t joyVals[2] = {0};
36+
static int joyCtrls[2] = {0, 1};
37+
static uint16_t joyLastVals[2] = {0};
38+
uint16_t joyVals[2] = {0};
3939
bool pitchChanged = false;
4040

4141
if(Mirf.dataReady())
4242
{
4343
Mirf.getData(buf);
4444

45-
padsPressed = false;
4645
for (int pad = 0; pad < N_PADS; pad++)
4746
{
4847
if (buf[pad] && !padsStates[pad])
4948
{
50-
usbMIDI.sendNoteOn(padsNotes[pad], 255, CHANNEL);
49+
usbMIDI.sendNoteOn(padsNotes[pad], 50, CHANNEL);
5150
padsStates[pad] = true;
5251
padsPressed = true;
5352
}
54-
else if (padsStates[pad])
53+
else if (!buf[pad] && padsStates[pad])
5554
{
5655
usbMIDI.sendNoteOff(padsNotes[pad], 0, CHANNEL);
5756
padsStates[pad] = false;
5857
}
5958
}
6059

61-
joyVals[0] = (buf[N_PADS + 0] << 6) - 0x2000;
62-
joyVals[1] = (buf[N_PADS + 1] << 6) - 0x2000;
63-
// [ val * 0x4000 / 256 - 0x2000 ]
60+
joyVals[0] = (uint16_t)buf[N_PADS + 0] | ((uint16_t)buf[N_PADS + 1] << 8);
61+
joyVals[1] = buf[N_PADS + 2];
6462

65-
if (joyVals[0] != joyLastVals[0] || joyVals[1] != joyLastVals[1])
63+
if (joyVals[0] != joyLastVals[0])
6664
{
67-
usbMIDI.sendControlChange(joyCtrls[0], joyVals[0], CHANNEL);
68-
usbMIDI.sendControlChange(joyCtrls[1], joyVals[1], CHANNEL);
65+
usbMIDI.sendPitchBend(joyVals[0], CHANNEL);
66+
pitchChanged = true;
6967
joyLastVals[0] = joyVals[0];
70-
joyLastVals[1] = joyVals[1];
68+
}
69+
70+
if (joyVals[1] != joyLastVals[1])
71+
{
72+
usbMIDI.sendControlChange(joyCtrls[1], joyVals[1], CHANNEL);
7173
pitchChanged = true;
74+
joyLastVals[1] = joyVals[1];
7275
}
7376

7477
usbMIDI.send_now();
7578

76-
if (padsPressed || pitchChanged)
79+
if (padsPressed || pitchChanged)
7780
digitalWrite(LED, HIGH);
7881
else
7982
digitalWrite(LED, LOW);

TX/TX.pde

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ typedef enum {
1919
bool padsPressed = false;
2020
bool padsStates[N_PADS] = {false};
2121
bool joyPressed = true;
22-
int16_t joyValX = 0;
23-
int16_t joyValY = 0;
22+
uint16_t joyValX = 0;
23+
uint16_t joyValY = 0;
2424

2525
void hello();
2626
void readPads();
@@ -31,6 +31,8 @@ void setup()
3131
// with a 3.3V supply we need 8MHz instead of 16MHz
3232
SET_CPU_FREQ;
3333

34+
Serial.begin(115200);
35+
3436
pinMode(LED, OUTPUT);
3537
hello();
3638

@@ -52,8 +54,9 @@ void loop()
5254
buf[i] = padsStates[i] ? 1 : 0;
5355

5456
readJoy();
55-
buf[N_PADS + 0] = (uint8_t)joyValX;
56-
buf[N_PADS + 1] = (uint8_t)joyValY;
57+
buf[N_PADS + 0] = (uint8_t)(joyValX >> 0);
58+
buf[N_PADS + 1] = (uint8_t)(joyValX >> 8);
59+
buf[N_PADS + 2] = (uint8_t)joyValY;
5760

5861
#ifdef DEBUG_LED
5962
if (padsPressed || joyPressed)
@@ -69,7 +72,7 @@ void loop()
6972
void readPads()
7073
{
7174
padsPressed = false;
72-
for (uint8_t i = 0; i < N_PADS; i++)
75+
for (int i = 0; i < N_PADS; i++)
7376
{
7477
if(digitalRead(PAD1 + i) == HIGH)
7578
{
@@ -83,18 +86,21 @@ void readPads()
8386

8487
void readJoy()
8588
{
86-
const int16_t THRESHOLD = 1 << 3; //neglect up to the 3th LSB
87-
88-
int16_t newJoyValX = analogRead(JOY_X) >> 3;
89-
int16_t newJoyValY = ABS( ((analogRead(JOY_Y) >> 2) - 127) );
90-
newJoyValY = newJoyValY>127? 127 : newJoyValY;
91-
89+
uint16_t newJoyValX = 16383 - analogRead(JOY_X) * (16384 / 1023);
90+
uint16_t newJoyValY = ABS(((analogRead(JOY_Y) >> 2) - 127));
91+
newJoyValY = newJoyValY > 127 ? 127 : newJoyValY;
92+
9293
joyPressed = false;
93-
if (ABS(joyValX - newJoyValX) > THRESHOLD ||
94-
ABS(joyValY - newJoyValY) > THRESHOLD)
94+
95+
if (ABS(joyValX - newJoyValX) > (1 << 5))
96+
{
97+
joyValX = newJoyValX;
98+
joyPressed = true;
99+
}
100+
101+
if (ABS(joyValY - newJoyValY) > (1 << 3))
95102
{
96-
joyValX = newJoyValX; // keep only 8 significant bits...
97-
joyValY = newJoyValY; // ...out of the 10 obtained.
103+
joyValY = newJoyValY;
98104
joyPressed = true;
99105
}
100106
}

common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
#define N_PADS 4
2121
#define N_JOYS 1
22-
#define PAYLOAD (N_PADS + 2 * N_JOYS)
22+
#define PAYLOAD (N_PADS + 3 * N_JOYS)
2323
#define LED 11
2424

2525
#endif

0 commit comments

Comments
 (0)