int motB0 = 2; int motB1 = 3; //PWM int motA1 = 4; int motA0 = 5; //PWM int sensorleft = 12; int sensorcenter = 11; int sensorright = 10; int l1 = 1; int l2 = 1; int l3 = 1; int f1 = 0; int f2 = 0; int f3 = 0; int f4 = 0; int f5 = 0; int f6 = 0; long cont1 = 0; int buzzer = 6; //El pin al que se conecta el buzzer es el 6 int echo = 8; int triger = 7; char valorBoton; char penultimo = 'n'; char antepenultimo = 'm'; char vali = 'b'; int vel = 255; void setup() { Serial.begin(9600); pinMode(motA0, OUTPUT); pinMode(motA1, OUTPUT); pinMode(motB0, OUTPUT); pinMode(motB1, OUTPUT); pinMode(buzzer, OUTPUT); // Pin 6 declarado como salida pinMode(echo, INPUT); pinMode(triger, OUTPUT); digitalWrite(triger, LOW); digitalWrite(motA0, LOW); digitalWrite(motA1, LOW); digitalWrite(motB0, LOW); digitalWrite(motB1, LOW); pinMode(sensorleft, INPUT); pinMode(sensorcenter, INPUT); pinMode(sensorright, INPUT); } void loop() { if(Serial.available() > 0) { valorBoton = Serial.read(); //Penultimo = n neutral antepenultimo = m neutral //Donde se quiera una izquierda se debe poner derecha y al reves //3 señales o 3 botones al mismo tiempo if((antepenultimo == 'w' && penultimo == 'd' && valorBoton == 'h') || (antepenultimo == 'w' && penultimo == 'a' && valorBoton == 'f'))//wdh o waf { vali = 'i'; adelante(); penultimo = 'n'; antepenultimo = 'm'; } else if((antepenultimo == 's' && penultimo == 'd' && valorBoton == 'h') || (antepenultimo == 's' && penultimo == 'a' && valorBoton == 'f'))//sdh o saf { vali = 'k'; atras(); penultimo = 'n'; antepenultimo = 'm'; } else if((antepenultimo == 'a' && penultimo == 'w' && valorBoton == 't') || (antepenultimo == 'a' && penultimo == 's' && valorBoton == 'g'))//awt o asg { vali = 'j'; derecha(); penultimo = 'n'; antepenultimo = 'm'; } else if((antepenultimo == 'd' && penultimo == 'w' && valorBoton == 't') || (antepenultimo == 'd' && penultimo == 's' && valorBoton == 'g'))//dwt o dsg { vali = 'l'; izquierda(); penultimo = 'n'; antepenultimo = 'm'; } else if(vali == 'i')//Validacion no se suelta adelante { adelante(); if(valorBoton == 't') { vali = 'b'; alto(); } else if(valorBoton == 'd') { //d izquierda(); } else if(valorBoton == 'a') { //a derecha(); } } else if(vali == 'k')//Validacion no se suelta atras { atras(); if(valorBoton == 'g') { vali = 'b'; alto(); } else if(valorBoton == 'd') { //d atrasderecha(); } else if(valorBoton == 'a') { //a atrasizquierda(); } } else if(vali == 'j')//Validacion no se suelta izquierda { derecha(); if(valorBoton == 'f') { vali = 'b'; alto(); } else if(valorBoton == 'w') { //w derecha(); } else if(valorBoton == 'a') { //s atrasderecha(); } } else if(vali == 'l')//Validacion no se suelta derecha { izquierda(); if(valorBoton == 'h') { vali = 'b'; alto(); } else if(valorBoton == 'w') { //w izquierda(); } else if(valorBoton == 'a') { //s atrasizquierda(); } } //Combinaciones de dos botones: else if(valorBoton == 'w') { //w adelante(); } else if(valorBoton == 's') { //s atras(); } else if(penultimo != 's' && valorBoton == 'a') { //a derecha(); } else if(penultimo != 's' && valorBoton == 'd') { //d izquierda(); } else if(penultimo == 'w' && valorBoton == 'a') { //wa derecha(); } else if(penultimo == 'w' && valorBoton == 'd') { //wd izquierda(); } else if(penultimo == 'w' && valorBoton == 'f') { //wf adelante(); } else if(penultimo == 'w' && valorBoton == 'h') { //wh adelante(); } else if(penultimo == 't' && valorBoton == 'a') { //ta derecha(); } else if(penultimo == 't' && valorBoton == 'd') { //td izquierda(); } else if(penultimo == 's' && valorBoton == 'a') { //sa atrasizquierda(); } else if(penultimo == 's' && valorBoton == 'd') { //sd atrasderecha(); } else if(penultimo == 's' && valorBoton == 'f') { //sf atras(); } else if(penultimo == 's' && valorBoton == 'h') { //sh atras(); } else if(penultimo == 'g' && valorBoton == 'a') { //ga atrasderecha(); } else if(penultimo == 'g' && valorBoton == 'd') { //gd atrasizquierda(); } //Espejo else if(penultimo == 'a' && valorBoton == 'w') { //aw derecha(); } else if(penultimo == 'd' && valorBoton == 'w') { //dw izquierda(); } else if(penultimo == 'f' && valorBoton == 'w') { //fw adelante(); } else if(penultimo == 'h' && valorBoton == 'w') { //hw adelante(); } else if(penultimo == 'a' && valorBoton == 't') { //at derecha(); } else if(penultimo == 'd' && valorBoton == 't') { //dt izquierda(); } else if(penultimo == 'a' && valorBoton == 's') { //as atrasderecha(); } else if(penultimo == 'd' && valorBoton == 's') { //ds atrasizquierda(); } else if(penultimo == 'f' && valorBoton == 's') { //fs atras(); } else if(penultimo == 'h' && valorBoton == 's') { //hs atras(); } else if(penultimo == 'a' && valorBoton == 'g') { //ag atrasderecha(); } else if(penultimo == 'd' && valorBoton == 'g') { //dg atrasizquierda(); } else { //Si se presionan más de dos botones o no se presionan los adecuados alto(); penultimo = 'n'; antepenultimo = 'm'; } //Actualizar la penultimo Serial.print(antepenultimo); Serial.print(" "); Serial.print(penultimo); Serial.print(" "); Serial.print(valorBoton); Serial.print(" "); Serial.print(vali); Serial.println(" "); antepenultimo = penultimo; penultimo = valorBoton; /*if(valorBoton != penultimo) { penultimo = valorBoton;*/ } } long distancia() { long t; long d; digitalWrite(triger, HIGH); delayMicroseconds(10); digitalWrite(triger, LOW); t = pulseIn(echo, HIGH); d = t / 59; if (d <= 1 || d >= 25) { d = 1000; } delay(10); return d; } void alto() { digitalWrite(motA0, 0); analogWrite(motA1, 0);//PWM analogWrite(motB0,0); //PWM digitalWrite(motB1, 0); } void atras() { digitalWrite(motA0, 0); digitalWrite(motA1, 1);//PWM digitalWrite(motB0, 0); //PWM digitalWrite(motB1, 1); } void adelante() { digitalWrite(motA0, 1); analogWrite(motA1, 255-vel); //PWM analogWrite(motB0, vel); //PWM digitalWrite(motB1, 0); } void adelanter() { digitalWrite(motA0, 1); digitalWrite(motA1, 0); //PWM digitalWrite(motB0, 1); //PWM digitalWrite(motB1, 0); } void derecha() { digitalWrite(motA0, vel); analogWrite(motA1, 255-vel); //PWM analogWrite(motB0, 0); //PWM digitalWrite(motB1, 0); } void atrasderecha() { digitalWrite(motA0, 0); digitalWrite(motA1, 0); //PWM analogWrite(motB0, 255-vel); //PWM digitalWrite(motB1, 1); } void izquierda() { digitalWrite(motA0, 0); analogWrite(motA1, 0); //PWM analogWrite(motB0, vel); //PWM digitalWrite(motB1, 0); } void atrasizquierda() { digitalWrite(motA0, 0); analogWrite(motA1, vel); //PWM analogWrite(motB0, 0); //PWM digitalWrite(motB1, 0); }