Social Icons

Reconhecendo Teclas com Shield LCD



Fiz um Exemplo rápido de como "Lêr" as teclas da shield LCD, é bem simples, todos os botões são ligados na mesma entrada Analógica, a 0, por isso para diferenciar as teclas são usados resistores, fazendo com que valores diferentes sejam interpretados pelo arduino.
Não sei se é o caso de todas mas na minha as teclas são organizadas dessa forma:


Fotos em Breve...

------------------------------------------------------------------
Tecla         - Valor:
Cima          - 146
Baixo         - 334
Direita        - 0
Esquerda    - 511
Selecionar   - 745
------------------------

Qualquer coisa se não for este valor, ou quiser saber como ligar faça assim:






1) Ache o Datasheet da Sua Shield e confira qual pino Analógico dos botões.
2) Coloque este código em seu arduino substituindo o indicado pelas suas informações.
3) Anote o valor de cada tecla e faça um "coeficiente de cagaço" ou seja a margem de erro, de uns 50 para mais e para menos, mas cuide para que este 50 para mais ou para menos não entre no valor de outra tecla.


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
void setup(){
lcd.begin(16,2);
Serial.begin(9600);
}
void loop(){
  delay(1000);
  lcd.clear();
  int tecla_valor = analogRead(0);// 0  é o pino da sua entrada analógica
  lcd.print(tecla_valor);//tecla_valor armazena o valor lido e joga pra tela LCD.

}
5) Aqui está o código com os valores da minha Shield, ele lê a tecla e mostra qual é na tela.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
void setup(){
lcd.begin(16,2);
Serial.begin(9600);
}
void loop(){
  delay(90);
  lcd.clear();
  int tecla_valor = analogRead(0);
  if (tecla_valor == 0)
{
  lcd.print("Direita 0");
  delay(100);
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
 
  lcd.print("Cima 146");
delay(100);
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
  lcd.print("Baixo 334");
  delay(100);
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
  lcd.print("Esquerda 511");
  delay(100);
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
  lcd.print("Selecionar 745");
  delay(100);
}
delay(50);
}

Como prometido criei um "menuzinho", percebam que está cheio de bugs ainda, quando você vai pra negativo e volta pra positivo ficam números errados na tela, e várias outras coisas, mas como estou ainda em fase de testes nesse projeto do Relógio vou desenvolver um menu para poder alterar a hora do relógio pelo sistema mesmo e não mais pelo source, então vou aos poucos mudando o código abaixo...
Se alguém conseguir avanços poste ai, OpenSource é isso!


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
int up;
int down;
int nothing;
int right;
int left;
int enter;
int sel;
int x;
int y;
void setup() {   
lcd.begin(16, 2);
lcd.write(0);
sel = 0;
x = 0;
y = 0;
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 0;
}
void loop(){
  delay(100);
 
int tecla_valor = analogRead(0); 
if (tecla_valor == 1023){
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 1;
}
if (tecla_valor == 0)
{
  right = 1;
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
  up = 1;
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
  down = 1;
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
  left = 1;
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
  enter = 1;
}
delay(50);


lcd.setCursor(x,y);

if (down == 1){
  sel = sel -1;
}

if (up == 1){
  sel = sel + 1;
}
if (enter == 1) {
  (x=x+1);
}
lcd.print(sel);

}


Mais um exemplo, mas esse com menus escritos, tem 3 menus mas pode expandir para mais menus e sub-menus....


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino
int up;
int down;
int nothing;
int right;
int left;
int enter;
int sel;
int x;
int y;
void setup() {  
lcd.begin(16, 2);
lcd.write(0);
sel = 1;
x = 0;
y = 0;
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 0;
}
void loop(){
 

int tecla_valor = analogRead(0);
if (tecla_valor == 1023){
up = 0;
down = 0;
right = 0;
left = 0;
enter = 0;
nothing = 1;
}
if (tecla_valor == 0)
{
  right = 1;
}
if ((tecla_valor >= 120) & (tecla_valor <= 146))
{
  up = 1;
}
if ((tecla_valor >= 300) & (tecla_valor <= 350))
{
  down = 1;
}
if ((tecla_valor >= 500) & (tecla_valor <= 530))
{
  left = 1;
}
if ((tecla_valor >= 700) & (tecla_valor <= 790))
{
  enter = 1;
}
delay(120);

if (right == 1){
sel++;
 }
if (left == 1){
sel--;
 }

if (sel<=1){
  sel =1;
  lcd.clear();
lcd.print("     MENU 1  >> ");
 }
if (sel==2){
  lcd.clear();
lcd.print(" <   MENU 2   > ");
 }
if (sel>=3){
  sel=3;
  lcd.clear();
lcd.print(" <<  MENU 3    ");
 }
}

