Vehiculo controlado por Arduino

Buenas, necesito ayuda con el codigo de un vehiculo que tengo que hacer para un proyecto.

En el proyecto tengo que usar los siguientes materiales:

  • Un Arduino
  • Tres pulsadores (SW1, SW2, SW3)
  • Un servo motor para controlar la dirección (SM1)
  • Un motor de CC para mover el vehículo (SM2)
  • Dos leds amarillos que iluminan hacia adelante (LD1 y LD2)
  • Dos leds rojos que iluminan hacia atrás (LT1 y LT2)
  • Una bateria de 9 volt con su correspondiente conector

Lo que tengo que hacer es un programa para que cuando accione el SW1, el vehiculo avance por 5 segundos hacia delante. Acciono el SW2, y el vehiculo retrocede por 3 segundos. Acciono el SW3 y el vehiculo dobla hacia la derecha y avanza por 4 segundos. Ademas, cuando retrocede que se enciendan los leds rojos, y cuando avanza los leds amarillos.

Estas funciones deben estar en el mismo programa. Si alguno me ayuda con esto, desde ya muchas gracias.

Desde luego que te ayudamos pero primero postea tu código sino no hay forma.

Saludos

gatul:
Desde luego que te ayudamos pero primero postea tu código sino no hay forma.

Saludos

Pasa que ese es el tema, no se como empezar con el codigo. Tengo uno anterior que hicimos pero era con mas motores y con bluetooth. Te lo paso igual para que veas

#include <SoftwareSerial.h>
#include <Servo.h>

int bluetoothTx = 2;
int bluetoothRx = 3;

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

int Motor1A = 5;
int Motor1B = 6;

// MOTOR 2.

int Motor2A = 9;
int Motor2B = 10;

void setup (){
bluetooth.begin(115200);
bluetooth.print("$$");
delay(100);
bluetooth.println("U,9600,N");
bluetooth.begin(9600);

pinMode( Motor1A, OUTPUT );
pinMode( Motor2A, OUTPUT );
pinMode( Motor1B, OUTPUT );
pinMode( Motor2B, OUTPUT );

digitalWrite( Motor1A, LOW );
digitalWrite( Motor2A, LOW );
digitalWrite( Motor1B, LOW );
digitalWrite( Motor2B, LOW );
}

int flag1 = -1;
int flag2 = -1;

void loop(){
  
if(bluetooth.available()){
char toSend = (char)bluetooth.read();
if(toSend == 'S'){
 
flag1 = 0;
flag2 = 0;

digitalWrite( Motor1A, LOW);
analogWrite( Motor1B, LOW);

digitalWrite( Motor2A, LOW),
analogWrite( Motor2B, LOW);

}
if( toSend == 'F' || toSend == 'G' || toSend == 'I'){
  if (flag1 != 1){
    flag1 = 1;
    digitalWrite( Motor1A, HIGH);
    analogWrite( Motor1B, 0 );
    digitalWrite( Motor2A, HIGH);
    analogWrite( Motor2B, 0 );
}
}
if(toSend == 'B' || toSend == 'H' || toSend == 'J'){
  if(flag1 != 2){
    flag1 = 2;
    digitalWrite( Motor1B, HIGH);
    analogWrite( Motor1A, 0 );
    digitalWrite( Motor2B, HIGH);
    analogWrite( Motor2A, 0 );
}
}
if(toSend == 'L' || toSend == 'G' || toSend == 'H'){
  if(flag2 != 1){
    flag2 = 1;
    digitalWrite( Motor2B, HIGH);
    analogWrite( Motor2A, 0 );
    digitalWrite( Motor1A, HIGH);
    analogWrite( Motor1B, 0 );
}
}
if(toSend == 'R' || toSend == 'I' || toSend == 'J'){
  if(flag2 != 2){
    flag2 = 2;
    digitalWrite( Motor1B, HIGH);
    analogWrite( Motor1A, 0 );
    digitalWrite( Motor2A, HIGH);
    analogWrite( Motor2B, 0 );
}
}
else{
  if(flag2 != 3){
    flag2 = 3;
    digitalWrite ( Motor2A, LOW);
    analogWrite ( Motor2B, LOW);  
    digitalWrite ( Motor2B, LOW);
    analogWrite ( Motor2A, LOW);  
}
}
}
}

