LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: dio123 em 30 de Junho de 2014, 13:15

Título: biblioteca lcd
Enviado por: dio123 em 30 de Junho de 2014, 13:15
Bom dia,
Estou a deixar de usar o arduino aos poucos, e neste momento escolhi usar o lcd. Inicialmente usei a biblioteca do Peter Fleury, mas para mim tem 1 desvantagem.
1º O codigo é bastante confuso para mim e usa 4 bits ou 8 bits no mesmo codigo
2º Usa mais um pino em relação arduino, o pino RW. Depende do tipo de aplicação que se queira fazer pode ser uma vantagem.

Então decidi  criar a minha biblioteca para o lcd  16x2  a 4 bits. Fui para o google, sacei diversas bibliotecas, começei por testar, comparar, a filtrar de maneira a perceber como funciona os lcd's.
A biblioteca ficou como queria, simples e a funcionar.  Apesar de não ser 100% da minha autoria, está tal e qual como queria. Consigo enviar mensagens para o lcd e usar o goto x y.

Agora estou com dificuldades em fazer o equivalente ao println no arduino, e ainda nao consegui encontrar nada por onde me pudesse guiar.
Uma das diferenças entre o print e o println no arduino é que no print quando passa do 100 para o 99 fica 990 enquanto no println fica 99 e é isso que nao consigo fazer no meu código.

Citar
void lcd_print(const char *text)
{
while (*text)
lcd_char(*text++);
}
void lcd_char(uint8_t carac)
{
   lcd_RS_port |= (1<<lcd_RS_bit);     
send_byte(carac); //envia os caracteres para o lcd
}
Título: Re: biblioteca lcd
Enviado por: dropes em 30 de Junho de 2014, 14:21
Ao escreveres o valor tens de colocar um espaço à frente para que elimine o caratere que está no display.
O que o arduino deve fazer é apagar tudo e escrever de novo, penso eu.
Título: Re: biblioteca lcd
Enviado por: senso em 30 de Junho de 2014, 14:24
Ou dado que lhe dizes o tamanho do lcd, usar sempre um buffer de 16 caracteres e escrever o ecrã todo.
Título: Re: biblioteca lcd
Enviado por: dio123 em 02 de Julho de 2014, 14:56
Boa tarde,
Como não consegui acrescentar um espaço no final char buffer, encontrei uma alternativa
sprintf( buffer,"%3d", adc_value);

Agora estou a tentar mostrar no lcd o valor de pi, baseado nos exemplos que vi, na net,  mas não estou a conseguir. No entanto desconfio que nao seja do codigo.
Tentei varios exemplos e todos remetem para o mesmo problema, em vez de mostrar o valor da variavel aparece sempre o ?. Na simulação avr studio e a variavel buf fica com o texto e ? o que me leva a querer que o problema está no avr studio.

 sprintf (buf, "bouble=%f", pi);  e  sprintf(str, "Value of Pi = %f", M_PI);
 
codigo em anexo

Agradeço desde já pela ajuda.
Título: Re: biblioteca lcd
Enviado por: senso em 02 de Julho de 2014, 17:55
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=110400 (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=110400)

Tens de incluir a lib math.h e depois incluir o printf com suporte para virgula flutuante, no AS6 é só carregar numa caixa algures na configuração do projecto, se não usas AS6, no linker é meter isto:
-Wl,-u,vfprintf