#include <SPI.
h>
#include <SD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "ACS712.h"
double sensorValue1 = 0;
int crosscount = 0;
int climb_flag = 0;
int val[100];
int max_v = 0;
double VmaxD = 0;
double VeffD = 0;
double Veff = 0;
ACS712 sensor(ACS712_30A, A0);
const int chipSelect = 4;
void setup() {
int zero = [Link]();
[Link](9600);
[Link]();
[Link]();
[Link](0,0);
// [Link](0, 0);
[Link]("Arduino Based ");
[Link](0, 1);
[Link]("Voltage Current");
delay(500);
[Link]();
[Link](0, 0);
[Link]("Voltage Current");
[Link](3, 1);
[Link]("Sensor");
delay(3000);
[Link]();
// Open serial communications and wait for port to open:
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
[Link]("Initializing SD card...");
// see if the card is present and can be initialized:
if () {
[Link]("Card failed, or not present");
// don't do anything more:
return;
[Link]("card initialized.");
void loop() {
float I = abs([Link]());
voltage_setup();
[Link]("Voltage: ");
[Link](10,1);
[Link]("I:");
[Link](12,1);
[Link](I);
// [Link](14,0);
// [Link]("A");
if(Veff>35)
{
[Link](Veff+35.75);
[Link](",");
float VeffLCD = Veff+35.75;
[Link](0,1);
[Link]("V: ");
[Link](3,1);
[Link](VeffLCD);
else{
[Link]("0.00");
[Link](",");
[Link](0,1);
[Link]("V: 0.00");
if (I<0.55)
[Link](String("I = ") + " 0.00");
[Link](10,1);
[Link]("I:");
[Link](12,1);
[Link](I);
else
[Link](String("I = ") + abs(I) + " A");
[Link](10,1);
[Link]("I:");
[Link](12,1);
[Link](I);
delay(100);
float AV = (Veff*I);
[Link](0,0);
[Link]("Power = ");
[Link](7,0);
[Link](AV);
// Wait a second before the new measurement
delay(100);
// make a string for assembling the data to log:
String dataString = "";
// read three sensors and append to the string:
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ",";
}
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = [Link]("[Link]", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
[Link](AV);
[Link]();
// print to the serial port too:
[Link](AV);
// if the file isn't open, pop up an error:
else {
[Link]("error opening [Link]");
VmaxD = 0;
delay(100);
void voltage_setup()
for ( int i = 0; i < 100; i++ ) {
sensorValue1 = analogRead(A1);
if (analogRead(A1) > 511) {
val[i] = sensorValue1;
else {
val[i] = 0;
delay(1);
max_v = 0;
for ( int i = 0; i < 100; i++ )
if ( val[i] > max_v )
max_v = val[i];
val[i] = 0;
if (max_v != 0) {
VmaxD = max_v;
VeffD = VmaxD / sqrt(2);
Veff = (((VeffD - 420.76) / -90.24) * -210.2) + 210.2;
else {
Veff = 0;
}
}