Bonjour, je suis entrain de réaliser une petite machine pour controler le ph de mon eau d'aquarium sur une mega2560. C'est plutot en bonne voie mais un ENORME probleme survient, que je n'arrive pas à résoudre.
J'ai pas mal de classes en c++, ci dessous une partie du code principal que j'upload. J'ai mis le .ino au complet en piece jointe.
Lorsque je rajoute la ligne Serial.println("------------------------------"); n'importe ou dans le loop, l'arduino ne démarre plus. Cela est vrai avec d'autre instructions, notamment des functions contenues dans mes libraries.
J'ai un autre problème, dans les menus menuTankCapacity et menuTime, qui sont pourtant de type différent, le texte ne s'affiche plus sur l'écran mais les boutons sont bien présent et actif. Pourtant ils marchaient très bien avant, et d'autres menus utilisent les mm classes et sont opérationels.
Je pense que ces 2 problemes sont liés et doivent venir d'un probleme d'allocation de mémoire qui viens écraser des bouts de codes ou je ne sais quoi. Je ne suis pas un programmeur pro, je fais sur mon temps libre alors mes connaissances sont un peu limitées. Apres compilation j'ai ca comme retour,
Binary sketch size: 55,138 bytes (of a 258,048 byte maximum)
Estimated used SRAM memory: 6,208 bytes (of a 8192 byte maximum)
apparement y'a encore de la place !
Si vous voulez voir mes classes je les rajouterai en piece jointe. Merci à la personne qui sera motivée pour foutre son nez dans mon code
#include <Time.h> // Time lib
#include <DS1307RTC.h> // RTC lib
#include <Wire.h> // RTC lib
#include <EEPROM.h>
#include <SPI.h>
#include <SD.h>
#include <stdlib.h>
//#include <avr/wdt.h> //reboot library
#include "Dbug.h"
#include "MyFunc.h"
#include "MyLiquidCrystal.h"
#include "MyLcd.h"
#include "Button.h"
#include "ButtonsManager.h"
#include "LcdMenu.h"
#include "LcdMenuInput01.h"
#include "LcdMenuCalib.h"
#include "Queue.h"
#include "Ph.h"
#include "PhValue.h"
#include "Ec.h"
#include "LcdMenuInputTime.h"
#include "TimerTime.h"
#include "Memory.h"
#include "Pump.h"
// =====================================================================================
// == VARIABLES ==
// =====================================================================================
MyLiquidCrystal lcd(23,25,27,29,31,33);
MyLcd myLcd(lcd);
// General Variables
const int OnLedPin = 3;
Memory dataManager(myLcd,false);
boolean timeRTCAvailable ;
int loopCount;
// Menus Variables
int btnIndex; // btnIndex 1=Menu/Ok 2=Exit 3=Plus 4=Minus
ButtonsManager btnManager("Menu/Ok",28,"Exit",22,"Plus",26,"Minus",24);
int menuGIndex;
int menuIndex;
String menuGeneralText[] = { "PH settings", "EC settings", "Tank volume", "Time settings" };
LcdMenu menuGeneral(myLcd, btnManager, "General", menuGeneralText, sizeof(menuGeneralText)/sizeof(String),30);
// PH Variables
const int PhPin = A10;
Ph phManager(PhPin,10,5,8,9); // pump ph- pin=8, pump ph+ pin=9
int phManagerReturnCode ;
String menuPhText[] = { "Ph7 calibration", "Ph4 calibration", "Goal settings", "Delta settings", "Ph- Sol", "Ph+ Sol" };
LcdMenu menuPh(myLcd, btnManager, "Ph", menuPhText, sizeof(menuPhText)/sizeof(String),180);
LcdMenuInput01 menuPhGoal(myLcd, btnManager, "PH Goal", "Exit", "-/+", "Ok", "Goal= ", 5, 100, 180);
LcdMenuInput01 menuPhDelta(myLcd, btnManager, "PH Delta", "Exit", "-/+", "Ok", "Delta= ", 1, 100, 180);
LcdMenuInput01 menuPhMinusSol(myLcd, btnManager, "PH- sol", "Exit", "-/+", "Ok", "Ph-= ", 5, 100, 180);
LcdMenuInput01 menuPhPlusSol(myLcd, btnManager, "PH+ sol", "Exit", "-/+", "Ok", "Ph+= ", 5, 100, 180);
LcdMenuCalib menuPh7Calib(myLcd, btnManager, phManager, "PH7 calibration", "Ph 7.0=", ph7CalibValueDefault, 1800);
LcdMenuCalib menuPh4Calib(myLcd, btnManager, phManager, "PH4 calibration", "Ph 4.0=", ph4CalibValueDefault, 1800);
// EC Variables
const int ecPin = A11;
Ec ecManager(ecPin);
String menuEcText[] = { "Ec calibration", "Ec Goal", "Ec delta", "Ec Sol"};
LcdMenu menuEc(myLcd, btnManager, "Ec", menuEcText, sizeof(menuEcText)/sizeof(String),180);
LcdMenuInput01 menuEcGoal(myLcd, btnManager, "EC Goal", "Exit", "-/+", "Ok", "Goal= ", 5, 100, 180);
LcdMenuInput01 menuEcDelta(myLcd, btnManager, "EC Delta", "Exit", "-/+", "Ok", "Delta= ", 5, 100, 180);
LcdMenuInput01 menuEcSol(myLcd, btnManager, "EC sol", "Exit", "-/+", "Ok", "Ec= ", 5, 100, 180);
// Tank Variables
int tankVolume = 10;
LcdMenuInput01 menuTankCapacity(myLcd, btnManager, "Tank capacity", "Exit", "-/+", "Ok", "Liters= ", 1, 1, 180);
// TimeMenu Variables
TimerTime timer;
String menuTimeText[] = { "Date set", "Time set", "Timer programation" };
LcdMenu menuTime(myLcd, btnManager, "Time", menuTimeText, sizeof(menuTimeText)/sizeof(String),180);
LcdMenuInputTime menuTimeSet(myLcd, btnManager, "Time set menu", 180);
LcdMenuInputTime menuDateSet(myLcd, btnManager, "Date set menu", 180);
LcdMenuInputTimer menuTimerSet(myLcd, btnManager, "Timer set menu", 180);
// =====================================================================================
// == FUNCTIONS ==
// =====================================================================================
// Arduino functions ===================================================================
void setup() {
Serial.begin(9600);
myLcd.Clear();
myLcd.ShowChar(".START.",6,1);
Serial.println("----Start-----");
// digitalWrite(OnLedPin,HIGH);
delay(1000);
timeRTCAvailable = TimeTest();
dataManager.SetTimeAvailable(timeRTCAvailable);
dataManager.SDInit();
if (!dataManager.IsFirstStart()) {
Serial.println("not first start");
phManager.values = dataManager.ReadPh();
timer = dataManager.ReadTimer();
} else {
Serial.println("first start");
dataManager.SavePh(phManager.values);
dataManager.SaveTimer(timer);
dataManager.SetFirstStart();
}
//tankVolume = dataManager.ReadTank();
if (dataManager.IsSDActive()){
dataManager.Log("Event",1);
}
ShowMonitor();
loopCount = 0;
}
void loop()
{
Serial.println("------------------------------"); /// <--------- PROBLEME QD JE RAJOUTE CETTE LIGNE, ARDUINO NE VEUT PLUS DEMARRER
loopCount++;
btnIndex = btnManager.WaitForButtonRelease(1000);
if (btnIndex == 1) {
StartMenus();
ShowMonitor();
btnIndex=0;
}
phManager.ReadAndSet(500);
// add inst ph value to the queue
if (loopCount >1) {
phManager.Add();
loopCount = 0;
}
phManager.queue.Dbug();
phManager.TestAndInject(tankVolume);
RefreshMonitor();
}
// RTC Time init Test =================================================================
boolean TimeTest() {
myLcd.Clear();
tmElements_t tm;
....
HydroGuard_0_9.ino (10.3 KB)