Skip to content

Commit

Permalink
working version for tank mode without steering
Browse files Browse the repository at this point in the history
  • Loading branch information
captFuture committed Aug 22, 2024
1 parent 4231a97 commit 102d295
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 23 deletions.
2 changes: 1 addition & 1 deletion platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
platform = espressif32
board = m5stack-core-esp32
framework = arduino
lib_deps = madhephaestus/WiiChuck @ ^0.3.2, siteswapjuggler/Ramp @ ^0.6.0, WiFi, bblanchon/ArduinoJson @ ^6.19.4, M5Stack, siteswapjuggler/Ramp @ ^0.6.0
;lib_deps = madhephaestus/WiiChuck @ ^0.3.2, siteswapjuggler/Ramp @ ^0.6.0, WiFi, bblanchon/ArduinoJson @ ^6.19.4, M5Stack, siteswapjuggler/Ramp @ ^0.6.0
monitor_speed = 115200
52 changes: 35 additions & 17 deletions src/hoverserial.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//#define FEEDBACK_ROBO // adds current and odometer to the feedback struct

//#define DEBUG_RX // for debugging the serial receive data
#define DEBUG_HOVER // will serial.print the feedback struct

Expand All @@ -18,26 +20,37 @@ typedef struct{
int16_t speedR_meas;
int16_t speedL_meas;
int16_t batVoltage;
#ifdef FEEDBACK_ROBO
int16_t iAmpL; // ROBO 100*A
int16_t iAmpR; // ROBO 100*A
int16_t iOdomL; // ROBO 100*A
int16_t iOdomR; // ROBO 100*A
#endif
int16_t boardTemp;
uint16_t cmdLed;
//uint16_t checksum;
} SerialFeedback;


