[Solved]Driving a single servo
-
using the M5 with firmware 1.2.3en and arduino 1.8.9
I know you can't use servo.h, so I came up with a work around, or at least I thought I did.
I cannot have M5.begin(); in the code or the servo doesn't work, without that the servo works but I cannot write to display.
Is there a solution? here's the example code;#include <M5Stack.h>
#define servoPin 5
int i = 0;
int servoPulse(int angle) {
int pulseWidth = map(angle, 0, 180, 544, 2400);
return pulseWidth;
}void setup() {
m5.begin(); Serial.begin(9600); pinMode(servoPin, OUTPUT);}
void loop() {
for (int i=0; i<=180; i++) { // drive servo from 0 to 180 at max response
int pulseWidth = servoPulse(i);
//digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseWidth);
//digitalWrite(servoPin, LOW);
delayMicroseconds(20000 - pulseWidth);
Serial.print(i);
}for (int i=180; i>=0; i--) { // return to 0 at half speed
int pulseWidth = servoPulse(i);
//digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseWidth);
//digitalWrite(servoPin, LOW);
// delayMicroseconds(20000 - pulseWidth);
delay(50);
Serial.print(i);
}}
-
Hi, Please try to comment out this line -> Serial.begin(9600);
Thank you!
-
(Already set to serial speed 115200 in M5.begin () function)
-
I was hoping that it would be that simple, however, that wasn't the solution.
I cannot use M5.Lcd.print and the servo at the same time.
-
What device are you using?
I use G21 which is also SDA on port A -
I'm using an M5stack Core with the accelerometer built in, and arduino 1.8.9
This problem occurs when using M5.begin(); which I apparently need to print to lcd inside the loop.
So for instance, inside the loop,
M5.Lcd.setCursor(0, 200);
M5.lcd.setTextColor(WHITE,BLACK);
M5.Lcd.print (i);The Servo will not work, but instead chatter.
// M5.begin(); servo works but the display does not (this statement is inside the setup, for example,void setup() {
M5.begin();
//myservo.attach(servoPin);
}
-
@jimw Please try this code.
Serial speed 115200and the firmware (1.2.3-en) for micropython
It is not for Arduino.#include <M5Stack.h> int servoPin = 5; void servoSet(int Angle, int Time) { int pulseWidth; int TimeCount; TimeCount = Time / 20; for (int i = 0; i <= TimeCount; i++) { pulseWidth = map(Angle, 0, 180, 544, 2400); digitalWrite(servoPin, HIGH); delayMicroseconds(pulseWidth); digitalWrite(servoPin, LOW); delayMicroseconds(20000 - pulseWidth); } } void setup() { M5.begin(); M5.Lcd.printf("M5Stack Servo test:\n"); pinMode(servoPin, OUTPUT); } void loop() { M5.Lcd.printf("Angle 45deg\n"); Serial.println("Angle 45deg"); servoSet(45, 1000); //45deg M5.Lcd.printf("Angle 135deg\n"); Serial.println("Angle 135deg"); servoSet(135, 1000); //135deg }
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login