// Adição de bibliotecas necessárias ao funcionamento do display OLED
#include <Wire.h> // Wire.h gerencia a comunicação I2C
#include <Adafruit_GFX.h> // Adafruit gerencia gráficos e texto
#include <Adafruit_SSD1306.h> // Controla displays OLED do tipo SSD1306
Adafruit_SSD1306 oled(128, 64, &Wire, -1); // Inicializa um 'oled' de 128x64 px; -1 indica a ausência de um pino RST
int sensor = 12; // 12 indica o pino digital do sensor PIR
int convidados = 0; // 'convidados' armazenará os incrementos no número de convidados
int movimentoDetectado = 0; // 'movimentoDetectado' serve para contabilizar apenas 1 movimento a cada leitura por segundo
// Em caso de desejar detectar múltiplos movimentos a cada delay, basta apagar tudo que envolve essa variável
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
pinMode(sensor, INPUT); // Define o pino do sensor(12) como entrada
oled.setTextColor(WHITE); // Define a cor do texto do display como branca
oled.clearDisplay(); // Limpa o display para evitar que ele puxe dados da utilização anterior
}
void loop() {
int leituraSensor = digitalRead(sensor);
oled.clearDisplay();
// Se a leitura do sensor for ativada e 'movimentoDetectado' for 0(não ter detectado múltiplos movimentos no mesmo segundo)
if (leituraSensor == HIGH && movimentoDetectado == 0) {
convidados++; //'convidados' é incrementado em 1
movimentoDetectado = 1; //'movimentoDetectado' é redefinido como 1, indicando que já foi realizada uma leitura no segundo atual
}
else {
// Quando o sensor não detectar movimento, 'movimentoDetectado' será 0
movimentoDetectado = 0;
}
oled.setCursor(0, 0); // Posição X e Y do texto no display, sendo 0,0 o canto superior esquerdo
oled.setTextSize(1); // Tamanho do texto(1 = mínimo)
oled.print("Convidados presentes:");
oled.setCursor(60, 28);
oled.setTextSize(3);
oled.print(convidados);
oled.display(); // Atualiza o display
delay(1000); // A cada 1 segundo, o sensor detectará um movimento
}