Pessoal preciso de ajuda para montar um menu num LCD 1602 igual ao da figura anexa. São apenas 3 botões, 1 para aumentar, 1 para diminuir e um para pular para o próximo. Os parâmetros estão na figura. Seria legal que ao manter o botão pressionado, os valores forem aumentando automaticamente.

Se alguém puder me ajudar fico muito grato!

Exibições: 1479

Anexos

Responder esta

Respostas a este tópico

Faltou dizer se queres fazer em arduino, pic, linguagem e compilador !!!

OOOPS!!!!!!, é com o Arduino!

Muito grato!

Olá Felipe, muito obrigado! A resposta foi curta mas com muito conteúdo! Já estava desistindo pois ninguém respondia! Vou tentar fazer sozinho, mas se não conseguir vc pode me ajudar? Me dê uma idéia de custo para que eu possa remunerar o seu trabalho! Muito grato!

Se precisar algo em linguagem C (ccs) para PIC, estarei a disposicao para o q precisar! boa sorte

Ok Cesar! Muito obrigado pelo apoio!

Bom dia! Não tem custo, não. Que isso! As dúvidas que for tendo, vai postando ai que a gente aqui vai tentando dar uma força e ajuda!

Abraços!!

rapaz bolei um codigo aki mais como nao tenho a biblioteca do lcd fiz ate onde eu podia acredito que de para aproveitar o codigo:

int botMODE=12;//entrada botao Mode
int botUp=11;//entrada do botao up
int botDown=10;//entrada do boto down
int mode=0,Hz=1,Us=10,V=0,S=1;
#define t_500 delay(500);
//maximos
#define Hz_valorUp Pressed_Up; if(bot_Up == LOW){if (Hz<120){Hz++;}t_500;}//limita a 120
#define Us_valorUp Pressed_Up; if(bot_Up == LOW){if (Us<500){Us++;}t_500;}//limita a 500
#define V_valorUp Pressed_Up; if(bot_Up == LOW){if (V<100){V++;}t_500;}//limita a 100
#define S_valorUp Pressed_Up; if(bot_Up == LOW){if (S<60){S++;}t_500;}//limita a 60
//minimos
#define Hz_valorDow Pressed_Down; if(bot_Dow == LOW){if (Hz>1){Hz--;}t_500;}//limita a 1
#define Us_valorDow Pressed_Down; if(bot_Dow == LOW){if (Us>10){Us--;}t_500;}//limita a 10
#define V_valorDow Pressed_Down; if(bot_Dow == LOW){if (V>0){V--;}t_500;}//limita a 0
#define S_valorDow Pressed_Down; if(bot_Dow == LOW){if (S>1){S--;}t_500;}//limita a 1
//se for usar botoes com resistor altere a "if(botStats ==LOW)" para HIGH e a INPUT_PULLUP para INPUT
//eu uso nesse modo para liga diretamente o GND na porta do botao
#define Pressed_Mode int bot_Stats = digitalRead(botMODE); if(bot_Stats == LOW){mode++; t_500;}if(mode == 4){mode=0;}//4 é o numero maximo de menus
#define Pressed_Up int bot_Up = digitalRead(botUp);
#define Pressed_Down int bot_Dow = digitalRead(botDown);
void setup(){
pinMode(botMODE,INPUT_PULLUP);
pinMode(botUp,INPUT_PULLUP);
pinMode(botDown,INPUT_PULLUP);
}
void loop(){
Pressed_Mode;//verifica qual o menu
if(mode == 0){
Hz_valorUp;
Hz_valorDow;
//resto dp codigo do menu 1
}
if(mode == 1){
Us_valorUp;
Us_valorDow;
//resto do coigo do menu 2
}
if(mode == 2){
V_valorUp;
V_valorDow;
//resto do codigo do menu 3
}
if(mode == 3){
S_valorUp;
S_valorDow;
//resto do codigo do menu 4
}
}//void loop

Noooooossa Romário, vc fica ajudando os desesperados até de madrugada?

