Problema com LCD 20 x 4

Pessoal estou a implementar um LXD 20x4 no meu projeto fiz as ligações conforme está no no exemplo do arduino Utilizei um código já feito para um LCD 20x4 verifico e não tem problema depois quando faço upload aparece o erro abaixo descrito: Binary sketch size: 2.630 bytes (of a 32.256 byte maximum) - 8% used

avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64 avrdude: stk500_cmd(): programmer is out of sync processing.app.debug.RunnerException: Problem uploading to board. See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions. at processing.app.debug.BasicUploader.uploadUsingPreferences(BasicUploader.java:126) at processing.app.Sketch.upload(Sketch.java:1649) at processing.app.Sketch.exportApplet(Sketch.java:1608) at processing.app.Sketch.exportApplet(Sketch.java:1580) at processing.app.Editor$DefaultExportHandler.run(Editor.java:2408) at java.lang.Thread.run(Thread.java:619)

O que será isto??

O erro deixou de dar e agora não dá erro nenhum, mas não consigo mostrar nada no lcd e não consigo perceber porquê!!!

Onde estás a ligar o LCD?

Já resolvi eu não tinha um potenciometro e não estava a ligar o Vo a nada agora já liguei ao grnd e está tudo bem.

De qualquer forma obrigado bubulindo: Em relação ao sensor de corrente é para receber correntes negativas e tenho de trabalhar com 8 volts estou a pensar fazer uma regra 3 simples para chegar ao valor correcto.

Pessoal estou com novos problemas em passar os valores para o LCD
1-Tenho por exemplo o sensor a medir 23A a seguir corto a corrente ficando a 0 mas no lcd fica 03 ou seja o 3 não desaparece como faço para limpar o aqueles 3 carateres do lcd sempre que muda de valores ou simplesmente outro processo qualquer.

2-Quis fazer uma espécie de tabela no LCD como mostra na imagem e quis fazer traços verticais para separar as colunas umas das outras ficou assim como a imagem demonstra

3-Linha 3 coluna 0 upostamente deveria aparecer um P porque não aparece aquele (Quadrado) estragou-se??

Tens o código?

Isso é simples de resolver.

O código que fiz no primeiro tópico foi; //-----------------------Sensor de corrente 235A(BAT)----------------------------------------------------------- lcd.setCursor(3,1); lcd.print(12); //Valor de tensão na bateria

valor235 = analogRead(A5); //Valor do pino Analógico 5 //Sinal entre 1V e 3V //5V=1024 1.47mV = (0.8085*1024)/5 = 165.5808 //1.96-(0.235*4.9)=0.8085 //5V=1024 2.45mV = (3.115*1024)/5 = 638,952 ~639 //1.96+(0.235*4.9)=3.115 minimo235=((1.86-(0.1*9.4))*1024/5); maximo235=((1.86+(0.1*9.4))*1024/5); corrente235 = map(valor235, minimo235, maximo235, -235, 235); //Calculo Serial.print("BAT:"); Serial.print(corrente235); //Apresentação dos resultados da corrente no serial monitor Serial.print("A"); lcd.setCursor(3, 2); lcd.print(corrente235); //Apresentação do resultado/temperatura no LCD delay(2000); //Actualização dos dados a cada 2 segundo

PBAT=TBAT*corrente235; //Potência da bateria Serial.print(PBAT); lcd.setCursor(3,3); lcd.print(PBAT); //--------------------------------------------------------------------------------------------------------------------

O código que fiz para o segundo tópico foi: lcd.setCursor(18,0); lcd.println("|"); lcd.setCursor(18,1); lcd.println("|"); lcd.setCursor(18,2); lcd.println("|"); lcd.setCursor(18,3); lcd.println("|");

lcd.setCursor(13,0); lcd.println("|"); lcd.setCursor(13,1); lcd.println("|"); lcd.setCursor(13,2); lcd.println("|"); lcd.setCursor(13,3); lcd.println("|");

E o código que fiz para o terceiro tópico foi apenas: //-----------------------1ªColuna------------------------------------------------------------ lcd.setCursor(0,1);//Coluna 0,1 Linha 0 (V) lcd.print("V= "); lcd.setCursor(0,2);//Coluna 0,1 Linha 1 (I) lcd.print("I="); lcd.setCursor(0,3);//Coluna 0.1 Linha 2 (P) lcd.print("P=");

