is there any way to convert this project to use pwm ?
jbprojects . net/projects/wifirobot/
is there any way to convert this project to use pwm ?
jbprojects . net/projects/wifirobot/
The motor control probably does use PWM.
but it does not call for the servo script at all . the rc car is just a cheap rc car from radio shack and the truck i have is a traxxas ( i forget what kind ) witch user a servo and power magement box
edit: here is the arduino code
#define DEBUG 0
#define WAIT_FOR_START 1
unsigned char incomingByte = 0;
unsigned long loop_count = 0;
unsigned char horn = 32;
unsigned char redLED = 64;
unsigned char greenLED = 128;
unsigned char forward = 1;
unsigned char backward = 2;
unsigned char left = 4;
unsigned char right = 8;
unsigned char PORTB_val;
unsigned char PORTD_val;
unsigned char in_char = 0;
void setup()
{
//PORTD = digital IO 0-7
//horn, redLED, greenLED
pinMode(5, OUTPUT); // sets the digital pin as output
pinMode(6, OUTPUT); // sets the digital pin as output
pinMode(7, OUTPUT); // sets the digital pin as output
//PORTB = digital IO 8 - 13
//right, left, backwards, forward
pinMode(8, OUTPUT); // sets the digital pin as output
pinMode(9, OUTPUT); // sets the digital pin as output
pinMode(10, OUTPUT); // sets the digital pin as output
pinMode(11, OUTPUT); // sets the digital pin as output
Serial.begin(9600); // set up Serial library at 9600 bps
PORTD = redLED; // turn on the red LED
#if DEBUG
flash_led(3,500);
#endif
wait_for_start(); //Waits for startup message from router serial port
//continues after receiving it.
}
void flash_led(unsigned int count, unsigned int rate)
{
// debug routine that flashes an LED
int n_count = 0;
while (n_count < count)
{
n_count++;
digitalWrite(13, HIGH); // sets the LED on
delay(rate); // waits for a bit
digitalWrite(13, LOW); // sets the LED off
delay(rate); // waits for a bit
}
}
char get_char()
{
//Function that waits for a character from the serial port
//If none are received, it returns 0.
//The timeout is so that if the router stops sending data to the microcontroller,
//the micrcontroller will stop driving the car, rather than just going forever with
//the last command. Timeout is around 250mS.
while (loop_count < 30000)
{
loop_count++;
if (Serial.available() > 0)
{
incomingByte = Serial.read();
loop_count = 0;
return incomingByte;
}
}
loop_count = 0;
#if DEBUG
Serial.print('X', BYTE);
#endif
return 0;
}
unsigned char wait_for_start()
{
//Waits for startup message from router serial port
#if WAIT_FOR_START
#if DEBUG
Serial.println("Waiting...");
#endif
while(1)
{
if (get_char() == 'j' && get_char() == 'b' && get_char() == 'p' && get_char() == 'r' && get_char() == 'o')
{
#if DEBUG
Serial.print("Passcode Accepted");
#endif
return 0;
}
}
#endif
}
void loop()
{
//Function that processes input from serial port and drives the car based
//on that input.
in_char = get_char();
//Split byte received in to upper and lower halves.
PORTB_val = in_char & 0x0F;
PORTD_val = in_char & 0xF0;
//Make sure the greenLED is turned on now.
if ((PORTD_val & greenLED) == 0)
{
PORTD_val = PORTD_val + greenLED;
}
//The following IF statements are sanity checks to make sure that FORWARD and BACKWARD cannot be on at the same time
//and that LEFT and RIGHT can't be on at the same time.
if ((PORTB_val & (left + right)) == (left + right))
{
PORTB_val = PORTB_val - right;
}
if ((PORTB_val & (forward + backward)) == (forward + backward))
{
PORTB_val = PORTB_val - backward;
}
//Write the processed values to the ports.
PORTD = PORTD_val;
PORTB = PORTB_val;
#if DEBUG
Serial.print(PORTD, HEX);
Serial.print(PORTB, HEX);
#endif
}