Commit 7e91f6a3 authored by Vrignault's avatar Vrignault

Version 0.65

parent 021954f6
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -24,6 +24,7 @@
#include "Const.h"
#include <EEPROM.h>
#include <Snooze.h>
#include <Wire.h>
#include "SdFat.h"
#include "TimeLib.h"
#include "CModeGeneric.h"
......@@ -85,6 +86,9 @@ extern SdFatSdio sd;
// Pour la récup de l'heure RTC au réveil
extern time_t getTeensy3Time();
// Gestionnaire du fichier LogPR.txt
extern LogFile logPR;
// Drivers du mode veille
SnoozeDigital digital;
SnoozeAlarm alarm;
......@@ -98,6 +102,7 @@ CGenericMode* CreateNewMode(
int idxMode // New mode of operation index
)
{
logPR.SetbConsole( true);
CGenericMode* pNewMode = NULL;
// Dynamic creation of operating modes
// First, destruction of the previous mode to free memory
......@@ -130,7 +135,8 @@ CGenericMode* CreateNewMode(
uint32_t FreeRam = ramMonitor.free();
uint32_t HeapUsed = ramMonitor.heap_used();
uint32_t FreeRamP = FreeRam * 100 / TotalRam;
LogFile::AddLog( LLOG, "Total Ram %d, free Ram %d (%d%%), heap used %d", TotalRam, FreeRam, FreeRamP, HeapUsed);
LogFile::AddLog( LLOG, "Total Ram %d, free Ram %d (%d%%), heap used %d, stack used %d, unallocated %d", TotalRam, FreeRam, FreeRamP, HeapUsed, ramMonitor.stack_used(), ramMonitor.unallocated());
logPR.SetbConsole( CModeGeneric::bDebug);
return pNewMode;
}
......@@ -186,7 +192,10 @@ void CModeGeneric::SetDefault()
paramsOperateur.bExp10 = true; // Fichiers wav en expension de temps x10
paramsOperateur.iNbDetect = 3; // Nombre de détections sur 8 FFT pour déclarer une activitée (de 1 à 8)
paramsOperateur.iUtilLed = NOLED; // Type d'utilisation de la LED (UTILLED)
paramsOperateur.iModeRecord = RECAUTO; // Type de protocole
if (CModeGeneric::GetRecorderType() == ACTIVE_RECORDER)
paramsOperateur.iModeRecord = PHETER; // Mode hétérodyne
else
paramsOperateur.iModeRecord = RECAUTO; // Mode énregistrement automatique
paramsOperateur.iFreqFiltreHighPass = 0; // Fréquence du filtre passe haut
paramsOperateur.iLanguage = LENGLISH; // Langue anglaise par défaut
paramsOperateur.iScreenType = ST_SSD1306; // Type d'écran utilisé
......@@ -194,6 +203,7 @@ void CModeGeneric::SetDefault()
paramsOperateur.iSeuilAbs = -90; // Seuil de détection absolue
paramsOperateur.bAutoHeter = false; // Heterodyne mode (manual)
paramsOperateur.bAutoRecH = false; // Heterodyne Recording mode (manual)
paramsOperateur.iPeriodTemp = 600; // Reading period of the temperature/humidity (10mn)
strcpy( paramsOperateur.sHDebut, "22:00"); // Heure de début d'enregistrement du style hh:mm
strcpy( paramsOperateur.sHFin, "06:00"); // Heure de fin d'enregistrement du style hh:mm
strcpy( paramsOperateur.sPrefixe, "PaRec"); // Préfixe des fichiers wav (5 caractères)
......@@ -264,9 +274,14 @@ bool CModeGeneric::StaticReadParams()
paramsOperateur.iSeuilAbs = -90;
// Init de la langue des modificateurs
CGenericModifier::SetLanguage( paramsOperateur.iLanguage);
if (paramsOperateur.iModeRecord != MPROPFX)
if (paramsOperateur.iModeRecord != PHETER and paramsOperateur.iModeRecord != RECAUTO and paramsOperateur.iModeRecord != MPROPFX)
{
// Par défaut, on est toujours sans protocole au démarrage sauf pour le protocole Point Fixe
paramsOperateur.iModeRecord = RECAUTO;
if (CModeGeneric::GetRecorderType() == ACTIVE_RECORDER)
paramsOperateur.iModeRecord = PHETER; // Mode hétérodyne
else
paramsOperateur.iModeRecord = RECAUTO; // Mode énregistrement automatique
}
if (paramsOperateur.bAutoHeter != false and paramsOperateur.bAutoHeter != true)
paramsOperateur.bAutoHeter = false;
if (paramsOperateur.bAutoRecH != false and paramsOperateur.bAutoRecH != true)
......@@ -279,6 +294,8 @@ bool CModeGeneric::StaticReadParams()
paramsOperateur.bExp10 = false;
if (paramsOperateur.iNbDetect < 1 or paramsOperateur.iNbDetect > 8)
paramsOperateur.iNbDetect = 4;
if (paramsOperateur.iPeriodTemp < 10 or paramsOperateur.iPeriodTemp > 3600)
paramsOperateur.iPeriodTemp = 600;
if (strlen(paramsOperateur.sHDebut) != 5 or paramsOperateur.sHDebut[2] != ':')
strcpy( paramsOperateur.sHDebut, "22:00");
if (strlen(paramsOperateur.sHFin) != 5 or paramsOperateur.sHFin[2] != ':')
......@@ -541,6 +558,46 @@ bool CModeGeneric::CheckBatteries()
return bReturn;
}
//-------------------------------------------------------------------------
//! \brief Retourne true si la sonde de température est présente
bool CModeGeneric::IsTempSensor()
{
if (!bTestSonde)
{
// Test présence sonde de température
bTestSonde = true;
bSonde = false;
Wire.beginTransmission( AddrBME280);
byte error = Wire.endTransmission();
if (error == 0)
bSonde = true;
}
return bSonde;
}
//-------------------------------------------------------------------------
//! \brief Print Ram usage
//! \param pTxt Sting to print
void CModeGeneric::PrintRamUsage(
char *pTxt
)
{
// Print ram usage after new (for Teensy 3.6), if used heap is not identical after a same mode, delete is missing....
//uint32_t TotalRam = 262144;
uint32_t TotalRam = ramMonitor.total();
uint32_t FreeRam = ramMonitor.free();
uint32_t TotalHeap = ramMonitor.heap_total();
uint32_t HeapUsed = ramMonitor.heap_used();
uint32_t HeapFree = ramMonitor.heap_free();
uint32_t StackUsed = ramMonitor.stack_used();
uint32_t FreeRamP = FreeRam * 100 / TotalRam;
int32_t unallocated = ramMonitor.unallocated();
logPR.SetbConsole( true);
LogFile::AddLog( LLOG, "%s TOTAL RAM %d, FREE RAM %d (%d%%), HEAP total %d, used %d, free %d, STACK used %d, unallocated %d",
pTxt, TotalRam, FreeRam, FreeRamP, TotalHeap, HeapUsed, HeapFree, StackUsed, unallocated);
logPR.SetbConsole( CModeGeneric::bDebug);
}
// Indique un démarrage en mode debug (touche Up pressée)
bool CModeGeneric::bDebug = false;
......@@ -563,6 +620,11 @@ int CModeGeneric::iFinMinutes = -1;
// Recorder type
int CModeGeneric::iRecorderType = PASSIVE_RECORDER;
// Indique que le teste de présence de la sonde a été effectué
bool CModeGeneric::bTestSonde = false;
// Indique la présence de la sonde de température
bool CModeGeneric::bSonde = false;
/*-----------------------------------------------------------------------------
Classe de gestion du mode veille
Passe en veille après 15s et, sur fin de veille, repasse en mode enregistrement
......@@ -735,4 +797,3 @@ void CModeVeille::MiseEnVeille()
iNewMode = MRECORD;
}
}
......@@ -116,6 +116,17 @@ public:
int iPin
);
//-------------------------------------------------------------------------
//! \brief Retourne true si la sonde de température est présente
static bool IsTempSensor();
//-------------------------------------------------------------------------
//! \brief Print Ram usage
//! \param pTxt Sting to print
void PrintRamUsage(
char *pTxt
);
protected:
//! Paramètres opérateurs
static ParamsOperator paramsOperateur;
......@@ -134,6 +145,11 @@ protected:
//! Recorder type
static int iRecorderType;
//! Indique que le teste de présence de la sonde a été effectué
static bool bTestSonde;
//! Indique la présence de la sonde de température
static bool bSonde;
};
//-------------------------------------------------------------------------
......@@ -180,4 +196,3 @@ protected:
};
#endif
This diff is collapsed.
......@@ -45,10 +45,11 @@ enum IDXPARAMS {
IDXFECH , //!< Fréquence d'échantillonnage
IDXGNUM , //!< Gain numérique (6, 12, 18, 24dB)
IDXFILT , //!< Filtre (O/N)
IDXHPFILT, //!< Filtre passe haut
IDXHPFILT, //!< Filtre passe haut (0-25kHz)
IDXEXP , //!< Expansion de temps x10 (O/N)
IDXPREF , //!< Préfixe des fichiers Wav (PRec_)
IDXNDET , //!< Nombre de détections (1-8)
IDXPETM , //!< Période de mesure température
IDXLANG , //!< Langue utilisée
IDXDEF , //!< Paramètres par défaut
IDXLED //!< Utilisation de la LED
......
......@@ -17,6 +17,7 @@
*/
#include "SdFat.h"
#include <U8g2lib.h>
#include <algorithm>
#include "CModePlayer.h"
// Screen manager
......@@ -235,8 +236,9 @@ int CModePlayer::KeyManager(
StopRead();
break;
case K_MODEA:
// Swap to Heterodyne mode
iNewMode = 1;
// Player is only in Active Recorder
// Swap to parameters mode : Record mode -> Player -> Parameters -> Record Mode
iNewMode = MPARAMS;
break;
default:
// To manage selected file
......@@ -452,4 +454,3 @@ void CModePlayer::ListFiles()
}
}
}
This diff is collapsed.
......@@ -60,9 +60,32 @@ public:
//! \brief Gestion des tâches de fonds
virtual void OnLoop();
//-------------------------------------------------------------------------
//! \brief Lecture du capteur de température
void LectureTemperature();
//-------------------------------------------------------------------------
//! \brief Retourne la température en degré
int GetTemperature() { return (int)cTemp;};
//-------------------------------------------------------------------------
//! \brief Retourne l'humidité en %
int GetHumidity() {return (int)humidity;};
//-------------------------------------------------------------------------
//! \brief Mémorisation de la température en début d'enregistrement d'un fichier wav
void MemoTemperature();
protected:
//! Gestionnaire acquisition et enregistrement
CRecorder *pRecorder;
//! Température
float cTemp;
//! Humidité
float humidity;
//! Pour mesure la température toute les 10mn
unsigned long uiTimeTemp;
};
//-------------------------------------------------------------------------
......@@ -311,4 +334,3 @@ protected:
};
#endif
......@@ -25,6 +25,9 @@
// Screen manager
extern U8G2 *pDisplay;
// Gestionnaire du fichier LogPR.txt
extern LogFile logPR;
// Strings for parameters
const char formIDXHMODEH[] = "[&$$$]";
const char *txtIDXHMODEH[] = {"[%s]",
......@@ -102,7 +105,9 @@ void CModeHeterodyne::CreateRecorder()
Serial.println("CModeHeterodyne::CreateRecorder");
pRecorder = new CRecorderH( &paramsOperateur, NBBUFFERRECORDH);
}
const char txtRamUsageHet[] = "Ram after CModeHeterodyne::BeginMode";
//-------------------------------------------------------------------------
// Beginning of the mode
void CModeHeterodyne::BeginMode()
......@@ -110,7 +115,7 @@ void CModeHeterodyne::BeginMode()
// Call of the parent method
CModeGenericRec::BeginMode();
// Set some parameters
paramsOperateur.uiFe = FE384KHZ; // We impose 384kHz
//paramsOperateur.uiFe = FE384KHZ; // We impose 384kHz
paramsOperateur.bTypeSeuil = false; // Relative threshold
//paramsOperateur.uiGainNum = GAIN0dB; // No digital gain
paramsOperateur.bFiltre = false; // No low pass filter or linear filter (using DSP)
......@@ -152,6 +157,11 @@ void CModeHeterodyne::BeginMode()
case FE500KHZ: uiFe = 500000; break;
}
uiFFTChannel = (uiFe/2)/(FFTLEN/2);
// Print Ram usage
PrintRamUsage( (char *)txtRamUsageHet);
logPR.SetbConsole( true);
LogFile::AddLog( LLOG, "Size of Record buffer %d bytes (int16_t * MAXSAMPLE %d * Nb Buffer %d)", pRecorder->GetSizeoffSamplesRecordBuffer(), MAXSAMPLE, pRecorder->GetiNbSampleBuffer());
logPR.SetbConsole( CModeGeneric::bDebug);
// On lance l'acquisition
pRecorder->StartAcquisition();
// Autorisation audio
......@@ -168,7 +178,7 @@ void CModeHeterodyne::EndMode()
// Call of the parent method
CModeGenericRec::EndMode();
// We restore the operator parameters
ReadParams();
//ReadParams();
}
//-------------------------------------------------------------------------
......@@ -178,12 +188,15 @@ void CModeHeterodyne::AddPrint()
// Set recording status
if (pRecorder->IsRecording())
{
// Recording
iRecordMode = PREC;
LstModifParams[IDXHTIMER]->SetbValid( true);
if (iRecordMode != PREC)
{
// Recording
iRecordMode = PREC;
LstModifParams[IDXHTIMER]->SetbValid( true);
}
iRecordTime = (int)pRecorder->GetRecordDuration();
}
else
else if (iRecordMode == PREC)
{
// not recording
iRecordMode = PBREAK;
......@@ -295,14 +308,14 @@ void CModeHeterodyne::AddPrint()
pDisplay->setDrawColor(1);
// Si sonde présente, affichage temérature et humidité
if (pRecorder->IsTempSensor())
if (IsTempSensor())
{
//pDisplay->setFont(u8g2_font_micro_mr); // Hauteur 5
pDisplay->setFont(u8g2_font_4x6_tf); // Hauteur 5
sprintf( sTemp, "%+02d%c", pRecorder->GetTemperature(), 176);
sprintf( sTemp, "%+02d%c", GetTemperature(), 176);
pDisplay->setCursor( 84, 0);
pDisplay->print( sTemp);
sprintf( sTemp, "%2d%%", pRecorder->GetHumidity());
sprintf( sTemp, "%2d%%", GetHumidity());
pDisplay->setCursor( 84, 7);
pDisplay->print( sTemp);
}
......@@ -357,14 +370,20 @@ int CModeHeterodyne::KeyManager(
case K_MODEB:
// We go into recording mode or we stop it
if (iRecordMode == PBREAK and pRecorder->IsRecording() == false)
{
// Beging recording
pRecorder->StartRecording();
iRecordMode = PREC;
}
else if (iRecordMode == PREC and pRecorder->IsRecording())
{
// Stop recording
pRecorder->StopRecording();
iRecordMode = PBREAK;
}
break;
case K_MODEA:
// Swap to player mode : Heterodyne -> Player -> Parameters -> Heterodyne
// Swap to player mode : Record mode -> Player -> Parameters -> Record Mode
iNewMode = MPLAYER;
break;
}
......@@ -485,4 +504,3 @@ void CGraphe128kHz::PrintGraphe(
uiNextScroll = millis() + uiTimeScroll;
}
}
This diff is collapsed.
......@@ -29,6 +29,9 @@
// Avec gain numérique automatique sur le signal hétérodyne
//#define AUTOGAINHETERODYNE
// Avec ouverture d'un fichier wav temporaire pour aller vite lors du démarrage d'un enregistrement
#define STARTWAVETEMP
//! Nombre de coefficients pour les filtres proposés
int const NTaps = 32;
......@@ -92,6 +95,41 @@ const double F48kHzMur20kHz[32] = {
4.46876794557097e-007, 4.39514850251715e-005, -1.46875949163278e-005, 1.27325622365666e-006
};
//! Filtre passe bas à 10kHz de fréquence de coupure pour une Fe à 250kHz pour l'hétérodyne avant décimation
const double FLowH250kHz[32] = {
0, -8.76982700100404e-006, -0.000120405661843918, -0.000600846559148305,
-0.00178698703915767, -0.00397767104940221, -0.00703553873300293, -0.00993416648005148,
-0.0105135816507353, -0.00573589641210512, 0.00741805484809177, 0.0305895052683988,
0.0627414670101475, 0.0995906541061665, 0.134253959034274, 0.159088772815254,
0.168119828855556, 0.159088772815254, 0.134253959034274, 0.0995906541061665,
0.0627414670101476, 0.0305895052683988, 0.00741805484809178, -0.00573589641210513,
-0.0105135816507353, -0.00993416648005148, -0.00703553873300293, -0.0039776710494022,
-0.00178698703915767, -0.000600846559148302, -0.000120405661843928, -8.76982700100404e-006
};
//! Filtre passe bas à 10kHz de fréquence de coupure pour une Fe à 384kHz pour l'hétérodyne avant décimation
const double FLowH384kHz[32] = {
0, 1.09183854272492e-006, 1.95663683362794e-005, 0.000123921275887551,
0.000469157613473929, 0.00136115675514959, 0.00328643876522185, 0.00688570770501951,
0.0128460743672354, 0.0217097891395326, 0.0336348383359605, 0.0481798353421141,
0.0642023365472217, 0.0799414148403207, 0.0933018440039068, 0.102285578406378,
0.105454660015567, 0.102285578406378, 0.0933018440039067, 0.0799414148403207,
0.0642023365472217, 0.0481798353421142, 0.0336348383359605, 0.0217097891395326,
0.0128460743672354, 0.00688570770501951, 0.00328643876522185, 0.00136115675514958,
0.000469157613473929, 0.000123921275887551, 1.9566368336281e-005, 1.09183854272492e-006
};
//! Filtre passe bas à 10kHz de fréquence de coupure pour une Fe à 500kHz pour l'hétérodyne avant décimation
const double FLowH500kHz[32] = {
0, 2.64204097298983e-006, 3.75474590792412e-005, 0.000203128131958237,
0.00068505533377474, 0.00181850922436129, 0.00409232190872261, 0.00810100007415162,
0.0144300030685114, 0.0234812358920999, 0.0352752740150054, 0.0492916902564005,
0.064415167000541, 0.0790348387634813, 0.0913003794793793, 0.0994847927367374,
0.102360955123779, 0.0994847927367374, 0.0913003794793792, 0.0790348387634813,
0.064415167000541, 0.0492916902564005, 0.0352752740150054, 0.0234812358920999,
0.0144300030685114, 0.00810100007415163, 0.00409232190872261, 0.00181850922436129,
0.000685055333774741, 0.000203128131958236, 3.75474590792442e-005, 2.64204097298983e-006
};
//!< Nombre max de coefficients pour le DSP
#define FIR_MAX_COEFFS 128
......@@ -147,10 +185,6 @@ class CRecorder
//! Retourne true si arrêt OK
bool StopRecording();
//-------------------------------------------------------------------------
//! \brief Mémorisation de la température en début d'enregistrement d'un fichier wav
void MemoTemperature();
//-------------------------------------------------------------------------
//! \brief Stoppe ou relance l'acquisition
//! \param bAcq true pour lancer l'acquisition, false pour la suspendre
......@@ -307,22 +341,14 @@ class CRecorder
//! \brief Retourne la durée de l'enregistrement courant en secondes
uint32_t GetRecordDuration();
//-------------------------------------------------------------------------
//! \brief Lecture du capteur de température
void LectureTemperature();
//-------------------------------------------------------------------------
//! \brief Retourne true si la sonde de température est présente
bool IsTempSensor() {return bSonde;};
//-------------------------------------------------------------------------
//! \brief Retourne la température en degré
int GetTemperature() { return (int)cTemp;};
//-------------------------------------------------------------------------
//! \brief Retourne l'humidité en %
int GetHumidity() {return (int)humidity;};
//----------------------------------------------------
//! \brief Retourne la taille du buffer d'enregistrement
uint32_t GetSizeoffSamplesRecordBuffer() {return sizeof(int16_t)*MAXSAMPLE*iNbSampleBuffer;};
//----------------------------------------------------
//! \brief Retourne le nombre de buffer d'enregistrement
uint32_t GetiNbSampleBuffer() {return iNbSampleBuffer;};
protected:
//-------------------------------------------------------------------------
//! \brief Ouverture du fichier wav courant
......@@ -374,6 +400,10 @@ class CRecorder
//! Gestionnaire de fichiers wav
CWaveFile wavefile;
#ifdef STARTWAVETEMP
//! Nom du fichier wav temporaire
char sWaveFileTemp[80];
#endif
//! Nom du fichier wav
char sWaveFileName[80];
......@@ -494,15 +524,6 @@ class CRecorder
int32_t scaledPreviousFilterOutput;
static int32_t previousSample;
static int32_t previousFilterOutput;
//! Indique la présence de la sonde de température
bool bSonde;
//! Température
float cTemp;
//! Humidité
float humidity;
//! Pour mesure la température toute les 10mn
unsigned long uiTimeTemp;
};
//-------------------------------------------------------------------------
......@@ -553,6 +574,11 @@ class CRecorderH: public CRecorder
virtual void Traitementheterodyne(
int16_t sample);
//----------------------------------------------------
//! \brief Initialisation du filtre passe bas du signal hétérodyne avant décimation
//! \return Retourne false en cas d'erreur
bool InitFiltreH();
#ifdef AUTOGAINHETERODYNE
//-------------------------------------------------------------------------
//! \brief Initialisation du gain numérique hétérodyne
......@@ -592,7 +618,8 @@ class CRecorderH: public CRecorder
Restitution restitution;
//! Pour la mesure la température toute les 10s
unsigned long uiTimeTempH;
//! Indice du filtre passe bas hétérodyne
unsigned int uiFiltFir;
};
#endif // CRECORDER_H
......@@ -285,4 +285,3 @@ void CWaveFile::SetDecimation(
if (iDecim >= 1 and iDecim <= 3)
iDecimation = iDecim;
}
......@@ -101,7 +101,18 @@
* - If CPU Speed is less than 144MHz, max sample frequency is 250 KHz and linear filter always false
* - Delivery of software for 3 processor frequencies: 144MHz for common use, 180MHz for lossless operation at 500kHz and 48MHz for reduced power consumption but limited to 250kHz sampling frequency
*/
#define VERSION "V0.64"
/* V0.65
* - Taking into account the probes without the humidity information
* - Migration of the temperature/humidity probe management in the CModeGenericRec class except IsTempSensor in CGenericMode class
* - Adding and managing a parameter of the reading period of the temperature/humidity probe (10/3600 second step 10)
* - If probe T / H present, information in the log as well as the reading period
* - Adding CModeGeneric::PrintRamUsage to monitor memory and storage of the memory information in the log at the start of the recording
* - Clarification of the linear filter / low pass
* - Using a temporary wave file to speed up the recording start (Open file long time with SD card > 16 GO)
* - In Active Recorder, use the same change mode button for recording modes other than heterodyne
* - Some hidden parameters in heterodyne mode
*/
#define VERSION "V0.65"
//! \enum TYPES_TEENSY_RECORDERS
//! \brief List of Teensy Recorder types
......@@ -173,6 +184,16 @@ enum GAINNUM {
MAXGAIN = 5
};
/* In Passive Recorder
* Start -> Auto record -> Clic -> Parameters -> Return to record menu -> according record mode -> Auto Record -> Clic -> Parameters
* -> Protocol XXX -> Clic -> Parameters
* -> Microphone test -> Clic -> Parameters
* In Active Recorder
* Start -> Heterodyne -> Clic Mode -> Player -> Clic Mode -> Parameters -> Clic Mode -> according record mode -> Heterodyne -> Clic Mode -> Player...
* -> Auto Record -> Clic Mode -> Player...
* -> Protocol XXX -> Clic Mode -> Parameters...
* -> Microphone test -> Clic Mode -> Parameters...
*/
//! \enum PROTOCOLES
//! \brief Mode de fonctionnement de l'enregistrement
enum PROTOCOLES {
......@@ -181,8 +202,8 @@ enum PROTOCOLES {
PROTROUT = 2, //!< Protocole Vigie-Chiro routier
PROTFIXE = 3, //!< Protocole Vigie-Chiro point fixe
PTSTMICRO = 4, //!< Protocole test micro
MAXPROT = 5, //!< Nombre max de mode de fonctionnement de l'enregistrement en mode Passive recorder
PHETER = 6 //!< Mode hétérodyne
PHETER = 5, //!< Mode hétérodyne
MAXPROT = 6 //!< Nombre max de mode de fonctionnement de l'enregistrement
};
//! \enum UTILLED
......@@ -234,6 +255,7 @@ struct ParamsOperator
int iSeuilAbs; //!< Seuil de détection absolue
bool bAutoHeter; //!< Manual (false) / Auto (true) heterodyne mode
bool bAutoRecH; //!< Manual (false) / Auto (true) heterodyne recording mode
int iPeriodTemp; //!< Reading period of the temperature/humidity (10 to 3600 seconds)
};
//! Temps min en ms des rebonds des boutons
......@@ -270,6 +292,9 @@ struct ParamsOperator
//! Définition de la broche de mesure de la batterie externe
#define PINA1_EXT 1
// BME280 I2C address 0x76 (108)
#define AddrBME280 0x76
//! Taille de la FFT (ATTENTION la fonction de calcul FFT utilisée - arm_cfft_radix4_q15 - ne fonctionne pas pour 512 échantillons)
#define FFTLEN 256
......
......@@ -300,7 +300,7 @@ int CGenericMode::KeyManager(
int i, iNbValid = 0;
if (idxSelParam <= iLastIdxLine - iMiddle)
{
Serial.print("T");
//Serial.print("T");
iFirstVisibleIdxLine = -1;
for (i=idxSelParam; i>=iFirstIdxLine; i--)
{
......@@ -335,7 +335,7 @@ int CGenericMode::KeyManager(
}
else
{
Serial.print("B");
//Serial.print("B");
iLastVisibleIdxLine = -1;
for (i=iLastIdxLine; i>=iFirstVisibleIdxLine; i--)
{
......
......@@ -188,6 +188,11 @@ public:
//! \brief Returns the format string
const char **GetFormat() {return pFormat;};
//-------------------------------------------------------------------------
//! \brief Set the format string
//! \param pForm Parameter format like " Min Freq %04dkHz"
const void SetFormat(const char **pForm) {pFormat = pForm;};
//-------------------------------------------------------------------------