working remoteControl via espNow

This commit is contained in:
2023-04-11 12:47:32 +02:00
parent e3c452436d
commit 3fab7c7f83
8 changed files with 125 additions and 78 deletions
+42 -35
View File
@@ -16,58 +16,65 @@ ControlPad::ControlPad() {
}
bool ControlPad::loop() {
this->receiveData();
if (millis() - this->lastLoopMillis < this->loopDelay)
return false;
this->lastLoopMillis = millis();
// if(!this->connected)
// return false;
if(!this->connected)
return false;
// if (millis() - this->lastMessageReceive > this->disconnectTime) {
// this->connected = false;
// return false;
// }
if (millis() - this->lastMessageReceive > this->disconnectTime) {
this->connected = false;
this->controlInput.buttons = 0;
this->controlInput.x = 127;
this->controlInput.y = 127;
return false;
}
// if (this->menuControl && this->controlInput.buttons > 0 && this->updated)
// if (!this->firstButtonPress)
// this->menuControl->printMenu();
if (this->lastButtons != controlInput.buttons)
this->updated = true;
// if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Left))
// this->menuControl->left();
// else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Right))
// this->menuControl->right();
// else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Up))
// this->menuControl->up();
// else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Down))
// this->menuControl->down();
// else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Yes))
// this->menuControl->yes();
// else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::No))
// this->menuControl->no();
if (this->menuControl && this->controlInput.buttons > 0 && this->updated) {
if (this->firstButtonPress) {
this->menuControl->printMenu();
this->firstButtonPress = false;
std::cout << "ControlPad::loop - First menu print" << std::endl;
return true;
}
// this->menuControl->update();
if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Left))
this->menuControl->left();
else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Right))
this->menuControl->right();
else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Up))
this->menuControl->up();
else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Down))
this->menuControl->down();
else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::Yes))
this->menuControl->yes();
else if (ControlPadButton::isControlPadButtonPressed(&this->controlInput, ControlPadButton::PadButton::No))
this->menuControl->no();
this->updated = false;
this->lastButtons = controlInput.buttons;
}
return true;
}
void ControlPad::insertData(const uint8_t *data) {
this->connected = true;
this->lastMessageReceive = millis();
uint8_t lastCount = this->controlInput.counter + 1;
memcpy(&(this->controlInput), data, sizeof(this->controlInput));
if (lastCount != this->controlInput.counter)
std::cout << "ControlPad::insertData counter wrong value" << std::endl;
this->lastMessageReceive = millis();
std::cout << "data: " << (int) this->controlInput.counter << std::endl;
}
const ControlPadInput * ControlPad::getControlPadDataPtr(uint16_t maxElapsedTime) const {
if (maxElapsedTime && millis() - this->lastMessageReceive > maxElapsedTime)
return nullptr;
return &this->controlInput;
}
void ControlPad::receiveData() {
if (this->controlInput.x > 127 - this->deadZoneX
&& this->controlInput.x < 127 + this->deadZoneX)
this->controlInput.x = 127;
if (this->controlInput.y > 127 - this->deadZoneY
&& this->controlInput.y < 127 + this->deadZoneY)
this->controlInput.y = 127;
}
+5 -6
View File
@@ -25,7 +25,7 @@ class ControlPad {
void setMenuControl(MenuControl* menuControl) { this->menuControl = menuControl; }
const ControlPadInput * getControlPadDataPtr(uint16_t maxElapsedTime = 0) const;
const ControlPadInput * getControlPadDataPtr() const { return &this->controlInput; }
bool isControlPadConnected() const { return this->connected; }
@@ -33,13 +33,13 @@ class ControlPad {
MenuControl* menuControl = nullptr;
ControlPadInput controlInput;
void receiveData();
bool connected = false;
bool updated = false;
bool firstButtonPress = false;
bool firstButtonPress = true;
const uint8_t address[2][6] = { "rover", "ardui" };
uint8_t deadZoneX = 10;
uint8_t deadZoneY = 10;
uint8_t lastButtons = 0;
uint16_t disconnectTime = 50;
uint16_t loopDelay = 5;
@@ -47,5 +47,4 @@ class ControlPad {
uint32_t lastMessageReceive = 0;
uint32_t lastLoopMillis = 0;
};
+40 -8
View File
@@ -25,17 +25,49 @@ struct ControlPadInput {
class ControlPadButton {
public:
enum PadButton {
Left,
Right,
Up,
Down,
Yes,
No,
Action
Left = 4,
Right = 8,
Up = 2,
Down = 1,
Yes = 32,
No = 16,
Action = 64
};
static bool isControlPadButtonPressed(const ControlPadInput *input, PadButton button) {
return false;
uint8_t buttonNum = input->buttons;
switch (button) {
case PadButton::Left :
return buttonNum & (uint8_t) PadButton::Left;
break;
case PadButton::Right :
return buttonNum & (uint8_t) PadButton::Right;
break;
case PadButton::Up :
return buttonNum & (uint8_t) PadButton::Up;
break;
case PadButton::Down :
return buttonNum & (uint8_t) PadButton::Down;
break;
case PadButton::Yes :
return buttonNum & (uint8_t) PadButton::Yes;
break;
case PadButton::No :
return buttonNum & (uint8_t) PadButton::No;
break;
case PadButton::Action :
return buttonNum & (uint8_t) PadButton::Action;
break;
default:
return false;;
}
}
};