El circuito (realizado con Fritzing):
Utiliza la libreria TocaMelodia, pero puede eliminarse fácilmente comentado las lineas correspondientes.
/* * Este programa lee dos sensores de seguimiento (tracking sensor) * e indica la ruta a seguir * * 2014 - Guimi (http://guimi.net) */ #include <TocaMelodia.h> // VARIABLES //---------- const byte sensorIzq=3; // Constante que indica el pin del sensor Izquierdo const byte sensorDer=2; // Constante que indica el pin del sensor Derecho const byte altavoz=4; // Constante que indica el pin del altavoz byte valorIzq=0; // Variable para guardar el valor del sensor Izquierdo [0 Negro; 1 Blanco] byte valorDer=0; // Variable para guardar el valor del sensor Derecho [0 Negro; 1 Blanco] byte estado=0; // 0 en marcha; 1 finalizado byte direccion=0; // Variable que indica la direccion a seguir // 0 - Quieto // 1 - Izquierda // 2 - Delante // 3 - Derecha // 9 - Final TocaMelodia tocaMelodia(altavoz); // FUNCION SETUP //-------------- void setup(){ // Definimos cada pin como entrada o salida pinMode(sensorIzq,INPUT); pinMode(sensorDer,INPUT); // Preparamos la comunicacion mediante el puerto serie Serial.begin(9600); tocaMelodia.toca(MELODIA_FANFARRIA); } // FUNCION LOOP //------------- void loop(){ // Mientras el estado sea funcionando while (estado = 0) { // Leemos el valor de los sensores [0-1] valorIzq=digitalRead(sensorIzq); valorDer=digitalRead(sensorDer); // Mostramos informacion Serial.print("Izquierda:"); Serial.print(valorIzq); Serial.print("; Derecha:"); Serial.print(valorDer); // Establecemos direccion en base a las lecturas if (valorIzq && valorDer) { movimiento(2); } // Delante else if (valorIzq && !valorDer) { movimiento(3); } // Derecha else if (!valorIzq && valorDer) { movimiento(1); } // Izquierda else {movimiento(0);} // Quieto // Esperamos un tiempo de reaccion para los componentes delay(50); } //while(1); // Bucle infinito para parar el programa } void movimiento(byte direccion) { Serial.print("; Direccion:"); switch(direccion){ case 0: Serial.println("Quieto"); tocaMelodia.toca(MELODIA_PODER_PERRUNO); delay(2000); estado=1; break; case 1: Serial.println("Izquierda"); break; case 2: Serial.println("Delante"); break; case 3: Serial.println("Derecha"); break; } }