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.80851024)/5 = 165.5808 //1.96-(0.2354.9)=0.8085
//5V=1024 2.45mV = (3.1151024)/5 = 638,952 ~639 //1.96+(0.2354.9)=3.115
minimo235=((1.86-(0.1*9.4))1024/5);
maximo235=((1.86+(0.19.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