Basicamente eu juntei os 2 post que eu fiz sobre o assunto, e, ao invés de mandar o resultado para o monitor serial, estou enviando para o display, gerando o resultado abaixo :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | //Programa : Display Nokia 5110 e sensor de temperatura DHT11 //Autor : Arduino e Cia #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> #include <dht.h> #define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1 dht DHT; // pin 8 - Serial clock out (SCLK) // pin 9 - Serial data out (DIN) // pin 10 - Data/Command select (D/C) // pin 11 - LCD chip select (CS/CE) // pin 12 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12); // Variáveis que guardam a temperatura máxima e mínima int maxtemp = -100,mintemp = 100; // Variáveis que guardam a umidade máxima e mínima int maxhum = -100, minhum = 100; int temperatura,umidade; static unsigned char PROGMEM grau[] = { B00001100, B00010010, B00001100, B00000000,}; //Array simbolo grau void setup() { Serial.begin(9600); display.begin(); display.setContrast(50); //Ajusta o contraste do display display.clearDisplay(); //Apaga o buffer e o display display.setTextSize(1); //Seta o tamanho do texto display.drawRect(0,0, 84,48, BLACK); //Desenha o retangulo da borda display.drawRect(1,1, 82,46, BLACK); //Desenha o retangulo da borda display.display(); } void loop() { DHT.read11(dht_dpin); //Lê as informações do sensor temperatura = DHT.temperature; umidade = DHT.humidity; //Armazena a temperatura máxima na variável maxtemp if(temperatura > maxtemp) {maxtemp = temperatura;} //Armazena a temperatura minima na variável mintemp if(temperatura < mintemp) {mintemp = temperatura;} //Armazena a umidade máxima na variável maxhum if(umidade > maxhum) {maxhum = umidade;} //Armazena a umidade minima na variável minhum if(umidade < minhum) {minhum = umidade;} display.setTextColor(BLACK,WHITE); //Seta a cor do texto display.setCursor(3,5); //Seta a posição do cursor display.print("Temp : "); display.print(temperatura); //Desenha o simbolo do grau na posicao 56,5 display.drawBitmap(56,5, grau, 8, 4, BLACK); display.setCursor(65,5); display.println("C"); display.setCursor(3,13); display.print("Umid : "); display.print(umidade); display.println(" %\n"); display.setCursor(3,24); display.print("Max:"); display.print(maxtemp); display.drawBitmap(37,24, grau, 8, 4, BLACK); display.setCursor(46,24); display.print("C/"); display.print(maxhum); display.println(" %"); display.setCursor(3,32); display.print("Min:"); display.print(mintemp); display.drawBitmap(37,32, grau, 8, 4, BLACK); display.setCursor(46,32); display.print("C/"); display.print(minhum); display.println(" %"); display.display(); delay(2000); //Aduarda 2 segundos e reinicia o processo } |
Usei 4 variáveis para armazenamento dos valores máximo e mínimo de temperatura e umidade, mostrando-as no final da tela. Usei também a função da biblioteca (display.drawRect) para desenho da borda.
Por ser um display gráfico, você consegue posicionar os caracteres no pixel desejado, não ficando restrito ao espaço de um caracter. Repare nas linhas contendo "display.setCursor", onde se pode usar qualquer valor para posicionar o texto no display e evitar as bordas.

