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
Publicar un comentario