#include Servo direccion; struct Motor { byte velocidad; bool sentido; byte pinA; byte pinR; }; Motor motor1 = {0, true, 3, 5}; // Motor motor2 = {0, false, 6, 9}; int giro= 90; //Centra servo dirección //bool sentido = true; //hacia delante byte dato = 9; // int velocidad = 0; //comienza parado byte pinAtras = 13; //led integrado placa void motor(Motor motor) { if(motor.sentido){ //sentito true va hacia delante analogWrite(motor.pinA, motor.velocidad); analogWrite(motor.pinR, 0); digitalWrite(pinAtras, LOW); } else { analogWrite(motor.pinA, 0); analogWrite(motor.pinR, motor.velocidad); digitalWrite(pinAtras, HIGH); } } void setup() { Serial.begin(9600); motor1 = (Motor){0, true, 3, 5}; //velocidad, sentido, pines direccion.attach(10); direccion.write(giro); pinMode(motor1.pinA, OUTPUT); pinMode(motor1.pinR, OUTPUT); pinMode(pinAtras, OUTPUT); } void loop() { if (Serial.available() > 0) { //lee byte dato dato = Serial.read(); } if (dato == 1) { //arranca motor1.velocidad = 100; //arranca algo motor1.sentido=true; //adelante } else { if (dato == 2) { //para y pone marcha adelante motor1.velocidad = 0; //es necesario recibir una velocidad motor1.sentido=true; //para arrancar de nuevo } else { if (dato == 6) { //cambia sentido y para // motor1.sentido = false; motor1.sentido = !(motor1.sentido); //es necesario recibir una velocidad motor1.velocidad = 0; //para arrancar de nuevo // delay(100); } else { if(dato > 9 && dato < 171) { //giro min y max giro=dato; } else { if(dato > 180 && dato < 255) { //velocidad motor1.velocidad = byte ((float(dato) - 181.)* 3.4459); //paso } //a velocidad de 0 a 251 } } } } dato = 9; motor(motor1); direccion.write(giro); // direccion.write(180-giro); }