#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ======================
// Paramètrages encodeur
// =====================
#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4
int page = 0;
// ====================
// Polices d'écritures
// ====================
#include "FreeSansBold5pt7b.h"
#include "FreeSansBold8pt7b.h"
#include "FreeSansBold6pt7b.h"
#include <Fonts/Picopixel.h>
#include <Fonts/FreeSansBold9pt7b.h> // Gras (en 9, 12, 18, et 24 pts)
#include <Fonts/FreeSansBold12pt7b.h>
#include <Fonts/FreeSansBold18pt7b.h>
#include <Fonts/FreeSansBold24pt7b.h>
#include <Fonts/FreeSans9pt7b.h> // Normal (en 9, 12, 18, et 24 pts)
#include <Fonts/FreeSans12pt7b.h>
#include <Fonts/FreeSans18pt7b.h>
#include <Fonts/FreeSans24pt7b.h>
// Battery images
static const unsigned char PROGMEM image_battery_full_2_bits[] = {0x0f,0xff,0xfe,0x10,0x00,0x01,0x15,0x55,0x55,0x71,0x55,0x55,0x85,0x55,0x55,0x81,0x55,0x55,0x85,0x55,0x55,0x81,0x55,0x55,0x85,0x55,0x55,0x71,0x55,0x55,0x15,0x55,0x55,0x10,0x00,0x01,0x0f,0xff,0xfe};
String VarDatas = ""; // Variable qui contiendra la saisie après .....
String VarStock = "";
String VarIp = "";
String VarScom = "fournisseur"; // fournisseur dispo
String VarDate = "18/10" ; // date
String VarTime = "10:12" ; // heure
String Vinout = "STOCK"; // stock in
const int VarDatasLenght = 30;
char VarDatasChar[VarDatasLenght+1]; // IP adresse en char
void setup() {
// Initialize serial communication
{
Serial.begin(115200);
delay(200);
// Serial.println("ComVarIp");
send_datas_boot();
}
// Initialize the display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
// initialize the encoder
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
// Affichage d'une image au centre de l'écran
display.clearDisplay(); // Effaçage de la mémoire tampon de l'écran OLED
display.setTextSize(1); // Taille du texte
display.setTextColor(WHITE); // Couleur du texte
display.setCursor(2, 6); // Position du texte
display.setFont(&FreeSansBold6pt7b);
display.print("GESTION STOCK");
display.setCursor(37, 34); // Position du texte
display.setFont(&FreeSansBold6pt7b);
display.print("Initialisation ...");
display.setCursor(40, 54); // Position du texte
display.setFont(&FreeSansBold5pt7b);
display.print("F.Dimitri");
display.setCursor(92, 63); // Position du texte
display.setFont(&FreeSansBold5pt7b);
display.print("2024");
display.display();
delay(2000);
}
void loop() {
if(page == 0)
{
// Serial.println(F("page 0"));
// serial_wait();
boot_read();
}
else
{
if(page == 1)
{
show_page1();
//serial_wait();
read_datas();
}
}
}
void serial_wait()
{
String VarDatas = Serial.readStringUntil('\n');
VarDatas.trim();
}
void read_datas()
{
if (Serial.available())
{
VarDatas = Serial.readStringUntil('\n');
//Serial.print(VarDatas.length());
Serial.print(VarDatas);
//VarDatas.trim();
if (VarDatas.startsWith("VarStock="))
{
VarDatas.replace("VarStock=", ""); // Supprimer "Varstock="
VarDatas.toCharArray(VarDatasChar, VarDatas.length() +1);
Serial.println(F("Commande 'VarStock' détectée. Donnée extraite :")); //
Serial.println(VarDatas);
VarStock = VarDatas ;
Serial.println(F("VarStock est :")); //
Serial.println(VarStock);
Serial.println(F("le script continue !!!!"));
}
else
if (VarDatas.startsWith("VarDate="))
{
VarDatas.replace("VarDate=", ""); //
VarDatas.toCharArray(VarDatasChar, VarDatas.length() +1);
Serial.println(F("Commande 'VarDate' détectée. Donnée extraite :")); //
Serial.println(VarDatas);
VarDate = VarDatas ;
Serial.println(F("VarDate est :")); //
Serial.println(VarDate);
Serial.println(F("le script continue !!!!"));
}
else
{
// Si la saisie n'est pas "VarIp=", afficher un message et recommencer
Serial.println(F("Ce n'est pas une commande valide. Essayez encore..."));
VarDatas = ""; // Réinitialiser la chaîne pour recommencer
}
}
}
void boot_read()
{
if (Serial.available())
{
VarDatas = Serial.readStringUntil('\n');
VarDatas.trim();
if (VarDatas.startsWith("VarIp="))
{
VarDatas.replace("VarIp=", ""); // Supprimer "VarIp="
VarDatas.toCharArray(VarDatasChar, VarDatas.length() +1);
Serial.println(F("Commande 'VarIp' détectée. Donnée extraite :"));
VarIp = VarDatas ;
display.clearDisplay();
display.setTextSize(1); // Taille du texte
display.setTextColor(WHITE); // Couleur du texte
display.setCursor(2, 12); // Position du texte
display.setFont(&FreeSansBold6pt7b);
display.print("GESTION STOCK");
display.setCursor(40,40); // Position du texte
display.setFont(&FreeSansBold6pt7b);
display.print(VarIp);
display.setCursor(8,40); // Position du texte
display.setFont(&FreeSansBold5pt7b);
display.print("IP : ");
display.display();
page = 1 ;
Serial.println(F("page 1"));
VarDatas == "";
delay(2000);
display.clearDisplay();
}
}
}
void send_datas_boot()
{
Serial.println("ComVIp");
delay(1000);
Serial.println("ComLStock");
delay(1000);
Serial.println("ComVScom");
delay(1000);
Serial.println("ComVDate");
delay(1000);
Serial.println("ComVTime");
}
void show_page1()
{
display.clearDisplay();
display.drawLine(0, 15, 127,15, WHITE); // Ligne horizontale haut
display.setFont(&FreeSansBold8pt7b);
display.setCursor(1,10); // Position date
display.print(VarDate);
display.setCursor(48,10); // Position time
display.print(VarTime);
display.drawBitmap(104, 0, image_battery_full_2_bits, 24, 13, SSD1306_WHITE); // position batterie full
display.setFont(&FreeSansBold5pt7b);
display.setCursor(2,24); // Position
display.print("Stock :");
display.setCursor(40,24); // Position MAT
display.print(VarScom);
display.setCursor(2,40); // Position STOCK
display.setFont(&FreeSansBold8pt7b);
display.print(VarStock);
display.drawLine(0, 46, 127,46, WHITE); // Ligne horizontale bas
display.setFont(&FreeSansBold5pt7b);
display.setCursor(2,58); // Position matière
display.print(Vinout);
display.display();
}