• Welcome to LusoRobótica - Robótica em Português.
 

Menu num LCD Nokia 3310! - Controlar Saídas

Started by metRo_, 15 de March de 2009, 01:04

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

metRo_

Olá,
Venho aqui apresentar um exemplo de menu criado num LCD Nokia 3310 com o arduino.
Uso um potenciómetro para navegar no menu e um botão para seleccionar.

Ainda estou a comentar e organizar o código para ficar perceptível a todos :)
Depois posso também postar as ligações embora já estejam indicadas aqui: http://lusorobotica.com/index.php/topic,431.0.html

Aqui o que ando a fazer:

Fiz um esquema no Fritzing, foi a primeira vez que o testei mas não fiquei muito convencido parece-me que há coisas básicas que já deviam estar implementadas...


Eu não indiquei na imagem mas parece óbvio onde se liga o LCD :)

Agora acrescento o código, todas as linhas estão comentadas e de uma maneira que me parece perceptível a todos.
Aqui fica um excerto, o resto está em anexo!
//Criação das variaveis a usar.
byte pontos[8]={0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00};                 //Este vector é o simbolo que coloco antes dos nomes, é aquela bolinha.
int ledsPinos[6]={8,9,10,11,12,13};                                       //Pinos onde estão os Leds
boolean ledsEstado[6]={false,false,false,false,false,false};              //Estado de cada Led! false para desligado, true para ligado!
char ledsNomes[6][6]={"Led 1","Led 2","Led 3","Led 4","Led 5","Led 6"};   //O nome dos leds que aparece no menu!
int pot=0;                                                                //pino do potenciometro
int botao=2;                                                              //pino do botao
int i=0;                                                                  //variavel auxiliar que vai servir para alocar a linha

void loop(){
  cursorxy(0,0);                               //Posiciona o cursor no inicio do LCD.
  pot=analogRead(0);                           // Le o valor do potenciometro na entrada 0;
  i=map(pot,0,950,0,5);                        //Mapeia o valor lido de 0 a 1023 num valor de 0 a 5 que é o numero de linhas. - Coloquei 950 em vez de 1023 porque quando carregava no botão havia um queda de tensão suficiente para passar o valor de 5 para 4.
 
  //Ligar o LED selecionado!
  if(digitalRead(2)==1){                       //Se o botão estiver pressionado...
    ledsEstado[i]=!ledsEstado[i];              //Altera-se o estado do led correspondente a linha selecionada com o potenciometro, isto é, se está "false"(falso) passa a "true"(verdade) e vice-versa...
    digitalWrite(ledsPinos[i],ledsEstado[i]);  //Escreve-se no led o seu estado, "false"(falso) ou "true"(verdade), desligado ou ligado!
    delay(250);                                //Evitar que durante o tempo em que se está a carregar no butão o código faço um ciclo, o que desligaria de novo o led!
  }
 
  //Escrever no LCD
  for(int k=0;k<6;k++){                        //Vamos correr as 6 linhas - de 0 a 5
    cursorxy(0,k);                             //Colocamos o cursor na posição 0 em x e na linha k
    for(int j=0;j<8;j++){                      //Vamos colocar o simbolo na linha.
      if(k==i){                                //Se a linha que em que estámos a colocar o simbolo for a mesma onde está o potenciometro vamos inverter a cor. Para isso
        writedata(pontos[j]^0xff);             //fazemos um XOR, isto é onde estava um pixel a 1 passa a 0 e onde estava a 0 passa a 1.
      }
      else{
        writedata(pontos[j]);                  //Os outros são os simbolos normais.
      }
    }
    putstr(" ");                               //Colocamos um espaço.
    if(ledsEstado[k]){                         //Se o estado do led da linha k estiver a true vamos colocar o nome com as cores inversas
      putstrInv(ledsNomes[k]);                 //para isso acrescentei a função putstrInv que coloca uma string mas com as cores inversas.
    }else{
      putstr(ledsNomes[k]);                    //caso contrário coloca o nome normalmente.
    }
  }
  delay(10);
}



Abraços :)

ricardo-reis


TigPT


metRo_


ricardo-reis

heya! :P proximo passo é pôr isso a controlar as luzes de casa.. ;D

amando96

Quote from: ricardo-reis on 15 de March de 2009, 01:31
heya! :P proximo passo é pôr isso a controlar as luzes de casa.. ;D

ia dizer o mesmo!
- Luz do quarto
- Luz da sala ;D


Fifas

muito bom metro ;)

mas acho que um pequeno joystick seria mais facil que o potenciometro :P mas so digo isso porque ja usei joystick....ou botoes tipo um D-Pad ;)

de qualquer das maneiras, parabens :)

metRo_

Para além de ser mais fácil tinham muito mais piada, a verdade é que isto era o que eu tinha casa em casa :p

tr3s

Ficou muito giro pa! E a ideia de inverter a linha seleccionada foi brilhante. :D
Só estou a comentar agora porque só agora me apercebi que ainda não tinha comentado ;)

Keep going!
Tr3s
Daniel Gonçalves

metRo_


GnobarEl

Este projecto está muito interessante, se tiver um LCD de um 3310 lá por casa vou tentar montar esse esquema.

Sabem-me dizer se com esse esquema posso colocar este menu?
http://blog.thiseldo.co.uk/?p=383

Obrigado.

metRo_

Ele disponibiliza a biblioteca por isso não deves ter grandes problemas em fazer algo semelhante.

GnobarEl

Podes, por favor, voltar a colocar o anexo?
Está corrompido.

Obrigado.

GnobarEl

Alguém tem este ficheiro do anexo?
Não consigo abrir, já tentei recuperar e nada :S