LusoRobótica - Robótica em Português

Robótica => Projectos de robótica => Projectos em desenvolvimento => Tópico iniciado por: metRo_ em 15 de Março de 2009, 01:04

Título: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: metRo_ em 15 de Março de 2009, 01:04
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 (http://lusorobotica.com/index.php/topic,431.0.html)

Aqui o que ando a fazer:
Arduino + Controlar Leds usando um menu no LCD (http://www.youtube.com/watch?v=mZuJA2eEjVs#)

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...
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh6.ggpht.com%2F_i2teYMYP9C0%2FSbz3emHbxqI%2FAAAAAAAAAQ4%2FCfrf6WAZi6Y%2Fs400%2Flcdarduinoleds.jpg&hash=5d77c47e87ac42e3546ed6bce9ca235f8715a738) (http://picasaweb.google.com/josescxavier/DropBox#5313393765390206626)

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!
Código: [Seleccione]
//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 :)
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: ricardo-reis em 15 de Março de 2009, 01:10
mt bom sim sr.. ;)
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: TigPT em 15 de Março de 2009, 01:11
Muito bom, direito a primeira página ;)
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: metRo_ em 15 de Março de 2009, 01:29
eheh Obrigado ;)
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: ricardo-reis em 15 de Março de 2009, 01:31
heya! :P proximo passo é pôr isso a controlar as luzes de casa.. ;D
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: amando96 em 15 de Março de 2009, 09:44
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
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: guibot em 15 de Março de 2009, 11:41
muito bom ;)
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: Fifas em 15 de Março de 2009, 13:33
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 :)
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: metRo_ em 15 de Março de 2009, 14:48
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
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: tr3s em 18 de Março de 2009, 11:08
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!
Título: Re:Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: metRo_ em 18 de Março de 2009, 14:08
Obrigado :)
Título: Re: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: GnobarEl em 11 de Junho de 2010, 10:22
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 (http://blog.thiseldo.co.uk/?p=383)

Obrigado.
Título: Re: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: metRo_ em 11 de Junho de 2010, 12:07
Ele disponibiliza a biblioteca por isso não deves ter grandes problemas em fazer algo semelhante.
Título: Re: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: GnobarEl em 11 de Junho de 2010, 21:31
Podes, por favor, voltar a colocar o anexo?
Está corrompido.

Obrigado.
Título: Re: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: GnobarEl em 12 de Junho de 2010, 23:35
Alguém tem este ficheiro do anexo?
Não consigo abrir, já tentei recuperar e nada :S
Título: Re: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: metRo_ em 13 de Junho de 2010, 12:44
Já actualizei o ficheiro em anexo! :)
Título: Re: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: GnobarEl em 13 de Junho de 2010, 13:00
Obrigado!

Vamos lá ver se consigo por isto a funcionar na prática!
Este menu está mesmo muito bom, a inversão das cores foi uma excelente ideia!

Parabéns!
Título: Re: Menu num LCD Nokia 3310! - Controlar Saídas
Enviado por: ivitro em 16 de Agosto de 2010, 20:08
ola a todos!

Como consigo fazer este tipo de menu mas com botoes ou algum parecido do genero a roda do nokia 7110?

E dentro de cada menu faz uma função diferente..