// IMPOSTARE LA VARIABILE FATTORE SE LA LETTURA E DIVERSA DA 0-1023
// 1= 0-1023 2= 0-2047 4= 0-4097
// A0= PIN USCITA AMPEROMETRO 5A ACS712
// A1= POSITIVO INGRESSO (MAX 5V SENZA PARTITORE DI TENSIONE)
// SE INSERISCI PARTITORE MODIFICA IL MOLTIPLICATORE NELLA VARIABILE
// A2= INGRESSO POSITIVO BATTERIA INTERNA PER VISUALIZZARE LA CARICA CALIBRATA PER 4,2V CARICA 2.7V SCARICA
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define NERO 0x0000 ///< 0, 0, 0
#define NAVY 0x000F ///< 0, 0, 123
#define VERDE2 0x03E0 ///< 0, 125, 0
#define CELESTE2 0x03EF ///< 0, 125, 123
#define MARRONE 0x7800 ///< 123, 0, 0
#define VIOLA 0x780F ///< 123, 0, 123
#define OLIVA 0x7BE0 ///< 123, 125, 0
#define GRIGIO 0xC618 ///< 198, 195, 198
#define GRIGIO2 0x7BEF ///< 123, 125, 123
#define BLU 0x001F ///< 0, 0, 255
#define VERDE 0x07E0 ///< 0, 255, 0
#define CELESTE 0x07FF ///< 0, 255, 255
#define ROSSO 0xF800 ///< 255, 0, 0
#define MAGENTA 0xF81F ///< 255, 0, 255
#define GIALLO 0xFFE0 ///< 255, 255, 0
#define BIANCO 0xFFFF ///< 255, 255, 255
#define ARANCIONE 0xFD20 ///< 255, 165, 0
#define GIALLO2 0xAFE5 ///< 173, 255, 41
#define ROSA 0xFC18 ///< 255, 130, 198
// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
int fattore=1; // FATTORE DI SCALA PER LETTURE 1=1024 (LETTURE A 10BIT)
double costVolt=5000.0; // MODIFICARE IN CASO DI INSERIMENTO PARTITORE DI TENSIONE
double volt=0.0;
double average = 0;
double scaleFactor = 185.0;
double voltage = 0.0;
double current = 0.0;
double currentsec = 0.0;
uint16_t tempo=0,inizio=0;
int grafico1=200,grafico2=0;
int batt=0,prebatt=0;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
void setup() {
Serial.begin(9600);
Serial.println("AMPEROMETRO");
pinMode(4,INPUT_PULLUP);
tft.begin();
sfondo();
delay(1000);
inizio=millis();
//grafico1=map(analogRead(A1),553,1023,315,200);
}
void loop(void) {
volt=(analogRead(A1)*((costVolt/1024)/fattore))/1000;
corrente();
currentsec += current/3600;
tempo=((millis()-inizio)/1000)+1;
voltstamp(BIANCO);
ampstamp(BIANCO);
ampsecstamp(NERO);
batteria(VERDE2);
delay(800);
ampsecstamp(GIALLO);
voltstamp(ROSSO);
ampstamp(BLU);
if(digitalRead(4)==LOW){
inizio=millis();
currentsec=0;
sfondo();
}
}
void ampsecstamp(uint16_t color) {
tft.setCursor(5, 130); // CURSORE X Y
tft.setTextColor(color); // COLORE TESTO
tft.setTextSize(2); // DIMENSIONE TESTO
tft.print("Tempo: "); // STAMPA TESTO
tft.print(tempo/60);
tft.print(':');
tft.print(tempo%60);
tft.setCursor(5, 155); // CURSORE X Y
tft.print("AmpSum: "); // STAMPA TESTO
tft.print(currentsec,5);
// map da 200=5v 315 =2,7v
//tft.drawPixel(5+(tempo),map(analogRead(A1),553,1023,315,200),NERO);
grafico2=map(analogRead(A1),553*fattore,1023*fattore,314,200);
if (grafico2 > 314){grafico2=314;}
tft.drawLine(6+(tempo/60), grafico1, 7+(tempo/60), grafico2, ROSSO);
grafico1=grafico2;
}
void batteria(uint16_t color){
prebatt=batt;
batt=map(analogRead(A2),615*fattore, 840*fattore,1,48);
if (batt < 1){batt=1;}
if (batt >48){batt=48;}
if (batt<prebatt){tft.fillRoundRect(181, 3, prebatt, 14,2, GRIGIO);} //BATTERIA
tft.fillRoundRect(181, 3, batt, 14,2, color); //BATTERIA
}
void voltstamp(uint16_t color) {
tft.setCursor(5, 35); // CURSORE X Y
tft.setTextColor(color); // COLORE TESTO
tft.setTextSize(3); // DIMENSIONE TESTO
tft.print("Volt: "); // STAMPA TESTO
tft.print(volt,3);
}
void ampstamp(uint16_t color) {
tft.setCursor(5, 85); // CURSORE X Y
tft.setTextColor(color); // COLORE TESTO
tft.setTextSize(3); // DIMENSIONE TESTO
tft.print("mAmp: "); // STAMPA TESTO
tft.print(current,3);
}
void sfondo (){
tft.fillRect(0,0, 240, 20, GRIGIO); // RETTANGOLO GRIGIO
tft.fillRect(0,20, 240, 70, ROSSO); // RETTANGOLO ROSSO
tft.fillRect(0,70, 240, 120, BLU); // RETTANGOLO BLU
tft.fillRect(0,120, 240, 180, GIALLO); // RETTANGOLO GIALLO
tft.fillRect(0,180, 240, 320, BIANCO); // RETTANGOLO BIANCO
tft.drawLine(0, 20, 240, 20, NERO); //LINEA NERA
tft.drawLine(0, 70, 240, 70, NERO); //LINEA NERA
tft.drawLine(0, 120, 240, 120, NERO); //LINEA NERA
tft.drawLine(0, 180, 240, 180, NERO); //LINEA NERA
tft.drawLine(5, 185, 5, 315, NERO); // GRAFICO LINEA
tft.drawLine(5, 315, 235, 315, NERO); // GRAFICO LINEA
tft.drawLine(6, 200, 235, 200, GRIGIO); //LINEA DIVISORIA GRAFICO
tft.drawLine(6, 250, 235, 250, GRIGIO); //LINEA DIVISORIA GRAFICO
tft.drawLine(6, 300, 235, 300, GRIGIO); //LINEA DIVISORIA GRAFICO
tft.drawLine(65, 185, 65, 314, GRIGIO); //LINEA DIVISORIA GRAFICO
tft.drawLine(125, 185, 125, 314, GRIGIO); //LINEA DIVISORIA GRAFICO
tft.drawLine(185, 185, 185, 314, GRIGIO); //LINEA DIVISORIA GRAFICO
tft.setCursor(220, 205); // CURSORE X Y
tft.setTextColor(GRIGIO2); // COLORE TESTO
tft.setTextSize(1); // DIMENSIONE TESTO
tft.print("5V"); // STAMPA TESTO
tft.setCursor(220, 255); // CURSORE X Y
tft.print("4V"); // STAMPA TESTO
tft.setCursor(220, 305); // CURSORE X Y
tft.print("3V"); // STAMPA TESTO
tft.setCursor(70, 185); // CURSORE X Y
tft.print("1h"); // STAMPA TESTO
tft.setCursor(130, 185); // CURSORE X Y
tft.print("2h"); // STAMPA TESTO
tft.setCursor(190, 185); // CURSORE X Y
tft.print("3h"); // STAMPA TESTO
tft.setCursor(5, 7); // CURSORE X Y
tft.setTextColor(NERO); // COLORE TESTO
tft.setTextSize(1); // DIMENSIONE TESTO
tft.print("LONGDAVINCI-Utility |MAX "); // STAMPA TESTO
tft.print(costVolt/1000,0); // STAMPA TESTO
tft.print("V"); // STAMPA TESTO
tft.drawRoundRect(180, 2, 50, 16, 3, NERO); //BATTERIA
tft.fillRoundRect(230, 6, 3, 8, 0, NERO); //BATTERIA
}
void corrente(){
average = 0;
for (int i = 0; i < 100; i++) {
average += analogRead(0);
delay(1);
}
average /= 100;
voltage = (average / (1023.0*fattore)) * 5000.0;
// Serial.println(voltage);
current = (voltage - 2528) / scaleFactor; // IL MIO ATTREZZO A VUOTO E 2528 LA COSA VARIA DA DISPOSITO A DISPOSITIVO
}