AtomMotion + PS4 Gamepad
-
Hello,
I'm trying to build a RC car with PS4 Gamepad as controller.
If I connect the servo directly to the AtomLite and Pin25, it is working like a charm, with the following example:#include <ESP32Servo.h> #include <PS4Controller.h> Servo myservo; int servoPos = 0; int servoPin = 25; void setup(){ ESP32PWM::allocateTimer(0); ESP32PWM::allocateTimer(1); ESP32PWM::allocateTimer(2); ESP32PWM::allocateTimer(3); myservo.setPeriodHertz(50); // standard 50 hz servo myservo.attach(servoPin, 500, 2400); PS4.begin("4C:75:25:AD:78:7A"); Serial.println("Ready."); } void loop() { if (PS4.isConnected()) { servoPos = (PS4.R2Value()) / 2; } myservo.write(servoPos); delay(100); }
but if I change to MotionBase it is very laggy.
#include <M5Atom.h> #include "AtomMotion.h" #include <PS4Controller.h> AtomMotion Atom; int servoPos; void setup(){ M5.begin(true, false, true); Atom.Init(); PS4.begin("4C:75:25:AD:78:7A"); Serial.println("Ready."); } void loop() { if (PS4.isConnected()) { servoPos = (PS4.R2Value()) / 2; } Atom.SetServoAngle(1,servoPos); delay(100); }
What I'm doing wrong?
-
I played a little bit with the sorce code and tried to write the register of the STM32 direclty over I2C.
#include <Wire.h> #include <PS4Controller.h> #define SERVO_ADDRESS 0X38 int servoPos; void setup() { Wire.begin (25, 21); PS4.begin("4C:75:25:AD:78:7A"); Serial.println("Ready."); } uint8_t SetServoAngle(uint8_t angle) { Write1Byte(SERVO_ADDRESS,0,angle); return 0; } void Write1Byte(uint8_t address,uint8_t Register_address,uint8_t data) { Wire.beginTransmission(address); Wire.write(Register_address); Wire.write(data); Wire.endTransmission(); } void loop() { if (PS4.isConnected()) { servoPos = (PS4.R2Value()) / 2; } SetServoAngle(servoPos); delay(100); }
But the problems still exists, so maybe the problem is the FW of the STM32F030F4.
-
My board was defect, I changed the MotionBase , now it is working perfectly.