#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Q2HX711.h>
const byte MPS_OUT_pin = 3; // Pino de dados OUT
const byte MPS_SCK_pin = 2; // Pino de dados do relógio
Q2HX711 MPS20N0040D(MPS_OUT_pin, MPS_SCK_pin); // começa a comunicação com o HX710B
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 8 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int avg_size = 10; // #pontos para calcular a média
//Variáveis globais
float level = 0.0;
uint32_t avg_val = 0.0; // variável para média
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicia a comunicação com o display OLED
}
void loop() {
for (int ii=0;ii<avg_size;ii++){
avg_val += MPS20N0040D.read(); // adicionar várias leituras de ADC
delay(10); // atraso entre as leituras
}
avg_val /= avg_size;
level=map(avg_val,9320675, 9323008, 0, 1000); //dimensiona o valor analógico para um pixel imprimível no limite da tela
level=(level/10.0);
Serial.print(level, 1); // a adição de ", 1" define a qte de casas decimais
Serial.println(" %");showData();
}
// fim do Loop
//===========================================================================
// Funções avulsas chamadas dentro do código
void showData() {
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(2, 2);
display.print("Raw: ");
display.print(avg_val);
display.setTextSize(2);
display.setCursor(35, 25);
display.print("nivel");
display.setCursor(30, 45);
display.print(level);
display.print(" %");
display.display();
}