Homens de Verdade Criam Seus Próprios Jogos!

Frase de efeito, mas muita gente (“geeks de verdade”) leva ao pé da letra. Claro que não dispensam um bom Wii ou XBox 360… mas brincar com a “Gamepack” aí embaixo é muito, muito mais legal.

diy_gameboy_arduino_2
O preço não é lá muito convidativo, especialmente em épocas de dólar caro: são US$ 250,00. O poder de processamento também não é “aquela coisa toda”.
Todos os esquemas estão disponíveis (o da CPU é este, por exemplo) e o display OLED é mesmo muito bonito. Mas, particularmente, ainda existe outro kit: o Hydra. (US$ 200,00), vem com teclado, tem saída para monitor/TV e gera imagens como essa aí de baixo:

hydra_ss_02_large

hydra_ss_03_large

gd-photo200
Para Nosso Arduino temos outra opção:

Em se tratando de acessibilidade e diversão com engenhocas DIY, nada pode bater o Arduino. Sim, projetos possibilitando a criação de jogos com uma proposta “do-it-yourself” já surgiram, mas pareciam caros e não muito atraentes. A ideia com o Gameduino é possibilitar que você crie o seu próprio “console” e saia jogando sem pagar caro para isso e com facilidade para dar vida às suas criações.

A solução se baseia em uma placa extra que se acopla ao Arduino adicionando o hardware necessário para transformá-lo numa plataforma de jogos de 8 bits. De acordo com seus criadores, adquirindo a placa por US$ 50,00 e sabendo como desenvolver projetos para o Arduino, qualquer um pode desenvolver seus próprios games sem muita complicação, contanto inclusive com a ajuda de elementos disponibilizados pela comunidade. Os jogos são declaradamente retrô, é óbvio, mas com criatividade é possível criar coisas bem interessantes.
Confira alguns detalhes técnicos sobre o projeto na página oficial do Gameduino.

Hacking with an USB Host

Jogando Super Nintendo no Android com controle original

Jogando SNES com controle original via bluetooth
 http://www.youtube.com/watch?v=_FZTz2KO9vU .

Mas tem um detalhe muito importante este projeto, é para NES e não o SNES (mais novo), ou seja, sabia que era possível fazer e tinha os materiais para isto, então só esperei sobrar um tempo para fazer (o único componente que não tinha era o controle, mas consegui um paralelo por R$ 8,00 no Mercado Livre).

vimeo.com/bsoares/snes-on-android-with-controller-and-bluesmirf
Como funciona:
O controle do SNES esta ligado a Arduino, é bem fácil obter as teclas pressionadas, mas existe uma biblioteca para tornar esta tarefa ainda mais simples (NESpad/SNESpad). Cada tecla pressionada liga um bit dentro do número que representa o estado das teclas do controle, e este estado (número) é enviado via Bluetooth (uso o BlueSMiRF) para o Android.
No Android, quem recebe este número é o Amarino, mas ele apenas recebe o número, ainda é necessário um App (que foi modificado a partir deste exemplo “SoftKeyboard“) para converter este número em teclas pressionadas (uso Bitwise) como um teclado do Android.

Por fim é só configurar o emulador para entender as teclas pressionadas como os comandos dentro do mesmo (pular, andar, girar, etc…)

Desta forma o controle pode ser usado como o teclado do seu Android, e ainda ser configurado como o controle de outros emuladores.
Sobre o módulo bluetooth BlueSMiRF:
Depois de configurado ele será o seu “cabo USB virtual” pois da mesma forma que usamos o comando Serial.print(“…”) para enviar dados via porta serial, o mesmo dado será enviado via bluetooth.

A App Amarino utiliza 57.600 de baudrate, e os módulos BlueSMiRF normalmente vem com 9.600.

Para configurar o blueSMiRF utilizei alguns tutoriais:
- http://todbot.com/blog/2006/02/23/howto-mac-os-x-bluetooth-serial-port/
- http://www.sparkfun.com/tutorials/67

Sobre o Soft Keyboard (App para Android):

Modifiquei o exemplo de Keyboard App disponível no Android Developers para obter os dados via Amarino e agir como teclado. Me baseei neste projeto criado para NES, porém criei outro código para a Arduino e alterei 95% do código para o Android.
O código fonte do projeto para Androi, Arduino e as versões das bibliotecas que foram utilizadas, podem ser baixadas do meu Github:
https://github.com/BSoares/SNES-on-Android-with-original-controller

Os Códigos Usados estão aqui:

https://github.com/BSoares/SNES-on-Android-with-original-controller





Créditos para :
http://blog.bsoares.com.br/category/arduino#bitwise-right-shift