Estou implementando um dataloger na minha estação, aonde de hora em hora será escrito na eeprom do pic, a humidade , temperatura, quantdade de chuva e a hora que foi realizado a leitura.
implementei a escrita e a leitura, só que estou com problemas com as variaveis de temperatura humidade e chuva, estou fazendo alguma conversão errada, a hora eu consegui fazer funcionar, mas as outras variaveis quando eu vou ler estas variaveis da memoria elas se atualizam.
eu estou pegando as variaveis e escrevendo na memória, ai leio o endereço da memoria referente ao que desejo, e envio para o lcd, funciona tudo ok, o relógio funciona blz, mas as variavei quando vão aparecer no display se atualizam..
e o mikroC esta dando uma warning: Implicit conversion of pointer to int
Implicit conversion of int to ptr
desculpe a bagunça do código, soi iniciante em C:
segue meu codigo:
- Código: Selecionar todos
char txt1[13]; // variavel float temperatura
char txt2[13]; // variavel float umidade
//*******************************************************
char tmp;
char umi;
char di;
char me;
char an;
char hr;
char mn;
char sg;
char ch;
int conti;
unsigned short set ;
//***********************************************************
void eprom(){
Eeprom_Write(0x2103,segundo); //variavel rtc
Eeprom_Write(0x2104,minuto);//variavel rtc
Eeprom_Write(0x2105,horas);//variavel rtc
Eeprom_Write(0x2106,dia);//variavel rtc
Eeprom_Write(0x2107,mes);//variavel rtc
Eeprom_Write(0x2108,ano);//variavel rtc
Eeprom_Write(0x2100,txt1); // variavel float temperatura
Delay_ms(20);
Eeprom_Write(0x2101,txt2); // variavel float umidade
Delay_ms(20);
Eeprom_Write(0x2102,chuvv); // variavel int quantidade de chuva
Delay_ms(20);
}
//***********************************************************
Lcd_Cmd(_LCD_TURN_ON);
Lcd_out(1,1,"Ultima Leitura");
delay_ms(800);
Lcd_Cmd(_Lcd_CLEAR);
Lcd_Cmd(_LCD_TURN_OFF);
sg = Eeprom_read(0x2103);
mn = Eeprom_read(0x2104);
hr = Eeprom_read(0x2105);
di = Eeprom_read(0x2106);
me = Eeprom_read(0x2107);
an = Eeprom_read(0x2108);
Lcd_Cmd(_LCD_TURN_ON);
BCD(1,5,di); //conversão da variável horas para BCD
LCD_Chr_Cp('/'); //escreve no display LCD
BCD(1,8,me); //conversão da variável minuto para BCD
LCD_Chr_Cp('/'); //escreve no display LCD
BCD(1,11,an); //conversão da variável segundo para BCD
BCD(2,5,hr); //conversão da variável dia para BCD
LCD_Chr_Cp(':'); //escreve no display LCD
BCD(2,8,mn); //conversão da variável mes para BCD
LCD_Chr_Cp(':'); //escreve no display LCD
BCD(2,11,sg); //conversão da variável ano para BCD
delay_ms(4000);
Lcd_Cmd(_Lcd_CLEAR);
Lcd_Cmd(_LCD_TURN_OFF);
delay_ms(200);
Lcd_Cmd(_LCD_TURN_ON);
Lcd_Out(1,1,"Temp:");
Lcd_Out(2,1,"Umid:");
tmp = Eeprom_read(0x2100);
Lcd_Out(1,6,tmp);
Lcd_Chr(1,14,223);
Lcd_Chr(1,15,'C');
umi = Eeprom_read(0x2101);
Lcd_Out(2,6,umi); // Exibe o valor da posição 0x34
Lcd_Chr(2,14,'%');
delay_ms(4000);
Lcd_Cmd(_Lcd_CLEAR);
Lcd_Cmd(_LCD_TURN_OFF);
intToStr(chuv, chuvv);
Lcd_Cmd(_LCD_TURN_ON);
Lcd_Cmd(_Lcd_CLEAR);
Lcd_Out(1,1,"Chuva:");
ch = Eeprom_read(0x2102);
Lcd_Out(1,7, ch);
Lcd_Chr(1,15,'m');
Lcd_Chr(1,16,'m');
delay_ms(2000);
Lcd_Cmd(_Lcd_CLEAR);
Lcd_Cmd(_LCD_TURN_OFF);
}
set++;
if ( set == 1000){
eprom();
set=0;
}