Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
3.1 kB
1
Indexable
Never
#define BLYNK_TEMPLATE_ID "TMPL6QyTN_inE"
#define BLYNK_TEMPLATE_NAME "Voltage Sensor"
#define BLYNK_AUTH_TOKEN "lEjzYUmWHobuwSIiwKSsbrFn7xX9EsgU"

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

const int voltagePin = A0;
const float voltageThreshold = 7.0;
const float calibrationFactor = 3.2;

int count = 0;
bool counted = false;  // Flag to track whether the voltage has been counted
int statusCycle = 0;   // 0: LOW, 1: NORMAL, 2: HIGH

// Replace with your network credentials
char ssid[] = "aleposyria";
char pass[] = "test123456789";

// Replace with your Blynk authentication token
char auth[] = "lEjzYUmWHobuwSIiwKSsbrFn7xX9EsgU";

void setup() {
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);

  lcd.init();
  lcd.backlight();

  // Set initial LED states in Blynk
  Blynk.virtualWrite(V1, LOW);  // LED for 'Status: LOW'
  Blynk.virtualWrite(V2, LOW);  // LED for 'Status: NORMAL'
  Blynk.virtualWrite(V3, LOW);  // LED for 'Status: HIGH'
}

void loop() {
  Blynk.run();

  float voltage = getVoltage() * calibrationFactor;

  // Send voltage value to Blynk Gauge widget
  Blynk.virtualWrite(V0, voltage);

  lcd.setCursor(0, 0);
  lcd.print("Amplitude: ");
  lcd.print(voltage);
  lcd.print("V");

  if (voltage > voltageThreshold && !counted) {
    count++;
    counted = true;  // Set the flag to indicate that voltage has been counted
    lcd.setCursor(0, 1);
    lcd.print("R-R Peak: ");
    lcd.print(count);
    
    // Send 'R-R Peak' to Blynk
    Blynk.virtualWrite(V5, count);
  }

  if (voltage <= voltageThreshold) {
    counted = false;  // Reset the flag when voltage goes below the threshold
  }

  // Determine status based on count ranges
  if (count >= 0 && count <= 5) {
    statusCycle = 0;  // LOW
  } else if (count >= 6 && count <= 10) {
    statusCycle = 1;  // NORMAL
  } else if (count >= 11 && count <= 99) {
    statusCycle = 2;  // HIGH
  }

  // Display the corresponding status on the LCD
  lcd.setCursor(0, 3);
  switch (statusCycle) {
    case 0:
      lcd.print("Status   : LOW    ");
      // Turn on LED for 'Status: LOW'
      Blynk.virtualWrite(V1, HIGH);
      Blynk.virtualWrite(V2, LOW);
      Blynk.virtualWrite(V3, LOW);
      break;
    case 1:
      lcd.print("Status   : NORMAL ");
      // Turn on LED for 'Status: NORMAL'
      Blynk.virtualWrite(V1, LOW);
      Blynk.virtualWrite(V2, HIGH);
      Blynk.virtualWrite(V3, LOW);
      break;
    case 2:
      lcd.print("Status   : HIGH   ");
      // Turn on LED for 'Status: HIGH'
      Blynk.virtualWrite(V1, LOW);
      Blynk.virtualWrite(V2, LOW);
      Blynk.virtualWrite(V3, HIGH);
      break;
  }

  // Increment status cycle for the next iteration
  statusCycle = (statusCycle + 1) % 3;  // 3 is the number of status levels
}

float getVoltage() {
  int sensorValue = analogRead(voltagePin);
  float voltage = sensorValue * (5.0 / 1023.0);
  return voltage;
}
Leave a Comment