Nodemcu vibration sensor with timer(stopwatch)

I am making a sump pump monitor
two sensors one to measure water level - this works
the other is a vibration sensor that returns HIGH when the motor is running.

The idea is to measure(time) how long the motor runs. If it runs for more than 1 minute email me.
All timers I have read about control when to do a task, I need
to measure how long the motor has run.None of the widgets seem to do what I require, so I am assuming some code must be written.

here is what I have working- water level.,
I wired the vibration sensor and was able to see it high or low on the blink app.

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define TRIGGERPIN D1
#define ECHOPIN    D2
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "c48e77b790e64b05adf1ee77fb4dbb40";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "nn";
char pass[] = "";

WidgetLCD lcd(V1);

BlynkTimer timer;

// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void myTimerEvent()
{
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, millis() / 1000);
}

void setup()
{
  // Debug console
  Serial.begin(9600);
pinMode(TRIGGERPIN, OUTPUT);
  pinMode(ECHOPIN, INPUT);
  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);

  lcd.clear(); //Use it to clear the LCD Widget
  lcd.print(0, 0, "Distance in cm"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  // Please use timed events when LCD printintg in void loop to avoid sending too many commands
  // It will cause a FLOOD Error, and connection will be dropped
}

void loop()
{
  lcd.clear();
  lcd.print(0, 0, "Depth in cm"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  long duration, distance;
  digitalWrite(TRIGGERPIN, LOW);  
  delayMicroseconds(3); 
  
  digitalWrite(TRIGGERPIN, HIGH);
  delayMicroseconds(12); 
  
  digitalWrite(TRIGGERPIN, LOW);
  duration = pulseIn(ECHOPIN, HIGH);
  distance = 100-(duration/2) / 29.1;
  Serial.print(distance);
  Serial.println("Cm");
  lcd.print(7, 1, distance);
  Blynk.run();
timer.run(); // Initiates BlynkTimer
  delay(1000);  //was 3500

}

When looking for a way of measuring time between digitalRead() pulses or something like that, you do need code, not a widget. Simply Google for this and there are many ways… but the most basic is counting and comparing millis()

unsigned long StartTime = millis();

// later...

unsigned long CurrentTime = millis();
unsigned long ElapsedTime = CurrentTime - StartTime;

1 Like

A post was split to a new topic: Please write my code for me - URGENT