Boa noite pessoal, gostaria de saber como fazer a ligação dos pinos do display 4x40 no arduino...

Achei dois deles por aqui.

É seguindo os mesmos pinos do 2x16? 

Alguem poderia dar uma dica?

Abraços!

Exibições: 2125

Responder esta

Respostas a este tópico

Sim, são os mesmos  pinos. Da uma olhada nos datasheets e compare as posições de memoria, mais a ideia é que a terceira linha é uma continuação da primeira e a  quarta da segunda . Só deve ter uns endereços não usados entre o final da primeira e o inicio da terceira, isso vale pra segunda e quarta também.

Sabe aonde ligo o pino E2 no arduino? no display 16x2 o pino E do display eh ligado no 11 mas no display 40x4 ele tem dois, "E" e "E2"

Ele já esta funcionando, mas vi que pra habilitar a linha 3 e 4 tem que ligar o E2 mas nao sei aonde.

o modelo de display que to usando é: LMC-SSC4A40DLGY-01 

e esse é o link pro datasheet: http://www.jin-hua.com.tw/admin/product_mang/pdf/LMC-SSC4A40-01[1].pdf

Abraços!

Esse ja é outro tipo de display. Ja ligo o pino 11 no E1 e no E2 ao mesmo tempo, ou só no E2? Esses 'Ex' devem ser o enable dos LCD's. Fisicamente se tem só um LCD, mais deve haver dois controladores....

Pois é, liguei os dois no mesmo pino, e ele clona o que esta na linha 1 e 2 e manda pra 3 e 4...

Eu andei dando uma pesquisada e vi que vou ter que usar uma biblioteca pra esse tipo de LCD...

saberia me dizer aonde possa conseguir?

Abraços

Cola o Setup() do código aqui.

Opa Jonatas, o Setup() do meu programa ou da biblioteca?

eu consegui uma Biblioteca mas ela retorna um erro dizendo:

In file included from Controle_brilho_delay_led.ino:1:
C:\arduino-1.0.3\libraries\LiquidCrystal440/LiquidCrystal440.h:95: error: conflicting return type specified for 'virtual void LiquidCrystal::write(uint8_t)'
C:\arduino-1.0.3\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'

Isso, tranquilo. Agora vc tem que dar um jeito de duplicar a biblioteca  LCD e deixar todos os pinos do LCD em comum, exceto o do enable[E]... ai é só usar normalmente, como tivesse 2 LCD de 2x40.


