#include <Wire.h>
#include <SD.h>
#include <SPI.h>
#include <SSD1306Ascii.h>
#include <SSD1306AsciiSpi.h> // Use SSD1306AsciiSpi library for SPI interface
#include <ZMPT101B.h>
#define SENSITIVITY 500.0f
#define SD_CS 10
#define RST_PIN -1 // Reset pin (not used)
#define OLED_CS 8 // Chip select pin for OLED display
#define OLED_DC 9 // Data/command pin for OLED display
ZMPT101B voltageSensor(A0, 50.0);
SSD1306AsciiSpi oled; // Use SSD1306AsciiSpi for SPI interface
float values[] = {220.0, 220.0, 220.0, 220.0, 220.0};
int counter = 0;
void setup() {
Serial.begin(9600); // Initialize serial communication for debugging
// Initialize SPI communication for OLED display
SPI.begin();
// Initialize OLED display
oled.begin(&Adafruit128x64, OLED_CS, OLED_DC, RST_PIN); // Specify CS, DC, and RST pins
oled.setFont(Adafruit5x7); // Set font size
voltageSensor.setSensitivity(SENSITIVITY); // Set ZMPT101B sensor sensitivity
if (!SD.begin(SD_CS)) {
Serial.println("SD card initialization failed!");
return;
}
Serial.println("SD card initialized successfully.");
}
void loop() {
// Read voltage from ZMPT101B sensor
float voltage = sensor_read();
if (!isnan(voltage)) {
Serial.print("Voltage from ZMPT101B: ");
Serial.print(voltage);
Serial.println(" V");
// Display voltage on OLED
oled.clear();
oled.setCursor(0, 0);
oled.print("Voltage: ");
oled.print(voltage);
oled.println(" V");
}
delay(2000); // Delay before taking the next reading
}
float sensor_read() {
// For simulation, substitute with actual sensor reading logic
float voltage = map(analogRead(A0), 0, 1023, 150, 300);
values[counter] = voltage;
counter++;
if (counter >= 6) {
counter = 0;
}
int sum = 0;
for (int i = 0; i < 6; i++) {
sum += values[i];
}
return sum / 6;
}