template <typename O,typename I> void SetupHoverEsp32(O& oSerial, I iBaud, I pin_RX, I pin_TX){
template <typename O,typename I> void SetupHoverEsp32(O& oSerial, I iBaud, I pin_RX, I pin_TX)
{
// Serial2.begin(baud-rate, protocol, RX pin, TX pin);
oSerial.begin(iBaud, SERIAL_8N1, pin_RX, pin_TX); //Serial1 = 0, 4 Serial2 = 16,17;
}

template <typename O,typename I> void SetupHoverArduino(O& oSerial, I iBaud){
template <typename O,typename I> void SetupHoverArduino(O& oSerial, I iBaud)
{
oSerial.begin(iBaud);
}


// ########################## SEND ##########################
//void Send(Serial& oSerial, int16_t uSteer, int16_t uSpeed)
template <typename O,typename U> void Send(O& oSerial, U uSteer, U uSpeed)
{
// Create command
//DEBUGT("uSteer",uSteer);DEBUGLN("uSpeed",uSpeed);
//Serial.print("uSteer"); Serial.println(uSteer);
//Serial.print("uSpeed"); Serial.println(uSpeed);
Command.start = (uint16_t)START_FRAME;
Command.steer = (int16_t)uSteer;
Command.speed = (int16_t)uSpeed;
Expand All @@ -51,7 +64,7 @@ template <typename O,typename I> void SendLR(O& oSerial, I iSpeedLeft, I iSpeedR
{
// speed coeff in config.h must be 1.0 : (DEFAULT_)SPEED_COEFFICIENT 16384
// steer coeff in config.h must be 0.5 : (DEFAULT_)STEER_COEFFICIENT 8192
Send(oSerial,iSpeedRight - iSpeedLeft,(iSpeedLeft + iSpeedRight)/2);
Send(oSerial,iSpeedRight,iSpeedLeft);
}


Expand All @@ -60,18 +73,19 @@ void HoverLog(SerialFeedback& Feedback)
{
#ifdef DEBUG_HOVER
//Serial.print("start="); Serial.print(Feedback.start,HEX);
Serial.print("cmdR:");Serial.print(Feedback.cmd1);
Serial.print("\tcmdL:");Serial.print(Feedback.cmd2);
Serial.print("cmd1:");Serial.print(Feedback.cmd1);
Serial.print("\tcmd2:");Serial.print(Feedback.cmd2);
Serial.print("\tvR:");Serial.print(Feedback.speedR_meas);
Serial.print("\tvL:");Serial.print(Feedback.speedL_meas);
Serial.print("\tV:");Serial.print(Feedback.batVoltage/100.0);
Serial.print("\tT:");Serial.print(Feedback.boardTemp);
Serial.print("\tled:");Serial.print(Feedback.cmdLed);
Serial.print("\tleftright:");Serial.print(leftRightValue);
Serial.print("\tforwardreverse:");Serial.print(forwardReverseValue);
Serial.print("\tleftrightC:");Serial.print(leftRightCalibration);
Serial.print("\tforwardreverseC:");Serial.println(forwardReverseCalibration);

#ifdef FEEDBACK_ROBO
Serial.print("\t AL:");Serial.print(Feedback.iAmpL/100.0);
Serial.print("\t AR:");Serial.print(Feedback.iAmpR/100.0);
Serial.print("\txL:");Serial.print(Feedback.iOdomL);
Serial.print("\txR:");Serial.print(Feedback.iOdomR);
#endif
Serial.print("\tT:");Serial.println(Feedback.boardTemp);
//Serial.print("\tled:");Serial.println(Feedback.cmdLed);
//Serial.print("\tcrc="); Serial.println(Feedback.checksum,HEX);
#endif
}
Expand All @@ -83,7 +97,8 @@ void HoverLog(SerialFeedback& Feedback)
#endif

//boolean Receive(Serial& oSerial, SerialFeedback& Feedback)
template <typename O,typename OF> boolean Receive(O& oSerial, OF& Feedback){
template <typename O,typename OF> boolean Receive(O& oSerial, OF& Feedback)
{
int iAvail = oSerial.available() - sizeof(Feedback);
int8_t iFirst = 1;
while (iAvail >= 3+iFirst )
Expand Down Expand Up @@ -123,13 +138,16 @@ template <typename O,typename OF> boolean Receive(O& oSerial, OF& Feedback){
chkRead |= (uint16_t)oSerial.read() << 8;

uint16_t checksum;
checksum = (uint16_t)(START_FRAME ^ tmpFeedback.cmd1 ^ tmpFeedback.cmd2 ^ tmpFeedback.speedR_meas ^ tmpFeedback.speedL_meas ^ tmpFeedback.batVoltage ^ tmpFeedback.boardTemp ^ tmpFeedback.cmdLed);
checksum = (uint16_t)(START_FRAME ^ tmpFeedback.cmd1 ^ tmpFeedback.cmd2 ^ tmpFeedback.speedR_meas ^ tmpFeedback.speedL_meas
// ^ tmpFeedback.iAmpL ^ tmpFeedback.iAmpR // ROBO
// ^ tmpFeedback.iOdomL ^ tmpFeedback.iOdomR // ROBO
^ tmpFeedback.batVoltage ^ tmpFeedback.boardTemp ^ tmpFeedback.cmdLed);

if (checksum == chkRead) //tmpFeedback.checksum
{
memcpy(&Feedback, &tmpFeedback, sizeof(SerialFeedback));
#ifdef DEBUG_RX
Serial.println(" :-)))))))))))))))))))))))))))");
//Serial.println(" :-)))))))))))))))))))))))))))");
#endif

return true;
Expand All @@ -147,4 +165,4 @@ template <typename O,typename OF> boolean Receive(O& oSerial, OF& Feedback){
}
}
return false;
}
}
14 changes: 11 additions & 3 deletions src/main.ino
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
For M5Stack Core esp32 with connected Wii Nunchuck
Serial connection to Hoverboard controller with firmware https://github.com/RoboDurden/hoverboard-firmware-hack-FOC in TANK mode
Todo: control steering...
*/

//#include <Arduino.h>
#include <M5Stack.h>
#include "wii_i2c.h"
Expand Down Expand Up @@ -99,7 +105,7 @@ void setup()
M5.begin();
Serial.begin(SERIAL_BAUD);

SetupHoverArduino(HoverSerial,19200);
SetupHoverArduino(HoverSerial,115200);
speedRamp.go(0);

while (!SPIFFS.begin()) {
Expand Down Expand Up @@ -156,7 +162,7 @@ int first = 0;
lv_gauge_set_value (gauge3, 2, myDrive);
}

//myDrive = target;
myDrive = target;
oldmyDrive = myDrive;
}

Expand All @@ -173,7 +179,7 @@ int first = 0;
lv_gauge_set_value (gauge3, 2, myDrive);
}

//myDrive = target;
myDrive = target;
oldmyDrive = myDrive;
}

Expand Down Expand Up @@ -206,6 +212,8 @@ void loop(void)
int16_t leftwheel= myDrive;
int16_t rightwheel= myDrive;

//TODO -> generate steering out of

Send(HoverSerial, leftwheel, rightwheel );
//Send(HoverSerial, leftwheel, rightwheel );
//Serial.print("Sending: "); Serial.print(myDrive); Serial.print(" "); Serial.print(myDrive); Serial.println(" ");
Expand Down
4 changes: 2 additions & 2 deletions src/nunchuk.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@
forwardReverseInput = -50; // limit backward
}*/

leftRightValue = map(leftRightInput, -100, 100, config.steer_min-(config.boost_max*configNum), config.steer_max+(config.boost_max*configNum));

//leftRightValue = map(leftRightInput, -100, 100, config.steer_min-(config.boost_max*configNum), config.steer_max+(config.boost_max*configNum));
leftRightValue = leftRightInput;
/*if(leftRightValue > 300){
leftRightValue = 500;
}else if(leftRightValue < 300){
Expand Down

0 comments on commit 102d295

Please sign in to comment.