#include <LiquidCrystal440.h> //LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd(12, 1, 11, 0, 5, 4, 3, 2);
//LiquidCrystal lcd(RS,RW,Enable1,Enable2, data3,data2,data1,data0);
//pinos
int backlight = 6;
int enter = 7;
int voltar = 10;
int botaomais = 8;
int botaomenos = 9;
int led = 13;
// Variaveis
int maismenos = 0;
int varBacklight = 10;
int varBrilho = 0;
int varTempobrilho = 2;
int varLed = 0;
int varPosicao = 0;
// TEMPO BRILHO
long Tempoanterior = 0;
long Tempointervalo = 2000;
unsigned long Tempoatual = 0;
char* Menus[] = {
"Brilho:", "Tempo do Brilho:", "LED:"};
int M = 0;
char* Led[] = {
"OFF", "ON"};
int L = 0;
void setup() {
lcd.begin(16,2);
pinMode(backlight, OUTPUT);
pinMode(enter, INPUT);
pinMode(voltar, INPUT);
pinMode(botaomais, INPUT);
pinMode(botaomenos, INPUT);
pinMode(led, OUTPUT);
digitalWrite(enter, HIGH);
digitalWrite(voltar, HIGH);
digitalWrite(botaomais, HIGH);
digitalWrite(botaomenos, HIGH);
digitalWrite(led, LOW);
limiteNumerico();
}
void loop() {
digitalWrite(voltar, HIGH);
telaPrincipal();
verificaTecla();
posicao();
if (digitalRead(enter) == LOW){
verificaTecla();
while (digitalRead(voltar) == HIGH) {
verificaTecla();
telaConf();
teclaConf();
if (digitalRead(enter) == LOW){
verificaTecla();
Switchmenu();
}
}
}
}
void posicao() {
++varPosicao;
if (varPosicao >=16)
varPosicao = 0;
delay(300);
}
void telaPrincipal() {
lcd.clear();
lcd.setCursor(varPosicao,0);
lcd.print("Brilho:");
//lcd.setCursor(7,0);
lcd.print(varBacklight);
//lcd.setCursor(12,0);
//lcd.print("LED:");
lcd.setCursor(13,1);
lcd.print(Led[L]);
lcd.setCursor(0,1);
lcd.print("Delay:");
lcd.setCursor(6,1);
lcd.print(varTempobrilho);
delay(30);
}
void telaConf() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Configurar:");
lcd.setCursor(0,1);
lcd.print(Menus[M]);
delay(30);
}
void telaBrilho() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ajuste o Brilho:");
lcd.setCursor(0,1);
lcd.print(varBacklight);
delay(30);
}
void telaTempobrilho() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Backlight desliga");
lcd.setCursor(0,1);
lcd.print("apos ");
lcd.setCursor(5,1);
lcd.print(varTempobrilho);
lcd.setCursor(8,1);
lcd.print("segundos.");
delay(30);
}
void telaLed() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Aciona LED:");
lcd.setCursor(0,1);
lcd.print(Led[L]);
delay(30);
}
void teclaConf() {
maismenos = M;
MaisMenos();
M = maismenos;
limiteNumerico();
}
void MaisMenos() {
if (digitalRead(botaomais) == LOW)
++maismenos;
if (digitalRead(botaomenos) == LOW)
--maismenos;
delay(150);
}
void teclaBrilho() {
maismenos = varBacklight;
MaisMenos();
varBacklight = maismenos;
limiteNumerico();
}
void teclaTempobrilho() {
maismenos = varTempobrilho;
MaisMenos();
varTempobrilho = maismenos;
limiteNumerico();
}
void teclaLed() {
maismenos = L;
MaisMenos();
L = maismenos;
limiteNumerico();
}
void limiteNumerico() {
//LIMITE VARIAVEL "M"
if (M <= -1)
M = 2;
if (M >= 3)
M = 0;
//LIMITE VARIAVEL "L"
if (L <= -1)
L = 1;
if (L >= 2)
L = 0;
//LIMITE VARIAVEL "varBrilho"
if (varBacklight <= -1)
varBacklight = 20;
if (varBacklight >= 21)
varBacklight = 0;
varBrilho = map (varBacklight, 0, 20, 0, 255);
//LIMITE VARIAVEL "varTempobrilho"
if (varTempobrilho <= -1)
varTempobrilho = 40;
if (varTempobrilho >= 41)
varTempobrilho = 0;
Tempointervalo = map (varTempobrilho, 0, 40, 0, 40000);
}
void Switchmenu() {
switch (M) {
case 0:
menuBrilho();
case 1:
menuTempobrilho();
case 2:
menuLed();
}
}
void menuBrilho() {
while (digitalRead(voltar) == HIGH) {
verificaTecla();
telaBrilho();
teclaBrilho();
analogWrite(backlight, varBrilho);
if (digitalRead(enter) == LOW){
verificaTecla();
ConfSave();
}
}
}
void menuTempobrilho() {
while (digitalRead(voltar) == HIGH) {
verificaTecla();
telaTempobrilho();
teclaTempobrilho();
if (digitalRead(enter) == LOW) {
verificaTecla();
ConfSave();
}
}
}
void menuLed() {
while (digitalRead(voltar) == HIGH) {
verificaTecla();
telaLed();
teclaLed();
varLed = L;
digitalWrite(led, L);
if (digitalRead(enter) == LOW) {
verificaTecla();
ConfSave();
}
}
}
void ConfSave() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Configuracao");
lcd.setCursor(0,1);
lcd.print("Salva!");
delay(800);
digitalWrite(voltar, LOW);
}
void verificaTecla() {
if (digitalRead(enter) == LOW || digitalRead(voltar) == LOW || digitalRead(botaomais) == LOW || digitalRead(botaomenos) == LOW)
Tempoanterior = millis();
Tempoatual = millis();
if (Tempoatual - Tempoanterior > Tempointervalo) {
analogWrite(backlight, 1);
}
if (Tempoatual - Tempoanterior < Tempointervalo) {
analogWrite(backlight, varBrilho);
}
}

cara acabei de ver aki q eu tenho um lcd exatamente igual a esse seu, se achar alguma solução posta ai pq so o datasheet que vc postou ja ajudou de mais, e deu certo esse código?

Esse codigo ta rodando 100% no display 16x2, só tem que conferir e ajustar biblioteca do lcd 16x2...

Qual versão da IDE vc usou pra compilar??

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço