1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
/*Test EEPROM et Struct
*24 avril 2021
*le but est de paramétrer le site et les produits à partir de l'EEPROM
*si l'info n'existe pas, la demander au serveur et l'enregistrer pour la suite.
*1 site et 3 produits ensuite les clients qui se connectent.
*/
#include <EEPROM.h>
#include <Ethernet2.h>
//#include <Arduino.h> ne semble pas utile ici
/** Le nombre magique et le numéro de version actuel */
static const unsigned long STRUCT_MAGIC = 123456769;
static const byte STRUCT_VERSION = 5;
/*j'ai essayé de stocker les déclaration dans un fichier extérieur
* aucune amélioration */
//#include "PAT.h"
/*structure principale du projet */
struct EPR_Site1 {
unsigned long magic;
byte struct_version;
IPAddress IP_S; //Serveur principal
IPAddress IP_E; //Serveur Erreur
IPAddress IP_L; //IP Local si pas de DHCP
boolean S_DHCP; //utiliser le DHCP local
int Port_S; //port Serveur
int Port_E; //port Erreurs
int ID_Site; //ID du site
char Nom_Site[25]; //Nom du site
char CA_Serv[15]; //Carte Service
};
/** L'instance de la structure, globale, car utilisé dans plusieurs endroits du programme */
EPR_Site1 E_Site1;
/*adresse de l'EEPROM de chaque structure*/
int Adr_Site=0;
void setup() {
Serial.begin(9600);
Serial.println();
Serial.println("------------------SETUP GO...");
Serial.println(freeRAM());
/* Récupére les données du programme en EEPROM*/
LireParamEEPROM(0);
Serial.println(F("------------------Affichage des infos recueillies"));
Serial.print(F("magic :"));Serial.println(E_Site1.magic);
Serial.print(F("version :"));Serial.println(E_Site1.struct_version);
Serial.print(F("IP serveur :"));Serial.println(E_Site1.IP_S);
Serial.print(F("IP_Erreur :"));Serial.println(E_Site1.IP_E);
//Serial.print(F("IP_Local :"));Serial.println(E_Site1.IP_L);
Serial.print(F("DHCP :"));Serial.println(E_Site1.S_DHCP);
Serial.print(F("Port Erreur :"));Serial.println(E_Site1.Port_E);
Serial.print(F("Port Serveur :"));Serial.println(E_Site1.Port_S);
Serial.print(F("ID Site :"));Serial.println(E_Site1.ID_Site);
Serial.print(F("Nom Site :"));Serial.println(E_Site1.Nom_Site);
Serial.print(F("Carte service :"));Serial.println(E_Site1.CA_Serv);
Serial.println("------------------c'est TOUT");
Serial.println(freeRAM());
}
void loop() {
// put your main code here, to run repeatedly:
}
/******************************************FONCTIONS
***************************************************
** Charge le contenu de la mémoire EEPROM dans la structure */
void LireParamEEPROM(byte TYPE) {
Serial.println("------------------Lecture EEPROM");
EEPROM.get(Adr_Site, E_Site1);
/*Détection d'une mémoire non initialisée*/
byte Erreur;
Erreur= E_Site1.magic != STRUCT_MAGIC;
if (Erreur) {
/*demander une connection complète au serveur*/
/*----------------------------------------simulation retour serveur pour les tests*/
IPAddress IPS(192,168,0,65);
IPAddress IPE(192,168,0,85);
IPAddress IPL(192,168,0,147);
int PortS=10007;
int PortE=10000;
/*enregistrement des données dans la structure*/
E_Site1.magic=STRUCT_MAGIC;
E_Site1.struct_version=5;
E_Site1.IP_S= IPS;
E_Site1.IP_E= IPE;
E_Site1.IP_L= IPL;
E_Site1.Port_S=PortS;
E_Site1.Port_E=PortE;
E_Site1.S_DHCP=1;
E_Site1.ID_Site=251;
strcpy(E_Site1.CA_Serv,"c21d54f2174ws");
strcpy(E_Site1.Nom_Site,"St Jean de Vedas");
/*sauvegarder les données en EEPROM*/
Serial.println("------------------écriture en EEPROM");
EEPROM.put(Adr_Site, E_Site1);
}else{
/*sinon on ne fait rien d'autre que lire les donnéeds en EEPROM*/
}
return;
}
int freeRAM()
{
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start: (int) __brkval);
} |
Partager