hello blynkers i’m having a problems with my code that i’ve changed it from some example that was written for node mcu i belive it and for some reason it doesn’t want to work on my mega + ethernet 5100
any help would be appreciate it
thanx
best regards!
#include <SPI.h>
#define BLYNK_PRINT Serial // Uncomment for debugging
#include <SimpleTimer.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = " ";
#define W5100_CS 10
#define SDCARD_CS 4
#define PULSE_PIN 2
#define FLOW_CALIBRATION 4.5
#define VPIN_TOTAL_LITERS V1
#define VPIN_FLOW_RATE V2
#define VPIN_FLOW_MILLI_LITERS V3
#define VPIN_RESET V4
BlynkTimer timer;
volatile long pulseCount = 0;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
float totalLitres;
float totalLitresold;
unsigned long oldTime;
BLYNK_CONNECTED() { // runs once at device startup, once connected to server.
Blynk.syncVirtual(VPIN_TOTAL_LITERS); //gets last know value of V1 virtual pin
}
// Restores last know value of V1 virtual pin which we got it from blynk server
BLYNK_WRITE(VPIN_TOTAL_LITERS)
{
totalLitresold = param.asFloat();
}
BLYNK_WRITE(VPIN_RESET) { // reset all data with button in PUSH mode on virtual pin V4
int resetdata = param.asInt();
if (resetdata == 0) {
Serial.println("Clearing Data");
Blynk.virtualWrite(VPIN_TOTAL_LITERS, 0);
Blynk.virtualWrite(VPIN_FLOW_RATE, 0);
flowRate = 0;
flowMilliLitres = 0;
totalMilliLitres = 0;
totalLitres = 0;
totalLitresold = 0;
}
}
void pulseCounter()
{
pulseCount++;
}
void flow()
{
if ((millis() - oldTime) > 1000) // Only process counters once per second
{
detachInterrupt(PULSE_PIN);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / FLOW_CALIBRATION;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000;
totalMilliLitres += flowMilliLitres;
totalLitres = totalLitresold + totalMilliLitres * 0.001;
unsigned int frac;
// Print the flow rate for this second in liters / minute
Serial.print("flowrate: ");
Serial.print(int(flowRate)); // Print the integer part of the variable
Serial.print("."); // Print the decimal point
frac = (flowRate - int(flowRate)) * 10; // Determine the fractional part. The 10 multiplier gives us 1 decimal place.
Serial.print(frac, DEC) ; // Print the fractional part of the variable
Serial.print("L/min");
Serial.print(" Current Liquid Flowing: "); // Print the number of liters flowed in this second
Serial.print(flowMilliLitres);
Serial.print("mL/Sec");
Serial.print(" Output Liquid Quantity: "); // Print the cumulative total of liters flowed since starting
Serial.print(totalLitres);
Serial.println("L");
pulseCount = 0; // Reset the pulse counter so we can start incrementing again
attachInterrupt(PULSE_PIN, pulseCounter, FALLING); // Enable the interrupt again now that we've finished sending output
}
}
void sendtoBlynk() // In this function we are sending values to blynk server
{
Blynk.virtualWrite(VPIN_TOTAL_LITERS, totalLitres); // Total water consumption in liters (L)
Blynk.virtualWrite(VPIN_FLOW_RATE, flowRate); // Displays the flow rate for this second in liters / minute (L/min)
Blynk.virtualWrite(VPIN_FLOW_RATE, flowMilliLitres); // Displays the number of liters flowed in second (mL/Sec)
}
void setup()
{
Serial.begin(57600);
Blynk.begin(auth);
pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
totalLitresold = 0;
pinMode(PULSE_PIN, INPUT); // Initialization of the variable "PULSE_PIN" as INPUT (D2 pin)
attachInterrupt(PULSE_PIN, pulseCounter, FALLING);
timer.setInterval(10000L, sendtoBlynk); // send values blynk server every 10 sec
}
void loop()
{
Blynk.run();
timer.run();
flow();
}
Pete i meant that it doesn’t display any data in blynk app or print serial
And also I have noticed that everybody is using node mcu or esp boards for this particular sensor.
Pete my device is connected to blynk and app is connected to blynk server ,ethernet cs pin initialised and sd card deselected, still doesn’t display any data
i’ve made changes in original sketch
i think it’s something with interrupt or timing since this sensor generates square wave …
Have you hade this board and Ethernet shield working with a simple Blynk sketch?
These Ethernet shields are very erratic. They don’t work with some Ethernet switches, and regularly have problems initialising in the correct status.
I used this setup for around 6 months and tried numerous shields and various mods/hacks to try to get them working reliably before eventually abandoning the idea and switching to a NodeMCU.
Yes I did. I’m using this ethernet shield plus arduino mega as a test board to test different devices and test my sketches that’s how I know this board works 100%
#include <SPI.h>
#define BLYNK_PRINT Serial // Uncomment for debugging
#include <SimpleTimer.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";
#define W5100_CS 10
#define SDCARD_CS 4
#define PULSE_PIN 2
#define FLOW_CALIBRATION 4.5
#define VPIN_TOTAL_LITERS V1
#define VPIN_FLOW_RATE V2
#define VPIN_FLOW_MILLI_LITERS V3
#define VPIN_RESET V4
BlynkTimer timer;
volatile long pulseCount = 0;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
float totalLitres;
float totalLitresold;
unsigned long oldTime;
BLYNK_CONNECTED() { // runs once at device startup, once connected to server.
Blynk.syncVirtual(VPIN_TOTAL_LITERS); //gets last know value of V1 virtual pin
}
// Restores last know value of V1 virtual pin which we got it from blynk server
BLYNK_WRITE(VPIN_TOTAL_LITERS)
{
totalLitresold = param.asFloat();
}
BLYNK_WRITE(VPIN_RESET) { // reset all data with button in PUSH mode on virtual pin V4
int resetdata = param.asInt();
if (resetdata == 0) {
Serial.println("Clearing Data");
Blynk.virtualWrite(VPIN_TOTAL_LITERS, 0);
Blynk.virtualWrite(VPIN_FLOW_RATE, 0);
flowRate = 0;
flowMilliLitres = 0;
totalMilliLitres = 0;
totalLitres = 0;
totalLitresold = 0;
}
}
void pulseCounter()
{
pulseCount++;
}
void flow()
{
if ((millis() - oldTime) > 1000) // Only process counters once per second
{
detachInterrupt(PULSE_PIN);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / FLOW_CALIBRATION;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000;
totalMilliLitres += flowMilliLitres;
totalLitres = totalLitresold + totalMilliLitres * 0.001;
unsigned int frac;
// Print the flow rate for this second in liters / minute
Serial.print("flowrate: ");
Serial.print(int(flowRate)); // Print the integer part of the variable
Serial.print("."); // Print the decimal point
frac = (flowRate - int(flowRate)) * 10; // Determine the fractional part. The 10 multiplier gives us 1 decimal place.
Serial.print(frac, DEC) ; // Print the fractional part of the variable
Serial.print("L/min");
Serial.print(" Current Liquid Flowing: "); // Print the number of liters flowed in this second
Serial.print(flowMilliLitres);
Serial.print("mL/Sec");
Serial.print(" Output Liquid Quantity: "); // Print the cumulative total of liters flowed since starting
Serial.print(totalLitres);
Serial.println("L");
pulseCount = 0; // Reset the pulse counter so we can start incrementing again
attachInterrupt(PULSE_PIN, pulseCounter, FALLING); // Enable the interrupt again now that we've finished sending output
}
}
void sendtoBlynk() // In this function we are sending values to blynk server
{
Blynk.virtualWrite(VPIN_TOTAL_LITERS, totalLitres); // Total water consumption in liters (L)
Blynk.virtualWrite(VPIN_FLOW_RATE, flowRate); // Displays the flow rate for this second in liters / minute (L/min)
Blynk.virtualWrite(VPIN_FLOW_RATE, flowMilliLitres); // Displays the number of liters flowed in second (mL/Sec)
}
void setup()
{
Serial.begin(57600);
Blynk.begin(auth);
pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
totalLitresold = 0;
pinMode(PULSE_PIN, INPUT); // Initialization of the variable "PULSE_PIN" as INPUT (D2 pin)
attachInterrupt(PULSE_PIN, pulseCounter, FALLING);
timer.setInterval(10000L, sendtoBlynk); // send values blynk server every 10 sec
}
void loop()
{
Blynk.run();
timer.run();
flow();
}