Lo primero gracias por ayudarme
Estoy intentando hacer con mi hijo un coche 4x4 con sensor hc-sr04 y un servo que lo va girando. con Arduino Mega y Controlador de motores l293d
me funciona la programacion de motores y el sensor hc-sr04
#include <NewPing.h>
#include <AFMotor.h>
#define TRIGGER_PIN 31 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 33 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance
AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);
int Vel = 200 ; // Define la velocidad base del Rover
void setup()
{
Serial.begin(9600);
pinMode(35, OUTPUT) ; // Usaremos el pin 35 como VCC de 5V
digitalWrite(35, HIGH) ;
delay(5000); // Por si acaso
}
void loop()
{
//con las dos siguientes instrucciones vamos a medir la distancia ante el objeto más cercano
//como está dentro del loop, esta medición se va a realizar mientras el coche se esté ejecuentando, es decir, continuamente
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS)
//el resultado del pulso se guarda en la variable "dist"
int dist = uS / US_ROUNDTRIP_CM ;
Serial.println(dist) ;
// si la distancia es mayor a 35cm avanzamos
if (dist > 35 or dist==0 )
{
Avance() ;
}
// si la distancia es menor a 15 cm hacemos primero un retroceso, pausa de medio segundo, y hacemos un giro a la izquierda
else if ( dist < 15 or dist == 1)
{
Retroceso() ;
delay(500);
giroSobresi_izquierda() ;
delay(500);
}
//en cualquier otro caso, que será que el valor esté entre 15 y 30 haremos un giro a la izquierda
else
{
giroSobresi_derecha() ;
delay (400);
}
delay(250);
}
void SetVel(int v1, int v2, int v3, int v4)
{
Motor1.setSpeed(v1);
Motor2.setSpeed(v2);
Motor3.setSpeed(v3);
Motor4.setSpeed(v4);
}
void Avance()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void Retroceso()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(BACKWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void Paro()
{ Motor1.run(RELEASE);
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
}
void giroIzquierda()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(FORWARD) ;
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(FORWARD);
}
void giroDerecha()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(RELEASE) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(RELEASE);
}
void giroSobresi_derecha()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(FORWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(FORWARD);
}
void giroSobresi_izquierda()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(BACKWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(BACKWARD);
}
Tambien el codigo con el servo
// Incluímos la librería para poder controlar el servo
#include <Servo.h>
// Declaramos la variable para controlar el servo
Servo servoMotor;
void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);
// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotor.attach(9);
// Inicializamos al ángulo 0 el servomotor
servoMotor.write(0);
}
void loop() {
// Vamos a tener dos bucles uno para mover en sentido positivo y otro en sentido negativo
// Para el sentido positivo
for (int i = 0; i <= 180; i++)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
// Para el sentido negativo
for (int i = 179; i > 0; i--)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
}
Pero cuando junto ambos, no se donde tengo el error, he copiado todo el codigo del servo dentro del codigo inicial el void setup dentro del otro y el loop ,pero me da error.
#include <NewPing.h>
#include <AFMotor.h>
#define TRIGGER_PIN 31 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 33 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance
AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);
int Vel = 200 ; // Define la velocidad base del Rover
// Incluímos la librería para poder controlar el servo
#include <Servo.h>
// Declaramos la variable para controlar el servo
Servo servoMotor;
void setup()
{
Serial.begin(9600);
pinMode(35, OUTPUT) ; // Usaremos el pin 35 como VCC de 5V
digitalWrite(35, HIGH) ;
delay(5000); // Por si acaso
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);
// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotor.attach(9);
// Inicializamos al ángulo 0 el servomotor
servoMotor.write(0);
}
void loop()
{
//con las dos siguientes instrucciones vamos a medir la distancia ante el objeto más cercano
//como está dentro del loop, esta medición se va a realizar mientras el coche se esté ejecuentando, es decir, continuamente
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS)
//el resultado del pulso se guarda en la variable "dist"
int dist = uS / US_ROUNDTRIP_CM ;
Serial.println(dist) ;
// si la distancia es mayor a 35cm avanzamos
if (dist > 35 or dist==0 )
{
Avance() ;
}
// si la distancia es menor a 15 cm hacemos primero un retroceso, pausa de medio segundo, y hacemos un giro a la izquierda
else if ( dist < 15 or dist == 1)
{
Retroceso() ;
delay(500);
giroSobresi_izquierda() ;
delay(500);
}
//en cualquier otro caso, que será que el valor esté entre 15 y 30 haremos un giro a la izquierda
else
{
giroSobresi_derecha() ;
delay (400);
}
delay(250);
}
void SetVel(int v1, int v2, int v3, int v4)
{
Motor1.setSpeed(v1);
Motor2.setSpeed(v2);
Motor3.setSpeed(v3);
Motor4.setSpeed(v4);
}
void Avance()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void Retroceso()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(BACKWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void Paro()
{ Motor1.run(RELEASE);
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
}
void giroIzquierda()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(FORWARD) ;
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(FORWARD);
}
void giroDerecha()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(RELEASE) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(RELEASE);
}
void giroSobresi_derecha()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(FORWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(FORWARD);
}
void giroSobresi_izquierda()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(BACKWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(BACKWARD);
}
// Vamos a tener dos bucles uno para mover en sentido positivo y otro en sentido negativo
// Para el sentido positivo
for (int i = 0; i <= 180; i++)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
// Para el sentido negativo
for (int i = 179; i > 0; i--)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
No se donde cometo el fallo, me compila todo bien hasta que pego el codigo del servo en el loop.
Muchas Gracias