Moderador:
Por favor no repitas lo que otra persona te dice. Ya se lee en el post#1 y tu vuelves a poner lo mismo, lo cual está claramente de más.
Solo menciona a la persona por su nick y nada mas.
Usa quote (que es lo que eso cita para resaltar un párrafo, no todos y cada uno de los textos respondidos que corresponden a ese post.
Item 14 de las normas del foro, último párrafo, si quieres leer al respecto.
Gracias.

Evidentemente tienes una tarea escolar o algo similar.

En el proyecto tengo que usar los siguientes materiales:

  • Un Arduino
  • Tres pulsadores (SW1, SW2, SW3)
  • Un servo motor para controlar la dirección (SM1)
  • Un motor de CC para mover el vehículo (SM2)
  • Dos leds amarillos que iluminan hacia adelante (LD1 y LD2)
  • Dos leds rojos que iluminan hacia atrás (LT1 y LT2)
  • Una bateria de 9 volt con su correspondiente conector

Y has encontrado un código que se aproxima.
No veo que tiene que ver en ese código el uso de Bluetooth. Es algo que con facilidad podrias quitar.

Olvida lo que tienes y comienza por cosas mas simples.
Como conecto los pulsadores SW1 a 3. Como los detecto. Como acciono los LEDs. son cosas básicas de cualquier tutorial de Arduino y de los ejemplos básicos que viene en el IDE.

Asi que tienen al menos el 80% del trabajo casi hecho.
Además en el ejemplo ya sabes como mover el motor. Asi que completas el otro 10%.
Te queda un 10% de unir todo.

surbyte:
Moderador:
Por favor no repitas lo que otra persona te dice. Ya se lee en el post#1 y tu vuelves a poner lo mismo, lo cual está claramente de más.
Solo menciona a la persona por su nick y nada mas.
Usa quote (que es lo que eso cita para resaltar un párrafo, no todos y cada uno de los textos respondidos que corresponden a ese post.
Item 14 de las normas del foro, último párrafo, si quieres leer al respecto.
Gracias.

Disculpa por esto.

En cuanto a lo otro, si es un proyecto escolar. Sabemos conectar los pulsadores, detectarlos, accionar los leds, los motores, pero siempre se nos complica unir todo en el mismo codigo. Necesitariamos ayuda con el codigo en si.

Subí el código que detecta los botones, el que acciona los led, el de los motores y los ayudamos a unirlos, que es lo que se les complica.

@dudade, eso es que has hecho es lo correcto, tomás un parrafo y respondes. Asi no hay objeción alguna.

Bien, sigamos.

Como te dice @gatul y ya te he sugerido. Trabaja con los pulsadores o botones primero y los leds. No abarques todo porque eso te supera en este momento.

A ver que pueden hacer tu y tus compañeros con esa parte.

Vamos que no hay problema en ayudarlos.

@surbyte @gatul Miren, uno de los puntos del proyecto el que el vehiculo avance por 5 segundos cuando se presiona el SW1. Hicimos este codigo sencillo.

#include <Servo.h>
Servo servo;

int SW1 = 7;
int SW1State = 0;
int LD1 = 5;
int LD2 = 6;

void setup(){
  servo.attach(8);
  pinMode(SW1, INPUT);
  pinMode(LD1, OUTPUT);
  pinMode(LD2, OUTPUT);
}

void loop(){
  SW1State = digitalRead(SW1);
  if (SW1State == HIGH){
    servo.write(HIGH);
    digitalWrite(LD1, HIGH);
    digitalWrite(LD2, HIGH);
    delay(5000);
    
  }
}

Creemos que esta bien. Ahora, no sabemos como hacer que vaya para atras.

Desde ya que

servo.write(HIGH);

no tiene lógica.

servo.write(posicion);

es justamente para decirle al servo donde moverse.

Mira este tutorial de servo de Luis Llamas