class Ultrasonic{
private:
int pinTR;
int pinEC;
public:
Ultrasonic(int TR, int EC){
pinTR = TR;
pinEC = EC;
pinMode(pinTR, OUTPUT);
pinMode(pinEC, INPUT);
};
long read(){
digitalWrite(pinTR, LOW);
delayMicroseconds(2);
digitalWrite(pinTR, HIGH);
delayMicroseconds(10);
digitalWrite(pinTR, LOW);
return pulseIn(pinEC,HIGH) * 0.01723;
}
};
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1); // create SSD1306 display object connected to I2C
Ultrasonic ultrasonic(2,3);
float medida = 0;
void setup() {
Serial.begin(9600);
// initialize OLED display with address 0x3C for 128x64
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while (true);
}
delay(2000); // wait for initializing
display.clearDisplay(); // clear display
}
float anterior = 0;
float show = false;
void loop() {
medida = ultrasonic.read();
if(medida != anterior){
display.clearDisplay();
display.setCursor(8, 0);
display.setTextSize(1);
display.setTextColor(1);
display.print("-- TRENA DIGITAL --");
display.drawRoundRect(0, 12, 128, 40, 10, WHITE);
/* Posiciona o cursor na coordenada informada. */
display.setCursor(20, 55);
display.print("Rob");
display.write(162);
/* Imprime a palavra tica. */
display.print("tica Paran");
/* Imprime a letra á. */
display.write(160);
/* Define o tamanho da fonte: 2. */
display.setTextSize(2);
}
if (medida >= 10 && medida < 100 && anterior != medida) {
anterior = medida;
display.setCursor(50, 25);
display.print(String(medida,0));
display.setCursor(85, 25);
display.print("cm");
show = true;
}
if (medida >= 100 && anterior != medida) {
anterior = medida;
display.setCursor(25, 25);
display.print(medida / 100);
display.setCursor(85, 25);
display.print("m");
show = true;
}
if(show){
show = false;
display.display();
}
delay(100);
}