sábado, 20 de agosto de 2016

CODIGO EJEMPLO PARA VALIDACION DE BIFURCACION EN ROBOT LABERINTO

Cordial Saludo,




Apreciados estudiantes, expongo código para lo mencionado en la Asignatura Microcontroladores II.





Tener en cuenta los comentarios allí expuestos:








/*
Seguidor de Linea con sesores QTR-8RC o digitales
      0= NEGRO
      1= BLANCO
      IMPORTANTE LEER LINEAS 52 Y 61
*/
#include <QTRSensors.h>
#define NUM_SENSORS   6     // Numero de Sensores a Usar
#define TIMEOUT       2000
#define EMITTER_PIN   38    // Pin de LEDON
#define HIST  300          // Valor de fluctuacion de sensores
QTRSensorsRC qtrrc((unsigned char[]) {2,3,4,5,6,7}, //Pines donde van conectados los sensores
 NUM_SENSORS, TIMEOUT, EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];

unsigned int sensores = 0;
unsigned int estado1=0;
unsigned int estado2=0;

void setup(){
  Serial.begin(9600);
  delay(2000);
}
void loop(){
  leersensores();
  //Determinar dependiendo de las posibilidades
  switch (sensores) {
    case B110011:    //adelante
      adelante();
      break;
    case B100111:    //izquierda
    case B001111:
    case B110111:
    case B101111:
    case B011111:
      izquierda();
      break;
    case B111001:    //derecha
    case B111100:
    case B111011:
    case B111101:
    case B111110:
      derecha();
      break;
    case B000111:    //llego a bifurcacion que usted programa Aca delimita el codigo para el antes
    case B000011:
      bifurcacion();
      imprime();
      break;
  }
}
void imprime(){
  Serial.println("La medicion para la viburcacion (aqui describen en tipo) es:");
  Serial.print("Antes:    ");
  Serial.println(estado1,BIN);
  Serial.print("Despues:  ");
  Serial.println(estado2,BIN);
}
void bifurcacion(){
  estado1 = sensores;
  adelante();
  delay(100);
  leersensores();
  estado2 = sensores;
  parar();
}
void parar(){
  analogWrite(5,0);
  analogWrite(3,0);
  analogWrite(9,0);
  analogWrite(6,0);
}
void adelante(){
  analogWrite(5,0);
  analogWrite(3,200);
  analogWrite(9,0);
  analogWrite(6,200);
}
void izquierda(){
  analogWrite(9,0);
  analogWrite(6,200);
  analogWrite(5,0);
  analogWrite(3,50);
}
void derecha(){
  analogWrite(9,0);
  analogWrite(6,50);
  analogWrite(5,0);
  analogWrite(3,200);
}
void leersensores(){    //Determinar dependiendo de cuantos sensores utiliza
  qtrrc.read(sensorValues);
  sensores = 0;
  for (int i=0;i<=7;i++){
    if (sensorValues[i]<HIST)
      bitClear(sensores,i);
    else
      bitSet(sensores,i);
  }
    //Serial.println(sensores,BIN);
}