I'm trying to help my friends daughter make a robot that will generate random numbers to make it go on different paths the code compiles when I test it without an uno plugged into my PC but when the uno is plugged in it generates the error stated in the subject line. I'm wondering if the uno just doesn't support my functions or if the random number generators are too much for it.
Thank you in advanced for any help I will be checking back in hourly to see if any replies are made. I must get this code working before 12:00 PM tomorrow (Wednesday, January 24, 2018).
Here's the code.
int MtrL = 3; // motor PWM 500Hz with duty cycle control
int MtrR = 5; // R motor PWM
int MtrLF = 2; // motor L Forward direction
int MtrRF= 4; // motor R Forward direction
int MtrLR = 6; // motor L reverse direction
int MtrRR = 7; // motor R reverse direction
int pattern = 0; // random number generator for path style
int Lpwm = 0; // random number generator for L motor pwm
int Rpwm = 0; // random number generator for R motor pwm
int Time = 0; // random number generator for delays
// the setup routine runs once when you press reset:
void setup() {
pinMode(MtrL, OUTPUT); //PWM to H Bridge L motor
pinMode(MtrR, OUTPUT); //PWM to H Bridge R motor
pinMode(MtrLF, OUTPUT); // fwd signal to H Bridge L motor
pinMode(MtrRF, OUTPUT); // fwd signal to H Bridge R motor
pinMode(MtrLR, OUTPUT); // Rev signal to H Bridge L motor
pinMode(MtrRR, OUTPUT); // Rev signal to H Bridge R motor
delay(5000); // delay after being powered to clear the workspace
}
// the loop routine runs over and over again forever:
void loop() {
pattern = random (1,8); // random number generator for path style
Lpwm = random (125,255); // random number generator for L motor pwm
Rpwm = random (125,255); // random number generator for R motor pwm
Time = random (2000,10000); // random number generator for delays
if(pattern = 1){ // straight line forwards
OnePWM(Lpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
Forward(); // function to make both motors move forward
}
if(pattern = 2){ // straight line backwards
OnePWM(Lpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
Backward(); // function to make both motors move Backward
}
if(pattern = 3){ // straight line backwards
OnePWM(Lpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
OppositeL(); //both motors move opposite directions Left going forward
}
if(pattern = 4){ // straight line backwards
OnePWM(Lpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
OppositeR(); //both motors move opposite directions Right going forward
}
if(pattern = 5){ // slight turn forwards
TwoPWM(Lpwm, Rpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
Forward(); // function to make both motors move forward
}
if(pattern = 6){ // slight turn backwards
TwoPWM(Lpwm, Rpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
Backward(); // function to make both motors move backward
}
if(pattern = 7){ // Sharp turn opposite motors left forwards
TwoPWM(Lpwm, Rpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
OppositeL(); //both motors move opposite directions Left going forward
}
if(pattern = 8){ // Sharp turn opposite motors left forwards
TwoPWM(Lpwm, Rpwm); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore //1/2 speed note never run motors below 50% duty cycle
OppositeR(); //both motors move opposite directions Right going forward
}
delay (Time); //time spent to perform movement
}
// functions
void OnePWM(int left) //controls PWM for Patterns 1-4
{
analogWrite(MtrR, left); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
analogWrite(MtrL, left); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
}
void TwoPWM(int left, int right) //controls PWM for Patterns 5-8
{
analogWrite(MtrR, left); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
analogWrite(MtrL, right); // controls 500Hz PWM waveform duty cycle 0-255, 127=50% DC therefore 1/2 speed note never run motors below 50% duty cycle
}
void Forward() //both motors move forward
{
digitalWrite(MtrLF,HIGH); //Controls L Motor forward Direction
digitalWrite(MtrRF,HIGH); //Controls R Motor forward Direction
digitalWrite(MtrLR,LOW); //Controls L Motor reverse Direction
digitalWrite(MtrRR,LOW); //Controls R Motor reverse Direction
}
void Backward() //both motors move backward
{
digitalWrite(MtrLF,LOW); //Controls L Motor forward Direction
digitalWrite(MtrRF,LOW); //Controls R Motor forward Direction
digitalWrite(MtrLR,HIGH); //Controls L Motor reverse Direction
digitalWrite(MtrRR,HIGH); //Controls R Motor reverse Direction
}
void OppositeL() //both motors move opposite directions Left going forward
{
digitalWrite(MtrLF,HIGH); //Controls L Motor forward Direction
digitalWrite(MtrRF,LOW); //Controls R Motor forward Direction
digitalWrite(MtrLR,LOW); //Controls L Motor reverse Direction
digitalWrite(MtrRR,HIGH); //Controls R Motor reverse Direction
}
void OppositeR() //both motors move opposite directions Right going forward
{
digitalWrite(MtrLF,LOW); //Controls L Motor forward Direction
digitalWrite(MtrRF,HIGH); //Controls R Motor forward Direction
digitalWrite(MtrLR,HIGH); //Controls L Motor reverse Direction
digitalWrite(MtrRR,LOW); //Controls R Motor reverse Direction
}