//#include <SSD1306Ascii.h>
//#include <SSD1306AsciiAvrI2c.h>
#define SSD1306_NO_SPLASH
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//#include <Fonts/FreeMono12pt7b.h>
#include <Fonts/Picopixel.h>
#include <JC_Button.h>
#include "gfx_battery.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Button chargeBtn(2);
char myArray[] = "enrico24";
byte array[] = {0x65, 0x6E, 0x72, 0x69, 0x63, 0x6F, 0x32, 0x34, 0x0 };
Battery battery(Battery::Size::Micro, 4);
bool isRecharge = false;
float profon;
float temper;
uint16_t rawBatt = 1023;
char strDati[38];
unsigned int lettura = 0;
char gbuff[9]; // generic buffer
uint32_t timer;
void screen0() {
oled.clearDisplay();
battery.setPos(95, 0);
battery.setShow(true);
//battery.draw();
//battery.drawEnergy(3);
/*oled.setFont();
oled.setCursor(0, 0);
oled.print(F("Lett"));
//oled.print(lettura);
oled.setCursor(0, 2);
oled.print(F("Temp"));
//oled.print(temper, 1);
//oled.setCursor(0, 2);
//oled.print(F("C"));
oled.setCursor(0, 4);
oled.print(F("Prof"));
//oled.print(profon, 1);
//oled.print(F("m"));
oled.setCursor(0, 6);
oled.print(F("BATT"));*/
oled.display();
}
void showTemperature() {
// usa gbuff[9] globale
sprintf(gbuff, "%3d.%uC", (int)temper, (uint8_t)(temper * 10) % 10);
oled.setCursor(55, 2);
oled.print(gbuff);
}
void showLettura() {
// usa gbuff[9] globale
sprintf(gbuff, "%5u", lettura);
oled.setCursor(65, 0);
oled.print(gbuff);
}
void showProfondita() {
// usa gbuff[9] globale
sprintf(gbuff, "%3d.%um", (int)profon, (uint8_t)(profon * 10) % 10);
oled.setCursor(55, 4);
oled.print(gbuff);
}
void showVbatt() {
byte battEnergy = map(rawBatt, 0, 1023, 1, 4);
battery.setCurrentEnergy(battEnergy);
/*if (battEnergy) {
if (!battery.isDraw())
battery.draw();
if (!isRecharge)
battery.drawEnergy(battEnergy);
else
battery.recharge();
} else {
if (battery.isDraw()) {
battery.clear();
} else {
battery.draw();
}
}*/
oled.display();
}
void leggisens() {
//temper = (950 / 6.6) - (analogRead(A0) / 6.6);
//profon = analogRead(A1) / 8.5;
rawBatt = analogRead(A0);
/*if (!isRecharge) {
digitalWrite(LED_BUILTIN, LOW);
if (b < rawBatt) {
rawBatt = b;
}
} else {
digitalWrite(LED_BUILTIN, HIGH);
if (b >= rawBatt)
rawBatt = b;
}*/
//65535
/*showLettura();
showTemperature();
showProfondita();
showVbatt();*/
}
void setup()
{
Serial.begin(115200);
chargeBtn.begin();
/*for (byte i=0; i<strlen(myArray)+1; i++) {
byte c = myArray[i];
Serial.print(c, HEX);
Serial.print(" ");
}*/
Serial.println((char*)array);
//pinMode(2, INPUT_PULLUP);
//oled.begin(&Adafruit128x64, I2C_ADDRESS);
//oled.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
if(!oled.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
oled.clearDisplay();
// Draw a single pixel in white
//oled.drawRoundRect(0, 0, 28, 14, 3, SSD1306_WHITE);
// Show the display buffer on the screen. You MUST call display() after
// drawing commands to make them visible on screen!
oled.display();
//delay(1000);
screen0();
/*byte n = 1;
byte lenBar = (24 - 4);
byte nSeg = 4;
byte div = (lenBar / 4);
byte lenSeg = div - 2;
byte xposn = (0 ) + (n * lenSeg) + 2;
byte x = ((n*div)-div);
oled.fillRect(95 + 2 + x, 10 + 2, lenSeg, 8, SSD1306_WHITE);
Serial.println(x);
Serial.println(lenSeg);
Serial.println(div);
n = 2;
x = ((n*div)-div);
oled.fillRect(95 + 2 + x, 10 + 2, lenSeg, 8, SSD1306_WHITE);
Serial.println(x);
Serial.println(lenSeg);
Serial.println(div);
n = 3;
x = ((n*div)-div);
oled.fillRect(95 + 2 + x, 10 + 2, lenSeg, 8, SSD1306_WHITE);
Serial.println(x);
Serial.println(lenSeg);
Serial.println(div);
n = 4;
x = ((n*div)-div);
oled.fillRect(95 + 2 + x, 10 + 2, lenSeg, 8, SSD1306_WHITE);*/
/*012345678901234567890123456
| | | | | |
0 6 8 14 16 22
x0 len 6
x8 len 6
x16 len 6
*/
}
bool headerFileIsWrite = false;
void loop() {
battery.update();
chargeBtn.read();
if (chargeBtn.wasPressed()) {
isRecharge = !isRecharge;
}
battery.setRecharge(isRecharge);
if (millis() - timer >= 500) {
//battery.update();
showVbatt();
timer = millis();
/*oled.setFont(&Picopixel);
oled.setTextColor(SSD1306_WHITE);
oled.setCursor(99, 7);
oled.print("100%");*/
/*lettura++;
timer = millis();
if (!headerFileIsWrite) {
char fileHeader[] = "Lettura,Temperarura,Profondità\n";
Serial.print(fileHeader);
headerFileIsWrite = true;
}
sprintf(strDati, "%u,%d.%u,%d.%u\n", lettura, (int)temper, (uint8_t)(temper * 10) % 10, (int)profon, (uint8_t)(profon * 10) % 10);
Serial.print(strDati);*/
}
// chiamata senza ritardi solo per mostrare l'aggiornamento rapido
leggisens();
}