Hi!
I have a platform(tracked) with two engines. I want to write a simple program that moves the car forward, backward and spin both directions. I used the following circuit, from the netmftoolbox documentation.
http://netmftoolbox....ailable classes
The code doesn't work for me for some reason, the engines do what ever they want.
I am trying to use a code I found on YouTube(modified for my use and the 4.2 version), here is the code:
class Motor
{
private OutputPort directionPort;
private PWM velocityPort;
private uint velocity;
private bool direction;
public const bool Forward = true;
public const bool Backward = false;
public Motor(int PWMPortNum,Cpu.Pin pinForDirection)
{
//
switch (PWMPortNum)
{
case 3: velocityPort = new PWM(PWMChannels.PWM_PIN_D3, 1000, 0.5, false); break;
case 5: velocityPort = new PWM(PWMChannels.PWM_PIN_D5, 1000, 0.5, false); break;
case 6: velocityPort = new PWM(PWMChannels.PWM_PIN_D6, 1000, 0.5, false); break;
case 9: velocityPort = new PWM(PWMChannels.PWM_PIN_D9, 1000, 0.5, false); break;
case 10: velocityPort = new PWM(PWMChannels.PWM_PIN_D10, 1000, 0.5, false); break;
case 11: velocityPort = new PWM(PWMChannels.PWM_PIN_D11, 1000, 0.5, false); break;
default: velocityPort = new PWM(PWMChannels.PWM_PIN_D5, 1000, 0.5, false); break;
}
directionPort = new OutputPort(pinForDirection, false);
directionPort.DisableInterrupt();
}
public void Stop()
{
this.Velocity = 0;
this.velocityPort.Stop();
}
public bool Direction
{
get { return this.direction; }
set
{
this.direction = value;
UpdateDirection();
}
}
public uint Velocity
{
get { return this.velocity; }
set
{
this.velocity = value;
UpdateVelocity();
}
}
private void UpdateVelocity()
{
velocityPort.DutyCycle = velocity;
velocityPort.Start();
}
private void UpdateDirection()
{
directionPort.Write(Direction);
}
}
-------------------------------------------------------------------------
class DriveSystem
{
private Motor leftMotor;
private Motor rightMotor;
public DriveSystem()
{
rightMotor = new Motor(5, Pins.GPIO_PIN_D4);
leftMotor = new Motor(6, Pins.GPIO_PIN_D7);
}
public void Stop()
{
leftMotor.Stop();
rightMotor.Stop();
}
public void SetLeftSpeed(uint speed)
{
leftMotor.Velocity = speed;
}
public void SetRightSpeed(uint speed)
{
rightMotor.Velocity = speed;
}
}
--------------------------------------------
public class Program
{
public static void Main()
{
DriveSystem driveSystem = new DriveSystem();
driveSystem.SetLeftSpeed(100);
driveSystem.SetRightSpeed(1);
Thread.Sleep(5000);
driveSystem.Stop();
driveSystem.SetLeftSpeed(1);
driveSystem.SetRightSpeed(100);
Thread.Sleep(5000);
driveSystem.Stop();
driveSystem.SetLeftSpeed(50);
driveSystem.SetRightSpeed(50);
Thread.Sleep(5000);
driveSystem.Stop();
}
}
The robot is not moving if I give zero speed value to one of my motors. But the code above only moves one motor(the first) and at the second one - nothing. Only when it gets to the part when both of them should go it - it works.
I am in desperate need of help. I busted my head trying to get it working for the last month, and the project is due tomorrow.(My project is a robot controlled by motion captured from a camera, so I need the robot...)
Thank you