Abraço

E o problema está em que código?

Antes de escreveres para o LCD, faz lcd.clear. Isto acontece porque o LCD faz um buffering dos dados que escreveste. Então se escreves algo com dois caracteres, XX... e depois com 1 caractere Y, o resultado fica YX. É este o problema que estás a ver.

Se fizeres clear e voltares a escrever tudo, evitas isso.

Todos os tópicos tem problemas como decrevi acima e como se vê na imagem a questão é em que parte do código é que insiro o lcd.clear()?? E dá para limpar os (quadradinhos) do lcd que quiser??? Como se faz? É que nos tópicos 1 e 2 que descrevi acima vou ter de usar de certeza não sei é como? Cumprimentos

Fazes clear antes de escreveres no lcd.

não tens função de apagar, mas podes escrever ' '.

Já está tudo resolvido Obrigado

Pessoal o meu lcd 20x4 está a tornar-se pequeno para a quantidade de informação que lá quero inserir então decidi pôr um switch e cada vez que carrego no seu botão ele muda de imagem por enquanto só vou ter duas imagens mas depois hei-de ter mais.
Gostava que alguém me dissesse como se faz a programação disto se possivel.

Cumprimentos

Engraçado teres referido a palavra switch... já que é com isso que implementas menus.

#define NUM_MENUS   4 //exemplo, 4 menus... 

unsigned char var_menus = 0; 

if (botao_pressionado == TRUE) // pseudocodigo...
   var_menus++; 

switch(var_menus%NUM_MENUS) {

case 0: 
    lcd.print("menu 0");
    break; 
case 1: 
    lcd.print("menu 1");
    break;
case 2: 
    lcd.print("menu 2");
    break;
case 3: 
    lcd.print("menu 3");
    break;
}

algo assim será o que pretendes.

Sim é mesmo isso que pretendo depois ponho o que quero em cada menu e cada vez que pressiono o botão ele muda de menu.
Não estou a conseguir compilar não sei bem porquê está-me a dar este erro:

sketch_jul29b:9: error: expected unqualified-id before ‘if’
sketch_jul29b:12: error: expected unqualified-id before ‘switch’

Estás a tentar compilar só o código que escrevi?

Ou já tens um sketch com este código?

Se já tens um sketch, mete-o aqui.

Estou a fazer numa janela à parte para testes e depois de testada passo para o código original o que fiz foi isto:

#include<LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);                     //Pinos digitais onde o lcd esté conetado 12, 11, 5, 4, 3, 2
#define Switch_Pin 10
#define NUM_MENUS   2                                      //exemplo, 2 menus... 
unsigned char var_menus = 0; 

void setup()
lcd.begin(20, 4)

void loop()
if (Switch_Pin == TRUE)                             // pseudocodigo...
   var_menus++; 

switch(var_menus%NUM_MENUS) {

case 0: 
    lcd.print("menu 0");
    break; 

case 1: 
    lcd.print("menu 1");
    break;

}
#include<LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);                     //Pinos digitais onde o lcd esté conetado 12, 11, 5, 4, 3, 2
#define Switch_Pin 10
#define NUM_MENUS   2                                      //exemplo, 2 menus... 
unsigned char var_menus = 0; 

void setup(){
lcd.begin(20, 4);
}
void loop(){
if (Switch_Pin == TRUE)                             // pseudocodigo...
   var_menus++; 

switch(var_menus%NUM_MENUS) {

case 0: 
    lcd.print("menu 0");
    break; 

case 1: 
    lcd.print("menu 1");
    break;

}
}

Isto deve compilar… mas não funciona.

Vais ter imenso que aprender…

Começa por ver os exemplos na IDE do Arduino para perceberes como funciona a linguagem C e depois volta à carga.

A forma como colocaste o código aqui, demonstra que não tens muitos conhecimentos de base e é isso que te falta tanto para este problema, como para o outro que tens com a medição de energia.

Dá uma olhada também nos exemplos que lidam com botões digitais e com a função digitalRead().

Continua a não compilar e já percebi que nem sequer tinha posto digitalRead para ler o pino do switch.

Obrigado pela paciência tenho noção que tenho mesmo muito para aprender.

Não estou mesmo a conseguir fazer o código para mudar a tela do LCD não sei o que me está a faltar ou o que estou a fazer mal pedia umas noções ou mesmo como fazer.

Cumprimentos