array Posted April 13, 2015 at 09:58 AM Report Share #581117 Posted April 13, 2015 at 09:58 AM (edited) Bom dia Estou a realizar um contador de energia electrica em arduino Gostava de saber se alguem me poderia ajudar na parte de ler e gravar na eeprom O que desejava fazer era gravar o valor da energia com um espaço de tempo por exemplo de hora a hora, em que ao gravar o valor da hora iria apagar o valor da hora anterior. Codigo que ja executei #include <EEPROM.h> #include <SoftwareSerial.h> #include <Wire.h> // .............................................declaração variaveis...................// const int maxAllowedWrites = 20; const int memBase =120; const int AnalogPin = A0; float Umaxarduino = 5; float Uin = 1023; float V_sensor, I_instantaneo, A, Vrms,I_eficaz,S; float Energia, Energial, Potencia, Energia_Total; float Tensao_eficaz = 230.0; int k,P; int Uaux; int Iaux; int cont=0; int addr = 0; int address=0; byte value; /*--------------------------------------------------------------------------------------*/ void setup() { Serial.begin(9600); Wire.begin(); Energial=0; } void loop(){ //-----------------------------CALCULOS------------------------------ A=0; P=0; Iaux=0; for (k=0;k<1000;k++) // definição para o numero de amostras { V_sensor = analogRead(AnalogPin); // leitura da tensao do sensor de corrente I_instantaneo =(V_sensor*Umaxarduino/Uin)-2.5;// conversao dos valores da porta analogica para volts, ajuste da tensao continua para 0 A+=pow(I_instantaneo,2); // soma de todas as amostras. Iaux=Iaux+I_instantaneo; Uaux=230; delay(1); } Vrms=sqrt(A/1000); // calculo valor medio quadratico I_eficaz=Vrms/0.066; // sensibilidade do sensor S=Vrms*I_eficaz;// calculo potencia aparente P=(Uaux*Iaux)/1000;// calculo potencia ativa //Potencia= I_eficaz*Tensao_eficaz;// calculo da potencia em Watt Potencia=1000; Energial+= (Potencia/3600)/1000; // calculo e contabilização da energia em KWh Energia_Total= Energia + Energial; // -------------------------------- Gravar na EEprom ------------- ----- { int val = analogRead (0) / 4; EEPROM.write (addr, Energial); addr = addr; se (addr == 512) addr = 0; } // ------------------------- Ler da EEPROM -------------- { value = EEPROM.read (address); Serial.print (address); Serial.print ("\ t"); Serial.print (Energial, 0); Serial.println (); address = address; if (address == 512) address = 0; delay (100); } Agradecia imenso a ajuda obrigada Edited April 13, 2015 at 02:05 PM by apocsantos geshi Link to comment Share on other sites More sharing options...
bubulindo Posted April 13, 2015 at 11:06 AM Report Share #581121 Posted April 13, 2015 at 11:06 AM A EEPROM não deve ser usada para guardar dados... eventualmente a EEPROM vai deixar de funcionar ao fazeres isso. O teu código não faz nada... além de não compilar. O que é que sabes de Arduino ou de C? include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
array Posted April 13, 2015 at 12:58 PM Author Report Share #581123 Posted April 13, 2015 at 12:58 PM Nao sei muito. eu tenho o codigo a compilar e a fazer os calculos corretos. o meu problema esta agora em gravar os valores para caso falte a energia a contagem nao reiniciar Link to comment Share on other sites More sharing options...
bubulindo Posted April 13, 2015 at 02:51 PM Report Share #581136 Posted April 13, 2015 at 02:51 PM Esta linha faz com que o código não compile... se (addr == 512) Regra geral, o Arduino deveria enviar estes valores para algum lado... por exemplo o emoncms.org, de onde tiraste esse código. Como disse, gravares os valores vai fazer com que a EEPROM corrompa e deixe de funcionar. include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
array Posted April 13, 2015 at 03:16 PM Author Report Share #581143 Posted April 13, 2015 at 03:16 PM Este codigo e uma base que o coordenador do trabalho me arranjou. Relativamente a guardar valores ele disseme que os poderia gravar na eeprom e depois arranjar uma função em que de x em x tempo iria gravar o valor e iria tambem apagar o ultimo e sempre assim. Que caso de falta-se a alimentação ao arduino nao iria reiniciar a contagem. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 13, 2015 at 03:23 PM Report Share #581145 Posted April 13, 2015 at 03:23 PM sabes o que quer dizer a parte 'rom' da palavra 'eeprom' ? como te disseram, não é trabalho da eeprom fazer o que pretendes, para isso é que existem memórias flash IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
array Posted April 13, 2015 at 03:25 PM Author Report Share #581146 Posted April 13, 2015 at 03:25 PM Os valores depois serao para enviar por sms com modulo gsm Link to comment Share on other sites More sharing options...
Solution bubulindo Posted April 13, 2015 at 06:32 PM Solution Report Share #581158 Posted April 13, 2015 at 06:32 PM Eu não sei o uqe é que o coordenador sabe de EEPROM, mas tendo já tido problemas com a EEPROM por tentar algo parecido, não aconselho nada fazeres o que queres. Se queres mesmo fazer asneira (e espero eu não desiludir clientes), podes sempre deixar a paspalhice do Arduino e usar as funções base: #include <avr/eeprom.h> eeprom_write_float((float*)addr, Energial); Energial = eeprom_read_float((float*)addr); include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now