#include <Servo.
h>
/**
* Elextro-Tex
* Arduino Car - Codigo de ejemplo
* Control Serial
*/
// Declaramos los pines a usar
int PIN_SERVO_A = 2;
int PIN_SERVO_B = 3;
//Pin para llanta de la izquierda
int PIN_IN1 = 7;
int PIN_IN2 = 6;
//Pin para llanta de la derecha
int PIN_IN3 = 8;
int PIN_IN4 = 9;
//Pin para el led/foco
int PIN_LED = 5;
//Pin HC-SR04
int PIN_ECHO = 10;
int PIN_TRIG = 11;
//Declaramos los servos
Servo servoA;
Servo servoB;
void setup() {
// inicializar la comunicación serial a 9600 bits por segundo
[Link](9600);
[Link](5);
// Configuramos los pines como salida
pinMode(PIN_IN1, OUTPUT);
pinMode(PIN_IN2, OUTPUT);
pinMode(PIN_IN3, OUTPUT);
pinMode(PIN_IN4, OUTPUT);
// Configuramos los servos
[Link](PIN_SERVO_A);
[Link](PIN_SERVO_B);
// Configuramos el led
pinMode(PIN_LED, OUTPUT);
// Configuramos sensor de distancia
pinMode(PIN_TRIG, OUTPUT); // Sets the trigPin as an Output
pinMode(PIN_ECHO, INPUT);
void loop() {
char codigo;
String valor = "";
while ([Link]() > 0) { // Preguntamos si existe datos leidos por serial
String linea = [Link]();
for(int i = 0 ;i < [Link](); i++){
int caracter = linea[i];
if (isDigit(caracter)) { // Preguntamos si es digito
valor += (char)caracter; // Guardamos el valor leido
}else if (caracter != '\n') { // Preguntamos si es distinto a salto de linea
codigo = caracter; // Guardamos el codigo leido
}else{
break;
}
}
}
switch(codigo){
case 'A': avanzar(); break;
case 'I': izquierda(); break;
case 'R': retroceder();break;
case 'D': derecha(); break;
case 'P': parar(); break;
case 'T': encenderLed();break;
case 't': apagarLed(); break;
case 'M':
if(valor!=""){
girarServoA([Link]());
}
break;
case 'N':
if(valor!=""){
girarServoB([Link]());
}
break;
}
[Link]("D");
[Link](medirDistancia());
delay(10);
}
long medirDistancia(){
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(5);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
long duration = pulseIn(PIN_ECHO, HIGH);
return microsecondsToCentimeters(duration);
}
long microsecondsToCentimeters (long microseconds) {
return microseconds / 29 / 2;
}
void encenderLed(){
digitalWrite(PIN_LED, HIGH);
}
void apagarLed(){
digitalWrite(PIN_LED, LOW);
}
void girarServoA(int grados){
[Link](grados);
}
void girarServoB(int grados){
[Link](grados);
}
void avanzar(){
//Avanza llantas de la izquierda
digitalWrite (PIN_IN1, HIGH);
digitalWrite (PIN_IN2, LOW);
//Avanza llantas de la derecha
digitalWrite (PIN_IN3, HIGH);
digitalWrite (PIN_IN4, LOW);
}
void retroceder(){
//Retrocede llantas de la izquierda
digitalWrite (PIN_IN1, LOW);
digitalWrite (PIN_IN2, HIGH);
//Retrocede llantas de la derecha
digitalWrite (PIN_IN3, LOW);
digitalWrite (PIN_IN4, HIGH);
}
void parar(){
//Para llanas de la izquierda
digitalWrite (PIN_IN1, LOW);
digitalWrite (PIN_IN2, LOW);
//Para llanas de la derecha
digitalWrite (PIN_IN3, LOW);
digitalWrite (PIN_IN4, LOW);
}
void izquierda(){
//Rertocede llantas de la izquierda
digitalWrite (PIN_IN1, LOW);
digitalWrite (PIN_IN2, HIGH);
//Avanza llantas de la derecha
digitalWrite (PIN_IN3, HIGH);
digitalWrite (PIN_IN4, LOW);
}
void derecha(){
//Retrocede llantas de la derecha
digitalWrite (PIN_IN3, LOW);
digitalWrite (PIN_IN4, HIGH);
//Avanza llantas de la izquierda
digitalWrite (PIN_IN1, HIGH);
digitalWrite (PIN_IN2, LOW);
}