Olá,é possível utilizar os displays LCDs mais atuais de smartphones em Arduino? IPhone,galaxy S3 ou otros,tablets...
ResponderExcluiresses já são mais caros mano!!!
ExcluirOla Arthur ! Possível é. Complicado é arrumar os datasheets dos displays para fazer isso, já que cada fabricante de celular não faz muita questão de divulgar essa informação. O display Nokia 5110 permite a ligação ao Arduino usando poucos pinos, o que facilita bastante o trabalho. Já outros displays de celular tem vários pinos, tornando difícil a tarefa de descobrir a função de cada um e provavelmente exigindo a utilização de um circuito auxiliar. Mas não é uma tarefa impossível. Abraço !
ResponderExcluire tem outra coisa!! esses displays tem cabo flat entao meio dificil implementar!!!!
ExcluirOla, estou enfrentando alguns erros na hora da compilação, vários erros parecidos com este: C:\Program Files\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXA' was not declared in this scope, poderia me ajudar?
ResponderExcluirBoa noite Bruno !
ExcluirÉ com algum programa ou biblioteca específica ?
também encontrei o mesmo problema do Bruno... como resolver?
ResponderExcluirBom dia Leandro. Você também está tendo problema na hora de compilar ? Pode me dar mais informações sobre o erro ? Abraço !
ExcluirO problema parece ser na biblioteca do LCD... seria possível você compartilhar o arquivo da biblioteca q vc esta utilizando? Segue abaixo alguns dos erros
ExcluirIn file included from sketch_feb23f.ino:1:
C:\Users\Public\Documents\Documents\Arduino\libraries\PCD8544/Adafruit_GFX.h:11: error: stray '\302' in program
C:\Users\Public\Documents\Documents\Arduino\libraries\PCD8544/Adafruit_GFX.h:11: error: stray '\267' in program
C:\Users\Public\Documents\Documents\Arduino\libraries\PCD8544/Adafruit_GFX.h:242: error: stray '@' in program
C:\Users\Public\Documents\Documents\Arduino\libraries\PCD8544/Adafruit_GFX.h:725: error: expected unqualified-id before '<' token
Boa tarde Leandro,
ExcluirEu usei nos posts essa biblioteca da Adafruit :
https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
Veja se funciona, por favor.
Abraço.
Ola Arthur, muito bom esse posto.
ResponderExcluirPode ria me ajudar com uma programaçao para esse sensor.
Gostaria de fazer um set point de temperatura e umidade.(quando atingir uma certa temperatura ative uma saida.Quando reparar o erro deslia a saida).
Desde ja agradeço.
Boa noite,
ExcluirSeria apenas uma saída ? Com qual faixa de temperatura você iria trabalhar para acionar a saída ?
Abraço !
BOA NOITE GALERA DO ARDUINO E CIA.
ResponderExcluirTBM SOU BEM INTERESSADO EM PROJETOS COM ARDUINO.
TENTEI COMPILAR E ESTA APARECENDO OS SEGUINTES ERROS.
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In constructor 'RobotControl::RobotControl()':
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'LCD_CS' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'DC_LCD' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'RST_LCD' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In member function 'void RobotControl::begin()':
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXA' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXB' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXC' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXD' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:19: error: 'MUX_IN' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:22: error: 'BUZZ' was not declared in this scope
PODEM ME AJUDAR.
DESDE JÁ AGRADECO A TODOS VCS.
Bom dia Fábio,
ExcluirIsso parece ser erro de biblioteca.... foi instalada corretamente ?
Abraço !
mesmo erro alguém conseguiu solucionar?
ResponderExcluirBoa tarde Guilherme,
ExcluirQual erro está apresentando ?
Abraço.
Esse erro aqui:
ResponderExcluirC:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In constructor 'RobotControl::RobotControl()':
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'LCD_CS' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'DC_LCD' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'RST_LCD' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In member function 'void RobotControl::begin()':
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXA' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXB' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXC' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXD' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:19: error: 'MUX_IN' was not declared in this scope
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:22: error: 'BUZZ' was not declared in this scope
Boa tarde Guilherme,
ExcluirEsse erro apareceu quando você compilou o programa desse post ?
Abraço.
sim!!!
ResponderExcluirentra na pasta da bilbioteca Robot_Control\ e renomeia os arquivos que os erros acabam
ResponderExcluirAlguém me ajude!!!
ResponderExcluirEstou com problema no código na hora de compilar diz:
Display_Nokia.ino:27:35: error: variable 'grau' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Erro compilando.
Estou fazendo este projeto na hora de compilar aparece este erro:
ResponderExcluirArduino: 1.6.0 (Windows 8), Placa:"Arduino Uno"
Display_Nokia.ino:27:35: error: variable 'grau' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Erro compilando.
Não consigo sair deste ponto! oque devo fazer?
Boa noite Marcos,
ExcluirEu testei aqui e com a versão 1.6.0 da IDE apresenta esse erro. Tentei corrigir mexendo na biblioteca mas gerou um monte de outros erros.
Como solução temporária, recomendo usar a versão 1.0.5 da IDE, que compilou o programa normalmente.
Abraço !
Para solucionar o erro Display_Nokia.ino:27:35: error: variable 'grau' must be const in order to be put into read-only section by means of '__attribute__((progmem))
ResponderExcluirBasta alterar a linha 27: static unsigned char PROGMEM grau[] =
Para: const static unsigned char PROGMEM grau[] =
Funciona normal o código em qualquer versão da IDE
Como faço para apagar todas as informações do display? Utilizei o display.clearDisplay() porem ele só apagou as bordas, queria apagar todas as informações, e então mostrar só a temperatura por 4s, depois a umidade, e então voltar as informações gerais. Obrgdo
ResponderExcluirOi Pedro,
ExcluirQual display você está utilizando ? O azul ? Eu fiz uns testes e ele apaga totalmente o display.
Abraço.
Olá amigo, parabéns pelo projeto. Gostaria se possivel da sua ajuda. gostaria de saber como posso mostrar uma variavel analógica na tela. estou utilizando a mesma biblioteca que vc. seria o valor de um sensor de corrente, com formato ( 2,45 A) por ex.
ResponderExcluirBom dia Alan,
ExcluirObrigado. Você está lendo o valor de uma porta analógica, correto ? Crie uma variável e faça a leitura do valor:
valor_sensor = analogRead(porta_analogica)
Depois, exiba na tela normalmente, como eu fiz com os outros valores:
display.print(porta_analogica)
Abraço !
Consegui chegar ate aqui! Como falei, gostaria de mostrar o valor na tela
ResponderExcluir#include
#include
#include
// pin 8 - Serial clock out (SCLK)
// pin 9 - Serial data out (DIN)
// pin 10 - Data/Command select (D/C)
// pin 11 - LCD chip select (CS/CE)
// pin 12 - LCD reset (RST)
int sensorPin = A0;
int sensorValue_aux = 0;
float sensorValue = 0;
Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);
void setup()
{
Serial.begin(9600);
display.begin();
display.setContrast(50); //Ajusta o contraste do display
display.clearDisplay(); //Apaga o buffer e o display
display.setTextSize(1); //Seta o tamanho do texto
display.drawRect(0,0, 84,48, BLACK); //Desenha o retangulo da borda
display.drawRect(1,1, 82,46, BLACK); //Desenha o retangulo da borda
display.setTextColor(BLACK); //Seta a cor do texto
display.setCursor(0 ,0); //Seta a posição do cursor
display.display();
}
void loop()
{
for(int i=514; i>0; i--)
{
sensorValue_aux = (analogRead(sensorPin) - 514);
sensorValue += pow(sensorValue_aux, 2);
}
sensorValue = (sqrt(sensorValue / 514)) * 33,00 / 1024;
display.setTextColor(BLACK); //Seta a cor do texto
display.setCursor(5,3); //Seta a posição do cursor
display.print(sensorValue);
display.print(" A ");
// mostra o resultado no terminal
Serial.println(sensorValue,2);
sensorValue =0;
delay(500);
}