// inclui as bibliotecas #include #include #include "sensorTemperatura.h" typedef struct cmd { char cmd[10]; void (*func) (void); }; #define NCOMANDOS 3 cmd comandos[] = { {"start", cmd_start}, {"stop", cmd_stop}, {"print", cmd_print} }; // cria os objetos que iremos utilizar no programa LiquidCrystal lcd(12, 11, 5, 4, 3, 2); sensorTemperatura sensor(0); float T0 = 1000; unsigned long tempo0; float Delta_T = 2; bool toma_dados = false; String inp = ""; void cmd_start() { toma_dados = true; tempo0 = millis(); EEPROM.write(0,0); Serial.println("Comecou tomada de dados"); } void cmd_stop() { toma_dados = false; lcd.clear(); Serial.println("Finalizou tomada de dados"); } void cmd_print() { Serial.println("Imprimindo conteudo da EEPROM na ultima tomada de dados"); byte n = EEPROM.read(0); for(int i = 0; i1020) { Serial.println("Memoria cheia. Nao posso gravar mais"); return; } EEPROM.put(pos,dt); EEPROM.put(pos+sizeof(float),T); EEPROM.write(0,n+1); } void setup() { Serial.begin(9600); lcd.begin(16, 2); // coloquei a funcao calibra so como exemplo, ja que // eh a mesma utilizada no construtor (RTC 1K 102) sensor.calibra(1000,1000,3636,298); toma_dados = false; } void loop() { if(Serial.available()) { while (Serial.available()) { char inChar = (char)Serial.read(); inp += inChar; if (inChar == '\n') processa(); } } if(!toma_dados) return; float T = sensor.tempK(); if(fabs(T-T0)> 0.5) { unsigned long tempo = millis(); lcd.setCursor(0,0); lcd.print("t (s) = "); float dt = (float)(tempo-tempo0)/1000; lcd.print(dt); lcd.print(" "); lcd.setCursor(0,1); lcd.print("T (K) = "); lcd.print(T); lcd.print(" "); T0 = T; Serial.print(dt); Serial.print(" "); Serial.println(T); saveEEPROM(dt,T); } }