Commit cef42a45 authored by Sebastián Fernández's avatar Sebastián Fernández

herramienta para inicializar valores en EEPROM

parent e859fcda
/* Herramientas para configurar valores en EEPROm y calibrar
* Sebastian Fernandez
* sebfer@fing.edu.uy
*
* * Comandos
* leer valores eeprom : r
* guardar potencia forzada : p,potencia_raw_en_mW
* guardar potencia medida : s
* horas de encendido : h,decenas_minutos
* calibracion ganancia : g,ganancia
* calibracion offset : o,offset
*
*
*
* Plataformas:
* - ESP32 de ESPRESSIF
* En IDE seleccionar ESP32 Dev Module, CPU Freq, 240MHz
*
* * v0.1
*
* * LedControl library
* Instalarla y editar
* #include <avr/pgmspace.h>
* https://github.com/wayoda/LedControl
*
*
*/
#include <EEPROM.h>
#include "LedControl.h" // 8 digit 7 segment. MAX
/****************************************
* Platform parameters
****************************************/
const int tic_period = 100; //ms
// Baud rate for debug serial
#define SERIAL_DEBUG_BAUD 115200
char incomingByte = 0; // for incoming serial data
char inData[80];
int indexData = 0;
String readString;
// 7 segment
LedControl lc=LedControl(12,27,14,1);
// pin 12 is connected to the DIN pin
// pin 27 is connected to the CLK pin
// pin 14 is connected to the CS pin
// 1 as we are only using 1 MAX7219
char digitos_disp1[4] = {};
char digitos_disp2[4] = {};
// alarma
const int alarm_led_pin = 26;
const int alarm_buz_pin = 25;
int alarm_state = LOW;
// load position sensor
const int back_position_pin = 32;
int back_position = LOW; // HIGH when present
const int front_position_pin = 33;
int front_position = LOW; // HIGH when present
// EEPROM
// define the number of byte needed
#define ADD_POWER_RAW 0 // address 0 and 1 store radiation power (4 bytes)
#define ADD_ON_TIME 4 // address 1 and 2 store TIME on decens of minutes (4 bytes)
#define ADD_CAL_G 8 // address 3 and 4 store Calibration parameter 1 (4 bytes)
#define ADD_CAL_O 12 // address 5 and 6 store Calibration parameter 1 (4 bytes)
#define EEPROM_SIZE 20 //
// UV metering
float radiation_power_raw = 1.0;
float radiation_power = 1.0;
float calibration_gain = 1.0;
float calibration_offset = 1.0;
float fdec_minutes_on = 0;
int idec_minutes_on = 0;
float scaleRadiationPower(float radiation_raw)
{
return radiation_raw * calibration_gain + calibration_offset;
}
void setup() {
// Initialize serial for debugging
Serial.begin(SERIAL_DEBUG_BAUD);
// the zero refers to the MAX7219 number, it is zero for 1 chip
lc.shutdown(0,false);// turn off power saving, enables display
lc.setIntensity(0,10);// sets brightness (0~15 possible values)
lc.clearDisplay(0);// clear screen
// initialize alarm pins
pinMode(alarm_led_pin, OUTPUT);
ledcSetup(0,1E5,12);
ledcAttachPin(alarm_buz_pin,0);
// init sensor pins
pinMode(back_position_pin, INPUT);
pinMode(front_position_pin, INPUT);
// Initialize EEPROM
EEPROM.begin(EEPROM_SIZE);
}
void loop() {
delay(tic_period);
if (Serial.available() > 0)
{
indexData = 0;
readString = "";
while (Serial.available() > 0) {
incomingByte = Serial.read(); //gets one byte from serial buffer
inData[indexData] = incomingByte;
indexData++;
}
Serial.print("index data máximo: ");
Serial.println(indexData);
if (inData[0] == 'r') //r
{
Serial.println("===== comando recibido: leer eeprom ===== ");
// formato mensaje: r
Serial.print("Potencia guardada: ");
EEPROM.get(ADD_POWER_RAW, radiation_power_raw);
radiation_power = scaleRadiationPower(radiation_power_raw);
Serial.println(radiation_power);
Serial.print("Horas encendido: ");
EEPROM.get(ADD_ON_TIME, fdec_minutes_on);
Serial.println(fdec_minutes_on/6);
Serial.print("Coeficiente ganancia: ");
EEPROM.get(ADD_CAL_G, calibration_gain);
Serial.println(calibration_gain);
Serial.print("Coeficiente offset: ");
EEPROM.get(ADD_CAL_O, calibration_offset);
Serial.println(calibration_offset);
}
if (inData[0] == 'h') //h
{
Serial.println("===== comando recibido: setear horas encendido ===== ");
// formato mensaje: h,decenas_minutos
int decenas_minutos_on = 1;
bool recepcion_ok = false;
for (int j = 2; j < indexData; j = j + 1) {
readString += inData[j];
}
if (readString) {
decenas_minutos_on = round(readString.toInt());
Serial.print("Decenas de minutos a grabar en EEPROM: ");
Serial.println(decenas_minutos_on);
fdec_minutes_on= (float)decenas_minutos_on;
EEPROM.put(ADD_ON_TIME, fdec_minutes_on);
EEPROM.commit();
recepcion_ok = true;
}
if (not recepcion_ok)
{
Serial.println("Comando incompleto");
}
}
if (inData[0] == 'p') //f
{
Serial.println("===== comando recibido: setear potencia manualmente ===== ");
// formato mensaje: p,potencia_en_mW
float potencia_raw_en_mW = 1;
bool recepcion_ok = false;
for (int j = 2; j < indexData; j = j + 1) {
//Serial.println(inData[j]);
readString += inData[j];
}
if (readString) {
potencia_raw_en_mW = (float)readString.toInt();
Serial.print("Potencia raw en mW a grabar en EEPROM: ");
Serial.println(potencia_raw_en_mW);
EEPROM.put(ADD_POWER_RAW, potencia_raw_en_mW);
EEPROM.commit();
recepcion_ok = true;
}
if (not recepcion_ok)
{
Serial.println("Comando incompleto");
}
}
if (inData[0] == 'g') //g
{
Serial.println("===== comando recibido: ganancia ===== ");
// formato mensaje: g,ganancia
int ganancia = 1;
bool recepcion_ok = false;
for (int j = 2; j < indexData; j = j + 1) {
readString += inData[j];
}
if (readString) {
ganancia = round(readString.toInt());
Serial.print("Ganancia a grabar en EEPROM: ");
Serial.println(ganancia);
EEPROM.put(ADD_CAL_G, (float)ganancia);
EEPROM.commit();
recepcion_ok = true;
}
if (not recepcion_ok)
{
Serial.println("Comando incompleto");
}
}
if (inData[0] == 'o') //o
{
Serial.println("===== comando recibido: offset ===== ");
// formato mensaje: o,offset
int offset = 1;
bool recepcion_ok = false;
for (int j = 2; j < indexData; j = j + 1) {
readString += inData[j];
}
if (readString) {
offset = round(readString.toInt());
Serial.print("Offset a grabar en EEPROM: ");
Serial.println(offset);
EEPROM.put(ADD_CAL_O, (float)offset);
EEPROM.commit();
recepcion_ok = true;
}
if (not recepcion_ok)
{
Serial.println("Comando incompleto");
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment