//libs
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <stdio.h>
//Ultrasonic
const int Trig = 3;
const int Echo = 2;
//Data
long duration;
float cm;
//Potentiometer
int PotSens = A0;
int PotDatta = 0;
int ButtonPin = 5;
int Button = 0;
float Pot2cm = 0;
//Error
int ErrorDebug1 = 8;
int ErrorDebug2 = 9;
char ErrorChar;
//Oled Screen
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
//Pinmode
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(ButtonPin,INPUT);
pinMode(PotSens, INPUT);
//Screen
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
for(;;);
}
display.display();
display.clearDisplay();
}
void loop() {
HCsens();
PotDatta = analogRead(PotSens);
Pot2cm = 0.0293255132*(PotDatta);
Error();
Button = digitalRead(ButtonPin);
Display();
display.display();
delay(20);
//Serial.println("--------------------------");
//delay(200);
}
int Error(){
if ((Pot2cm >= (cm + 0.4)) || (Pot2cm <= (cm - 0.4))){
digitalWrite(ErrorDebug1, HIGH);
digitalWrite(ErrorDebug2, LOW);
/*Serial.println(digitalRead(ErrorDebug1));
Serial.println(digitalRead(ErrorDebug2));
Serial.println("Error");
delay(200);
*/
ErrorChar = 'S';
}
else{
digitalWrite(ErrorDebug2, HIGH);
digitalWrite(ErrorDebug1, LOW);
/*Serial.println(digitalRead(ErrorDebug1));
Serial.println(digitalRead(ErrorDebug2));
Serial.println("No Error");
delay(200);
*/
ErrorChar = 'N';
}
}
int HCsens(){
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
duration = pulseIn(Echo, HIGH);
cm = us2Cm(duration) - 5;
}
float us2Cm (float microseconds) {
return microseconds / 29 / 2;
}
void Display(void){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(13,0);
display.println(F("Movimiento lineal"));
display.drawRect(0, 10, 128, 1, WHITE);
display.setCursor(1,15);
display.print("Boton:");
display.print(Button);
display.setCursor(70,15);
display.print("Error?:");
display.print(ErrorChar);
display.setTextSize(2);
display.setCursor(1,25);
display.print("Sens:");
display.print(cm);
display.setCursor(1,45);
display.print("Cnta:");
display.print(Pot2cm);
}