/* Historial de cambios- ETAPA 6 - Primer nivel aceptable 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 Se suma funcion LUCES y BOCINA Se prueba en placa Arduino NANO Se corrige direcciones de servo (se invierten) Se elimina la velocidad mas baja Se restaura velocidad mas baja mediante un pulso inicial */ #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) int luces = 0; // Estado inicial de luces 0 apagadas 1 encendidas int bocina = 0; //Estado inicial de bocina 0 apagado 1 encendidas void setup() { pinMode(IN1,OUTPUT);//Salida para IN1 del modulo pinMode(IN2,OUTPUT);//Salida para IN2 del modulo pinMode(12, OUTPUT);// PIN BOCINA pinMode(10, OUTPUT);// PIN LUCES digitalWrite(12,HIGH);//Fija salida a alto digitalWrite(10,HIGH);//Fija salida a alto 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==800) //Servo derecha- Giro camion a la izquierda { ANGULO =60; girarservo(); delay(trespservo); } if (num==750) //Servo izquierda - Giro camion a la derecha { ANGULO =120; girarservo(); delay(trespservo); } //---------------------Adelante-------------------------------- if (num==100) //Adelante { digitalWrite(IN1,HIGH); //IN1 digitalWrite(IN2,LOW); //IN2 if(veloc == 0) { analogWrite(ENA,255); delay(tmotadel); delay(tmotadel); analogWrite(ENA,200); delay(tmotadel); } if(veloc == 1) { analogWrite(ENA,230); delay(tmotadel); } if(veloc == 2) { analogWrite(ENA,255); 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,255); delay(tmotadel); delay(tmotadel); analogWrite(ENA,200); delay(tmotadel); } if(veloc == 1) { analogWrite(ENA,230); delay(tmotadel); } if(veloc == 2) { analogWrite(ENA,255); delay(tmotadel); } veloc = veloc +1; delay(tmotadel); } //-----------------Fin atras---------------------------- //----------------Freno--------------------------------- if (num==300) //FRENO { num =666; //valor neutro freno(); } //----------------FIN Freno--------------------------------- //----------------LUCES--------------------------------- if (num==400) // encendido de luces { if(luces == 0) { digitalWrite(10,LOW);//RELE LUCES encendidas luces = 1; //Indica que luces estan encendidas } else { digitalWrite(10,HIGH);//RELE LUCES apagado luces = 0; //Indica que luces estan encendidas } } //----------------FIN LUCES------------------------------- //----------------BOCINA--------------------------------- if (num==500) // encendido de bocina { if(bocina == 0) { digitalWrite(12,LOW);//RELE bocina encendida bocina = 1; //Indica que bocina esta encendida } else { digitalWrite(12,HIGH);//RELE bocina apagado bocina = 0; //Indica que bocina esta encendida } } //----------------FIN BOCINA------------------------------- }//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-----------------