Muito obrigado, achei o código extremamente enxuto. Vou fazer os complementos e tentar compilar. Caso dê algum problema eu te aviso para podermos completar! Muito obrigado mais uma vez. 

rsrs é por ae, como meu objetivo é aprender, para treinar eu uso como desafio as necessidades de cada um, e já dizia meu prof que o melhor horário para se programar é de madrugada, então a madruga comigo não é problema, qualquer duvida fique a vontade em perguntar fmz, bom projeto!

Prezado Romário; só pra dar retorno, seu programa funcionou perfeitamente! Demorei um pouco entender sua programação (e ainda tenho algumas dúvidas), mas consegui acrescentar algumas etapas e agora funciona bem. Conforme vc pode ver na foto anexa, para saber qual o menu ativo, coloquei os sinais (+-) embaixo de cada valor, tirando a unidade (na foto saiu o Hz que é o ativo no momento), mas na verdade queria que ela ficasse piscando quando o menu estivesse ativo (não consegui fazer isto!). Como alguns valores são grandes, queria também que a velocidade do bot_up e dwn aumentasse quando mantivesse o botão pressionado por um certo tempo. Volto a agradecer a ajuda sua e de todos os que me enviaram sugestões, e claro, aos administradores do forum! Abraços!

Anexos

Esquecí de colocar o programa:

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int i=0; //Variável para contagem
int botMODE=12;//entrada botao Mode
int botUp=11;//entrada do botao up
int botDown=10;//entrada do boto down
int mode=0,Hz=30,Us=50,V=70,S=10; // Valores mostrados ao iniciar o estimulador
int cont=250; //Tempo entre mudança de menu
int Tbot=100; //Variável para definir velocidade do botão up e dw
#define t_500 delay(Tbot); //Tempo entre mudança de valor
//maximos
#define Hz_valorUp Pressed_Up; if(bot_Up == LOW){if (Hz<120){Hz++;}t_500;}//limita a 120
#define Us_valorUp Pressed_Up; if(bot_Up == LOW){if (Us<500){Us++;}t_500;}//limita a 500
#define V_valorUp Pressed_Up; if(bot_Up == LOW){if (V<100){V++;}t_500;}//limita a 100
#define S_valorUp Pressed_Up; if(bot_Up == LOW){if (S<60){S++;}t_500;}//limita a 60
//minimos
#define Hz_valorDow Pressed_Down; if(bot_Dow == LOW){if (Hz>1){Hz--;}t_500;}//limita a 1
#define Us_valorDow Pressed_Down; if(bot_Dow == LOW){if (Us>10){Us--;}t_500;}//limita a 10
#define V_valorDow Pressed_Down; if(bot_Dow == LOW){if (V>0){V--;}t_500;}//limita a 0
#define S_valorDow Pressed_Down; if(bot_Dow == LOW){if (S>1){S--;}t_500;}//limita a 1
//se for usar botoes com resistor altere a "if(botStats ==LOW)" para HIGH e a INPUT_PULLUP para INPUT
//eu uso nesse modo para liga diretamente o GND na porta do botao
#define Pressed_Mode int bot_Stats = digitalRead(botMODE); if(bot_Stats == LOW){mode++; delay(cont);}if(mode == 4){mode=0;}//4 é o numero maximo de menus
#define Pressed_Up int bot_Up = digitalRead(botUp);
#define Pressed_Down int bot_Dow = digitalRead(botDown);
void setup(){
lcd.begin(16, 2);
pinMode(botMODE,INPUT_PULLUP);
pinMode(botUp,INPUT_PULLUP);
pinMode(botDown,INPUT_PULLUP);

lcd.setCursor(0,0); //Posiciona o cursor na primeira coluna da primeira linha
lcd.print("NEUROESTIMULADOR"); //Escreve no LCD
for(i=0;i<=4;i++) //Laço para a o efeito de piscagem da segunda linha
{
lcd.setCursor(0,1); //Posiciona cursor
lcd.print(" "); //Limpa segunda linha
delay(250); //Permanece por 250 milissegundos apagada
lcd.setCursor(0,1); //Posiciona cursor
lcd.print(" *** PACHON ***"); //Escreve na tela do LCD a mensagem "PACHON"
delay(250); //Permanece por 250 milissegundo acesa
}
lcd.clear(); //Limpa LCD
lcd.setCursor(1,1); //Posiciona cursor
lcd.print("Hz uS V S"); //Coloca as unidades
lcd.setCursor(5,0); //Posiciona cursor
lcd.print("50 70 10"); //Valores iniciais
// lcd.print(" ");
}


