/* Segun el dato enviado distinta accion Se cambia angulo de giro a uno menor Se agrega funcion de manejo motor principal con modulo L298 Se ajustan los tiempos para mejorar desempeño */ #include // incluye libreria de Servo Servo servo1; // crea objeto int PINSERVO = 2; // pin 2 conectado a señal del servo int PULSOMIN = 750; // pulso minimo en microsegundos int PULSOMAX = 2750; // pulso maximo en microsegundos int num; // variable para almacenar valor leido int ANGULO; // valor de angulo a cargar en el servo int IN1 = 4; int IN2 = 3; int ENA = 11; //PIN PWM para variar velocidad del motor ENA int trespservo =200;// tiempo de detencion en posicion del servo int tmotadel = 200; //tiempo de espera reaccion motor principal adelante int veloc = 0; // nivel de velocidad de motor principal (3 niveles) void setup() { pinMode(IN1,OUTPUT);//Salida para IN1 del modulo pinMode(IN2,OUTPUT);//Salida para IN2 del modulo Serial.begin(9600); servo1.attach(PINSERVO, PULSOMIN, PULSOMAX); // inicializacion de servo // las entradas analogicas no requieren inicializacion } void loop() { if(Serial.available()>=1) { //Delay para favorecer la lectura de caracteres delay(22);// Cambiar para simulacion Proteus 400 -Original 22 //Se crea una variable que servirá como buffer String bufferString = ""; /* * Se le indica a Arduino que mientras haya datos * disponibles para ser leídos en el puerto serie * se mantenga concatenando los caracteres en la * variable bufferString */ while (Serial.available()>0) { bufferString += (char)Serial.read(); } num = bufferString.toInt(); //Se carga lo leido en la variable entrada //Serial.println(num); analisisnum(); }// de Serial Available } //-----------Funcion girar servo------------------- void girarservo() { servo1.write(ANGULO); // envia al servo el valor del angulo delay(20); // demora para que el servo llegue a posicion } //------------------Funcion analisisnum-------------------- void analisisnum() { //Serial.println(veloc); if (num==700)//servo centro { ANGULO =90; girarservo(); delay(trespservo); } if (num==750) //Servo derecha { ANGULO =60; girarservo(); delay(trespservo); } if (num==800) //Servo izquierda { ANGULO =120; girarservo(); delay(trespservo); } //---------------------Adelante-------------------------------- if (num==100) //Adelante { digitalWrite(IN1,HIGH); //IN1 digitalWrite(IN2,LOW); //IN2 if(veloc == 0) { analogWrite(ENA,200); //veloc = veloc +1; delay(tmotadel); } if(veloc == 1) { analogWrite(ENA,230); //veloc = veloc +1; delay(tmotadel); } if(veloc == 2) { analogWrite(ENA,255); //veloc = 0; delay(tmotadel); } veloc = veloc +1; delay(tmotadel); } //-----------------Fin adelante------------------------------ if (num==200) //Atras { // num =666; //valor neutro digitalWrite(IN1,LOW); //IN1 digitalWrite(IN2,HIGH); //IN2 if(veloc == 0) { analogWrite(ENA,200); //veloc = veloc +1; delay(tmotadel); } if(veloc == 1) { analogWrite(ENA,230); //veloc = veloc +1; delay(tmotadel); } if(veloc == 2) { analogWrite(ENA,255); // veloc = 0; delay(tmotadel); } veloc = veloc +1; delay(tmotadel); } //-----------------Fin atras---------------------------- //----------------Freno--------------------------------- if (num==300) //FRENO { num =666; //valor neutro freno(); } //----------------FIN Freno--------------------------------- }//llave fina de funcion analisisnum--- //Fin funcion analisisnum--------------------------- //--------------------Funcion Freno----------------- void freno() { analogWrite(ENA,0); digitalWrite(IN1,LOW); //IN1 digitalWrite(IN2,LOW); //IN2 veloc = 0; delay(tmotadel); } //--------------------fin Funcion Freno-----------------