Arduino Control of DYN4925WP
#1
Arduino Control of DYN4925WP
Please help!
I saw a mention of the DYN4925WP, but I didn't find working code, just discussions about it.
I have the ESC working for both forward and reverse, if done alone (one or the other).
When doing one, then the other, the second does not perform.
After the code that makes it go forward, I added this to attemp reverse
(this is after a a good forward movement):
steeringPin.write(Left);
delay(1000);
throttlePin.write(Stop);
delay(2500);
throttlePin.write(RVS); //vereified that value enterred into RVS does work if forward not done first
delay(150);
throttlePin.writeMicroseconds(0);
steeringPin.write(Strait);
delay(1000);
I saw a mention of the DYN4925WP, but I didn't find working code, just discussions about it.
I have the ESC working for both forward and reverse, if done alone (one or the other).
When doing one, then the other, the second does not perform.
After the code that makes it go forward, I added this to attemp reverse
(this is after a a good forward movement):
steeringPin.write(Left);
delay(1000);
throttlePin.write(Stop);
delay(2500);
throttlePin.write(RVS); //vereified that value enterred into RVS does work if forward not done first
delay(150);
throttlePin.writeMicroseconds(0);
steeringPin.write(Strait);
delay(1000);
Last edited by ErikP; 02-28-2014 at 09:23 PM. Reason: add comment
#2
Have you calibrated the ESC to the Arduino?
http://arduino.cc/en/Tutorial/Sweep#.UxHysGePKUk
The PWM range for the Sevo library is from 0 to 179. Your ESC probably doesn't know where the Neutral and FWD/REV start, with respect to the dutycycle coming out of the arduino. That can cause all sorts of problems. Write a function, or program that will calibrate the ESC.
What values are you using in your variables?
Shawn.
http://arduino.cc/en/Tutorial/Sweep#.UxHysGePKUk
The PWM range for the Sevo library is from 0 to 179. Your ESC probably doesn't know where the Neutral and FWD/REV start, with respect to the dutycycle coming out of the arduino. That can cause all sorts of problems. Write a function, or program that will calibrate the ESC.
What values are you using in your variables?
Shawn.
Last edited by Shawn68z; 03-01-2014 at 06:55 AM. Reason: Spelling
#3
Rest of the Code
I don't think I had it callibrated the last time, when it worked. I just looked for what it wanted to hear, so to speak. Last time it took me two weeks of random coding to get it, though. This time I want to do it right.
Well, in my previous version, I had a statement before and after the call to go in reverse. I can not remember how I did it (lost code to bad sectors, keeping everything on flash drives now). Essentially, it paused before and after the reverse to allow switching from forward to reverse and back...I've looked at code others have done, but it is all dependant on using a remote. That is a different project for me. Thank you for your advice. Code follows (with commented out corrections or attempts): Again, thank you all. I am amazed at what some of you have created.
#include <Servo.h>
#include "pitches.h"
//=============
//=============
Servo throttlePin;
Servo steeringPin;
int pos = 86;
const int Stop = 0;//Or Neutral, depending on location
const int FWD = 5;//85 Slowest, 75 Slow Usable, 10 Fast, 5 Fastest
const int RVS = 2000;//Ranged 2000 to 2222
const int Strait = 86;
const int Left = 10;
const int Right = 110;
void setup()
{
Serial.begin(9600);
throttlePin.attach(36);//was 36
throttlePin.writeMicroseconds(Stop);
delay(1500);
throttlePin.writeMicroseconds(90);//This may be the neutral? ---- 3-1-2014 1:08am - untested
throttlePin.writeMicroseconds(Stop);//2nd Time to Turn OFF Brakes, maybe ---- 3-1-2014 1:08am - untested
//delay(100);
steeringPin.attach(34);//was 34
steeringPin.write(Strait);
}
void loop()
{
throttlePin.write(FWD);
delay(100);
throttlePin.writeMicroseconds(0);//Stops Movement But does Not Brake
//throttlePin.writeMicroseconds(RVS);//Stops Movement And does Brake
Serial.println(" ");
delay(1000);
//---------------------------------------------------------------------------------------------------------
Reverse();
//---------------------------------------------------------------------------------------------------------
Serial.println(" ");
delay(1000);
throttlePin.write(FWD);
delay(100);
throttlePin.writeMicroseconds(0);
Serial.println(" ");
delay(1000);
}
void Reverse()
{
//---------------------------------------------------------------------------------------------------------
steeringPin.write(Left);
delay(1000);
//throttlePin.write(Stop);
// delay(5000);
throttlePin.writeMicroseconds(2000);
throttlePin.write(RVS);
//throttlePin.writeMicroseconds(2000);
throttlePin.write(Stop);
delay(2500);
throttlePin.write(RVS);
delay(150);
throttlePin.writeMicroseconds(0);
steeringPin.write(Strait);
delay(1000);
//---------------------------------------------------------------------------------------------------------
}
Well, in my previous version, I had a statement before and after the call to go in reverse. I can not remember how I did it (lost code to bad sectors, keeping everything on flash drives now). Essentially, it paused before and after the reverse to allow switching from forward to reverse and back...I've looked at code others have done, but it is all dependant on using a remote. That is a different project for me. Thank you for your advice. Code follows (with commented out corrections or attempts): Again, thank you all. I am amazed at what some of you have created.
#include <Servo.h>
#include "pitches.h"
//=============
//=============
Servo throttlePin;
Servo steeringPin;
int pos = 86;
const int Stop = 0;//Or Neutral, depending on location
const int FWD = 5;//85 Slowest, 75 Slow Usable, 10 Fast, 5 Fastest
const int RVS = 2000;//Ranged 2000 to 2222
const int Strait = 86;
const int Left = 10;
const int Right = 110;
void setup()
{
Serial.begin(9600);
throttlePin.attach(36);//was 36
throttlePin.writeMicroseconds(Stop);
delay(1500);
throttlePin.writeMicroseconds(90);//This may be the neutral? ---- 3-1-2014 1:08am - untested
throttlePin.writeMicroseconds(Stop);//2nd Time to Turn OFF Brakes, maybe ---- 3-1-2014 1:08am - untested
//delay(100);
steeringPin.attach(34);//was 34
steeringPin.write(Strait);
}
void loop()
{
throttlePin.write(FWD);
delay(100);
throttlePin.writeMicroseconds(0);//Stops Movement But does Not Brake
//throttlePin.writeMicroseconds(RVS);//Stops Movement And does Brake
Serial.println(" ");
delay(1000);
//---------------------------------------------------------------------------------------------------------
Reverse();
//---------------------------------------------------------------------------------------------------------
Serial.println(" ");
delay(1000);
throttlePin.write(FWD);
delay(100);
throttlePin.writeMicroseconds(0);
Serial.println(" ");
delay(1000);
}
void Reverse()
{
//---------------------------------------------------------------------------------------------------------
steeringPin.write(Left);
delay(1000);
//throttlePin.write(Stop);
// delay(5000);
throttlePin.writeMicroseconds(2000);
throttlePin.write(RVS);
//throttlePin.writeMicroseconds(2000);
throttlePin.write(Stop);
delay(2500);
throttlePin.write(RVS);
delay(150);
throttlePin.writeMicroseconds(0);
steeringPin.write(Strait);
delay(1000);
//---------------------------------------------------------------------------------------------------------
}
#4
Another Try, still does reverse without the forward first
I took your advice, and did a sweep version of the code. Still trying to find the solution.
ESC - DYN4925WP
ESC properties - Red when Forward, Green when Reverse
Problem: Green and Red light up when attempting reverse after Forward.
The sweeping code and my previous version has the same outcome.
I've also tried Forward, reverse, nuetral, reverse, and variations of that...
This is the new code, with the sweeping calls:
#include <Servo.h>
//=============
//=============
Servo throttlePin;
Servo steeringPin;
int pos = 0;
const int Stop = 0;
const int FWD = 5;
const int RVS = 2000;
const int Strait = 86;
const int Left = 10;
const int Right = 110;
void setup()
{
Serial.begin(9600);
throttlePin.attach(36);
steeringPin.attach(34);
steeringPin.write(Strait);
}
void loop()
{
//1500 causes Green Light, but no movement
//1550 nothing
//1575 SLOWEST REVERSE POS
//reverse is 1600Slow to 2222
//throttlePin.write(1575);
//delay(200);
for(pos = 0; pos < 12; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 12 ; pos >=1; pos -= 1) // goes from 180 degrees to 0 degrees
{
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
throttlePin.writeMicroseconds(RVS);
throttlePin.writeMicroseconds(0);
delay(3000);
for(pos = 1550; pos < 1700; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 1700 ; pos >=1551; pos -= 1) // goes from 180 degrees to 0 degrees
{
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(3000);
}
ESC - DYN4925WP
ESC properties - Red when Forward, Green when Reverse
Problem: Green and Red light up when attempting reverse after Forward.
The sweeping code and my previous version has the same outcome.
I've also tried Forward, reverse, nuetral, reverse, and variations of that...
This is the new code, with the sweeping calls:
#include <Servo.h>
//=============
//=============
Servo throttlePin;
Servo steeringPin;
int pos = 0;
const int Stop = 0;
const int FWD = 5;
const int RVS = 2000;
const int Strait = 86;
const int Left = 10;
const int Right = 110;
void setup()
{
Serial.begin(9600);
throttlePin.attach(36);
steeringPin.attach(34);
steeringPin.write(Strait);
}
void loop()
{
//1500 causes Green Light, but no movement
//1550 nothing
//1575 SLOWEST REVERSE POS
//reverse is 1600Slow to 2222
//throttlePin.write(1575);
//delay(200);
for(pos = 0; pos < 12; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 12 ; pos >=1; pos -= 1) // goes from 180 degrees to 0 degrees
{
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
throttlePin.writeMicroseconds(RVS);
throttlePin.writeMicroseconds(0);
delay(3000);
for(pos = 1550; pos < 1700; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 1700 ; pos >=1551; pos -= 1) // goes from 180 degrees to 0 degrees
{
throttlePin.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(3000);
}
#5
I've got it!
It is a matter of adding the following code before and after the call for reversing. throttlePin is how I defined my throttle servo. For others, it will be different. Both versions of code, in this post, work if these lines are added:
throttlePin.writeMicroseconds(1500);
delay(2400);//2400 bare min. 3000 works well
throttlePin.writeMicroseconds(1500);
delay(2400);//2400 bare min. 3000 works well