ROBOT SIGUE LINEAS CON SENSOR DIGITAL 5 CANALES

 









CODIGO

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1   //   QT-PY / XIAO
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define Sensor1 A6
#define Sensor2 A3
#define Sensor3 A2
#define Sensor4 A1
#define Sensor5 A0

#define STBY 3  
#define AIN1 8  
#define AIN2 9
#define PWMB 6
#define PWMA 5
#define BIN1 4
#define BIN2 7
#define LED 13    
#define PINBOTON 2
#define PINBUZZER 10
#define POTENCIOMETRO A7

int S1;
int S2;
int S3;
int S4;
int S5;
int valpot;

int potH = 100; //Potencia 1 de motores
int potL = 50;

void setup() {
 Serial.begin(9600);

display.begin(i2c_Address, true); // Address 0x3C default
  display.display();
  delay(2000);
  display.clearDisplay(); // Clear the buffer.
  display.setTextSize(2);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(20, 20);
  display.println("SIRACUSA");
  display.setCursor(30, 40);
  display.println("Listo");
  display.display();
  delay(2000);
  display.clearDisplay();

 pinMode(Sensor1, INPUT);
 pinMode(Sensor2, INPUT);
 pinMode(Sensor3, INPUT);
 pinMode(Sensor4, INPUT);
 pinMode(Sensor5, INPUT);
 pinMode(LED   ,OUTPUT);
 pinMode(BIN2  ,OUTPUT);
 pinMode(STBY  ,OUTPUT);
 pinMode(BIN1  ,OUTPUT);
 pinMode(PWMB  ,OUTPUT);
 pinMode(AIN1  ,OUTPUT);
 pinMode(AIN2  ,OUTPUT);
 pinMode(PWMA  ,OUTPUT);
 pinMode(POTENCIOMETRO, INPUT);
 digitalWrite(STBY, HIGH);
 
}

void loop() {

 S1 = analogRead(Sensor1);
 S2 = digitalRead(Sensor2);
 S3 = digitalRead(Sensor3);
 S4 = digitalRead(Sensor4);
 S5 = digitalRead(Sensor5);
 valpot = analogRead(POTENCIOMETRO);
 
 if(S1 <= 20){
  Serial.println("GIRO A LA IZQUIERDA");
  IZQUIERDA();
 }
 if((S2 == 0)&&(S3 == 1)){ //SI S2 TOCA LINEA NEGRA Y S3 NO
  Serial.println("GIRO A LA IZQUIERDA");
  IZQUIERDA();
 }
 if((S2 == 0)&&(S3 == 0)){ //SI S2 TOCA LINEA NEGRA Y S3 SI
  Serial.println("GIRO LEVE A LA IZQUIERDA");
  IZQUIERDALEVE();
 }
 if((S3 == 0)&&(S1>=800)&&(S2==1)&&(S4==1)&&(S5==1)){
  AVANZAR();
  Serial.println("AVANZAR");
 }
 if((S4 == 0)&&(S3 == 1)){ //SI S4 TOCA LINEA NEGRA Y S3 NO
  DERECHA();
 }
 if((S4 == 0)&&(S3 == 0)){ //SI S4 TOCA LINEA NEGRA Y S3 TAMBIEN
  Serial.println("GIRO LEVE A LA DERECHA");
  DERECHALEVE();
 }
 if(S5 == 0){
  Serial.println("GIRO A LA DERECHA");
  DERECHA();
 }

 if((S3 == 1)&&(S1>=800)&&(S2==1)&&(S4==1)&&(S5==1)){
  PARAR();
  Serial.println("STOP");
 delay(10);
 Serial.println("*********************************");
 }
}

void AVANZAR(){
  display.clearDisplay(); // Clear the buffer.
  display.setTextSize(2);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(20, 20);
  display.println("AVANZAR");
  display.display();
  analogWrite(PWMA, potH);
  analogWrite(PWMB, potH);
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, LOW);
  digitalWrite(BIN1, HIGH);
  digitalWrite(BIN2, LOW);
}

void IZQUIERDA(){
  display.clearDisplay(); // Clear the buffer.
  display.setTextSize(2);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(10, 20);
  display.println("IZQUIERDA");
  display.display();
  analogWrite(PWMA, potH);
  analogWrite(PWMB, potH);
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, HIGH);
  digitalWrite(BIN1, HIGH);
  digitalWrite(BIN2, LOW);
}
void IZQUIERDALEVE(){
  display.clearDisplay(); // Clear the buffer.
  display.setTextSize(1);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(0, 20);
  display.println("IZQUIERDA LEVE");
  display.display();
  analogWrite(PWMA, potL);
  analogWrite(PWMB, potH);
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, LOW);
  digitalWrite(BIN1, HIGH);
  digitalWrite(BIN2, LOW);
}

void DERECHA(){
  Serial.println("GIRO A LA DERECHA");
  display.clearDisplay(); // Clear the buffer.
  display.setTextSize(2);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(20, 20);
  display.println("DERECHA");
  display.display();
  analogWrite(PWMA, potH);
  analogWrite(PWMB, potH);
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, LOW);
  digitalWrite(BIN1, LOW);
  digitalWrite(BIN2, HIGH);
}
void DERECHALEVE(){
  display.clearDisplay(); // Clear the buffer.
  display.setTextSize(1);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(0, 20);
  display.println("DERECHA LEVE");
  display.display();
  analogWrite(PWMA, potH);
  analogWrite(PWMB, potL);
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, LOW);
  digitalWrite(BIN1, HIGH);
  digitalWrite(BIN2, LOW);
}

void PARAR(){
  display.clearDisplay(); // Clear the buffer.
  display.setTextSize(2);
  display.setTextColor(SH110X_WHITE);
  display.setCursor(40, 20);
  display.println("STOP");
  display.setTextSize(1);
  display.setCursor(5, 40);
  display.println("No se detecto linea");
  display.display();
  analogWrite(PWMA, potH);
  analogWrite(PWMB, potL);
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, LOW);
  digitalWrite(BIN1, LOW);
  digitalWrite(BIN2, LOW);
}

Comentarios

Entradas populares de este blog

CLASIFICADOR DE COLORES CON SENSOR TCS3472 (I2C) CON ARDUINO NANO

PROTOTIPO - CONTROL DE ACCESO CON RFID + TECLADO CON ALMACENAMIENTO EN MICRO SD

CONTROL DE ACCESO CON RFID YMODULO RTC DS3231