void loop(){

Pressed_Mode;//verifica qual o menu
if(mode == 0){
lcd.setCursor(12,1); //Coloca +- no menu ativo e recupera o anterior
lcd.print(" S");
lcd.setCursor(1,1);
lcd.print("+-");

Hz_valorUp;
Hz_valorDow;
//resto dp codigo do menu 1

// Rotina para justificar os números

if (Hz<10) { // o Hz tem apenas 1 dígito
lcd.setCursor(0,0); //Posiciona cursor
lcd.print(" "); //limpa as dezenas e centenas
lcd.setCursor(2,0); //Posiciona cursor
lcd.print(Hz); //Coloca a freq
}
if (Hz>9 && Hz<100){ // o Hz tem apenas 2 dígitos
lcd.setCursor(0,0); //Posiciona cursor
lcd.print(" "); //limpa as centenas
lcd.setCursor(1,0); //Posiciona cursor
lcd.print(Hz); //Coloca a freq
}
if (Hz>99){ // o Hz tem 3 dígitos
lcd.setCursor(0,0); //Posiciona cursor
lcd.print(Hz); //Coloca a freq
}

}

if(mode == 1){
lcd.setCursor(1,1); //Coloca +- no menu ativo e recupera o anterior
lcd.print("Hz");
lcd.setCursor(5,1);
lcd.print("+-");

Us_valorUp;
Us_valorDow;
//resto do codigo do menu 2

// Rotina para justificar os números
if (Us<100){ // o PW tem apenas 2 dígitos
lcd.setCursor(4,0); //Posiciona cursor
lcd.print(" "); //limpa as centenas
lcd.setCursor(5,0); //Posiciona cursor
lcd.print(Us); //Coloca o PW
}
if (Us>99){ // o PW tem 3 dígitos
lcd.setCursor(4,0); //Posiciona cursor
lcd.print(Us); //Coloca o PW
}
}
if(mode == 2){
lcd.setCursor(5,1); //Coloca +- no menu ativo e recupera o anterior
lcd.print("uS");
lcd.setCursor(9,1);
lcd.print("+-");

V_valorUp;
V_valorDow;
//resto do codigo do menu 3

// Rotina para justificar os números

if (V<10) { // a V tem apenas 1 dígito
lcd.setCursor(8,0); //Posiciona cursor
lcd.print(" "); //limpa as dezenas
lcd.setCursor(10,0); //Posiciona cursor
lcd.print(V); //Coloca a V
}
if (V>9 && V<100){ // a V tem apenas 2 dígitos
lcd.setCursor(8,0); //Posiciona cursor
lcd.print(" "); //limpa as centenas
lcd.setCursor(9,0); //Posiciona cursor
lcd.print(V); //Coloca a V
}
if (V>99){ // a V tem 3 dígitos
lcd.setCursor(8,0); //Posiciona cursor
lcd.print(V); //Coloca a V
}

}

if(mode == 3){
lcd.setCursor(9,1); //Coloca +- no menu ativo e recupera o anterior
lcd.print(" V");
lcd.setCursor(12,1);
lcd.print("+-");

S_valorUp;
S_valorDow;
//resto do codigo do menu 4

// Rotina para justificar os números

if (S<10) { // o tempo tem apenas 1 dígito
lcd.setCursor(12,0); //Posiciona cursor
lcd.print(" "); //limpa as dezenas
lcd.setCursor(13,0); //Posiciona cursor
lcd.print(S); //Coloca o tempo
}
if (S>9){ // o tempo tem apenas 2 dígitos
lcd.setCursor(12,0); //Posiciona cursor
lcd.print(S); //Coloca o tempo
}
}
}//void loop

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço