Beruflich Dokumente
Kultur Dokumente
/*
* PCD8544 - Interface with Philips PCD8544 (or compatible) NOKIA 5110 LCDs.
*
* Copyright (c) 2010 Carlos Rodrigues <cefrodrigues@gmail.com>
*
* To use this sketch, connect the eight pins from your LCD like this:
*
* Pin 1 (GND) -> Arduino GND +3.3V (rightmost, when facing the display head-on)
* Pin 2 (LIGHT) -> Center Pin of Potentiometer
* Pin 3 (Vcc) -> Arduino 3.3V
* Pin 4 (CLK) -> Arduino digital pin 8
* Pin 5 (DIN) -> Arduino digital pin 9
* Pin 6 (DC) -> Arduino digital pin 10
* Pin 7 (CE) -> Arduino digital pin 12
* Pin 8 (RST) -> Arduino digital pin 11
*
* Since these LCDs are +3.3V devices, you have to add extra components to
* connect it to the digital pins of the Arduino (not necessary if you are
* using a 3.3V variant of the Arduino, such as Sparkfun's Arduino Pro).
*/
#include <PCD8544.h>
#include <Keyboard.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
// Define Current and Voltage variables
const unsigned int n_max = 5; // Numero di misure su cui effettuare la media
float shuntvoltage[n_max-1];
float busvoltage[n_max-1];
float current_mA[n_max-1];
float loadvoltage[n_max-1];
float mean_current_mA[2];
float mean_loadvoltage[2];
float diff_current_mA[1];
float diff_loadvoltage[1];
float display_lcd_voltage;
float display_lcd_current;
/*
#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to
program the Zero!
#define Serial SerialUSB
#endif
*/
-1-
C:\Users\dntg\Documents\Arduino\battery_log\battery_log.ino mercoledì 3 gennaio 2018 19:27
void setup(void)
{
// PCD8544-compatible displays may have a different resolution...
lcd.begin(84, 48);
lcd.setContrast(40); // sets LCD contrast from 0 to 127
Serial.begin(115200);
Serial.println("Hello!");
delay(2000);
Serial.println("Measuring voltage and current with INA219 ...");
void loop(void)
{
unsigned long ref_time = millis();
while (millis()-ref_time < time_max) { // Delay deve essere 60000
for(int j=0; j<n_max; j++){
acquire_current(j);
mean_current_mA[2] += current_mA[j];
mean_loadvoltage[2] += loadvoltage[j];
}
mean_current_mA[0] = mean_current_mA[1];
mean_loadvoltage[0] = mean_loadvoltage[1];
mean_current_mA[1] = mean_current_mA[2];
mean_loadvoltage[1] = mean_loadvoltage[2];
mean_current_mA[2] /= n_max;
mean_loadvoltage[2] /= n_max;
diff_current_mA[0] = mean_current_mA[1]-display_lcd_current;
diff_loadvoltage[0] = mean_loadvoltage[1]-display_lcd_voltage;
-2-
C:\Users\dntg\Documents\Arduino\battery_log\battery_log.ino mercoledì 3 gennaio 2018 19:27
diff_current_mA[1] = mean_current_mA[2]-display_lcd_current;
diff_loadvoltage[1] = mean_loadvoltage[2]-display_lcd_voltage;
delay(1000);
void acquire_current(int n) {
shuntvoltage[n] = ina219.getShuntVoltage_mV();
busvoltage[n] = ina219.getBusVoltage_V();
current_mA[n] = ina219.getCurrent_mA();
loadvoltage[n] = busvoltage[n] + (shuntvoltage[n] / 1000);
}
void display_current() {
// Write measurements on the second line...
lcd.setCursor(0, 1);
if (mean_loadvoltage[2] <0) {
lcd.print("Volt:");
} else {
lcd.print("Volt: ");
}
lcd.print(mean_loadvoltage[2], 2);
lcd.print(" V");
lcd.setCursor(0, 2);
if (mean_current_mA[2] <0) {
lcd.print("Curr:");
} else {
lcd.print("Curr: ");
}
lcd.print(mean_current_mA[2], 2);
lcd.print(" mA");
lcd.write(0); // write the smiley
lcd.setCursor(0, 3);
lcd.print("Diff: ");
lcd.print(abs(diff_loadvoltage[1]));
// Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
// Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(mean_loadvoltage[2]); Serial.println(" V");
Serial.print("Current: "); Serial.print(mean_current_mA[2]); Serial.println(" mA");
Serial.println("");
}
void keyb_log() {
if (!digitalRead(buttonPin)) { // encoder pressed
keyboardOn = !keyboardOn;
while (!digitalRead(buttonPin)) {}
}
if (keyboardOn) {
-3-
C:\Users\dntg\Documents\Arduino\battery_log\battery_log.ino mercoledì 3 gennaio 2018 19:27
// output to keyboard
if (firstTime) {
keyHeader();
firstTime = false;
}
Keyboard.print(millis() / 1000);
Keyboard.print(char(9));
Keyboard.print(mean_loadvoltage[2], 2);
Keyboard.print(char(9));
Keyboard.print(mean_current_mA[2], 0);
Keyboard.print(char(10));
Keyboard.println(char(13));
keyboardOn = false;
}
}
void keyHeader() {
Keyboard.print("Time");
Keyboard.print(char(9));
Keyboard.print("Volt");
Keyboard.print(char(9));
Keyboard.print("mA");
Keyboard.print(char(10));
Keyboard.println(char(13));
}
-4-