SlideShare uma empresa Scribd logo
1 de 7
Baixar para ler offline
Arduino:	
  Genius	
  com	
  display	
  LCD	
  16x2	
  usando	
  I2C	
  
	
  
	
  
Este	
  projeto	
  foi	
  construído	
  para	
  a	
  matéria	
  de	
  Automação	
  e	
  Controle	
  de	
  
Processos	
  do	
  Centro	
  Universitário	
  de	
  Volta	
  Redonda	
  –	
  UniFOA.	
  
	
  
Falando	
  sobre	
  o	
  projeto,	
  ele	
  é	
  a	
  construção	
  do	
  jogo	
  conhecido	
  como	
  Simon	
  Says	
  
(Genius),	
  com	
  apresentação	
  de	
  resultados	
  no	
  display	
  com	
  o	
  Arduino.	
  	
  
Primeiramente	
  iremos	
  detalhar	
  os	
  componentes	
  utilizados	
  na	
  construção	
  do	
  
projeto:	
  
	
  
Componentes:	
  
	
  
1	
  x	
  Arduno	
  Uno	
  	
  
4	
  x	
  LEDs	
  (Cores	
  de	
  sua	
  preferência)	
  
4	
  x	
  Resistores	
  330	
  Ohms	
  
4	
  x	
  Push	
  Buttons	
  
1	
  x	
  Display	
  LCD	
  16	
  x	
  2	
  
1	
  x	
  CI	
  PCF8574AP	
  (Podem	
  ser	
  utilizados	
  outros	
  compatíveis)	
  
	
  
Montagem	
  do	
  jogo:	
  
	
  
O	
  jogo	
  foi	
  montado	
  com	
  base	
  no	
  tutorial	
  do	
  Mauro	
  Assis,	
  disponível	
  em	
  
(http://labdegaragem.com/profiles/blogs/genius).	
  Como	
  o	
  arduino	
  uno	
  tem	
  
limitação	
  de	
  portas	
  e	
  não	
  era	
  possível	
  conectar	
  um	
  display	
  para	
  mostrar	
  os	
  
resultados	
  tivemos	
  que	
  fazer	
  breves	
  adaptações	
  no	
  projeto	
  original.	
  
	
  
Sketch:	
  
	
  




                                                                                                                     	
  
 
Inclusão	
  da	
  Biblioteca	
  I2C	
  e	
  Pitches.h:	
  
	
  
Pela	
  limitação	
  de	
  portas	
  foi	
  necessário	
  utilizar	
  o	
  PCF8574	
  para	
  expandir	
  as	
  
portas	
  do	
  arduino.	
  No	
  site	
  
(http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/	
  ).	
  Escolha	
  a	
  versão	
  
mais	
  adequada	
  a	
  sua	
  versão	
  da	
  IDE	
  do	
  Arduino,	
  no	
  meu	
  caso	
  utilizei	
  a	
  biblioteca	
  
para	
  a	
  versão	
  1.0.	
  Depois	
  de	
  baixado	
  a	
  biblioteca	
  descompacte	
  para	
  a	
  pasta	
  
libraries	
  do	
  arduino,	
  então	
  ela	
  estará	
  disponível	
  para	
  ser	
  utilizada	
  através	
  da	
  
IDE.	
  
	
  
Outra	
  biblioteca	
  foi	
  necessária	
  na	
  construção	
  do	
  jogo.	
  A	
  pitches.h,	
  disponível	
  em:	
  	
  
(http://api.ning.com/files/zHb0ubf3UnFl5CVITtXvtbMG2zDlNhSnr2L1yrynJ1kx
AyeMpfLDP94aIV*7WgVAORzwKixdYiJ2VXW9Vcl8JKq*sG3T1zSa/Piches.h).	
  
Deverá	
  ser	
  feito	
  o	
  mesmo	
  procedimento	
  para	
  inclusão.
	
  
Código	
  do	
  Jogo:	
  
	
  
Este	
  código	
  foi	
  adaptado	
  do	
  original	
  para	
  prover	
  o	
  suporte	
  a	
  tela:	
  
	
  
#include	
  "pitches.h"	
  
#include	
  <Wire.h>	
  	
  
#include	
  <LiquidCrystal_I2C.h>	
  
	
  
#define	
  buzzer	
  3	
  
	
  
#define	
  waitingStart	
  	
  	
  0	
  	
  
#define	
  playingSeq	
  	
  	
  	
  	
  1	
  
#define	
  userTyping	
  	
  	
  	
  	
  3	
  
#define	
  validatingSeq	
  	
  4	
  
	
  
#define	
  kred	
  	
  	
  	
  11	
  
#define	
  kyellow	
  10	
  
#define	
  kgreen	
  	
  	
  9	
  
#define	
  kwhite	
  	
  	
  8	
  
	
  
#define	
  lred	
  	
  	
  	
  7	
  
#define	
  lyellow	
  6	
  
#define	
  lgreen	
  	
  5	
  
#define	
  lwhite	
  	
  4	
  
	
  
#define	
  debugging	
  1	
  
	
  
int	
  interval	
  =	
  500;	
  
int	
  noSound	
  =	
  200;	
  
int	
  seq[50];	
  
int	
  posSeq	
  =	
  0;	
  
int	
  posType	
  =	
  0;	
  
int	
  state	
  =	
  waitingStart;	
  	
  
int	
  key	
  =	
  0;	
  	
  
	
  
LiquidCrystal_I2C	
  lcd(56,16,2);	
  	
  
	
  
void	
  setup()	
  	
  
{	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  pinMode(lred,	
  OUTPUT);	
  	
  	
  	
  	
  	
  
	
  	
  pinMode(lyellow,	
  OUTPUT);	
  	
  	
  	
  	
  	
  
	
  	
  pinMode(lgreen,	
  OUTPUT);	
  	
  	
  	
  	
  	
  
	
  	
  pinMode(lwhite,	
  OUTPUT);	
  	
  	
  	
  
	
  	
  pinMode(kred,	
  INPUT);	
  	
  	
  
	
  	
  pinMode(kyellow,	
  INPUT);	
  	
  	
  
	
  	
  pinMode(kgreen,	
  INPUT);	
  	
  	
  
	
  	
  pinMode(kwhite,	
  INPUT);	
  	
  	
  
	
  	
  noSound	
  =	
  0;	
  
	
  	
  //	
  	
  demo();	
  
	
  	
  lcd.init();	
  //	
  initialize	
  the	
  lcd	
  	
  
	
  
	
  	
  //	
  Print	
  a	
  message	
  to	
  the	
  LCD.	
  
	
  	
  lcd.backlight();	
  
	
  	
  lcd.print("Simon	
  says");	
  
	
  
	
  	
  playWrong();	
  
	
  	
  noSound	
  =	
  50;	
  
	
  	
  Serial.begin(9600);	
  	
  
	
  	
  randomSeed(analogRead(0));	
  
	
  	
  generateSeq();	
  
}	
  
	
  
void	
  loop()	
  {	
  
	
  	
  switch(state)	
  
	
  	
  {	
  
	
  	
  case	
  waitingStart:	
  	
  	
  	
  
	
  	
  	
  	
  interval	
  =	
  500;	
  
	
  	
  	
  	
  if	
  (debugging)	
  
	
  	
  	
  	
  	
  	
  Serial.println("waitingStart");	
  	
  	
  
	
  	
  	
  	
  lcd.clear();	
  
	
  	
  	
  	
  lcd.print("Aguardando...");	
  
	
  	
  	
  	
  lcd.setCursor(0,	
  1);	
  
	
  	
  	
  	
  lcd.print("Pressione	
  botao");	
  
	
  	
  	
  	
  key	
  =	
  readKey(false);	
  
	
  	
  	
  	
  state	
  =	
  playingSeq;	
  
	
  	
  	
  	
  return;	
  	
  	
  
	
  	
  case	
  playingSeq:	
  
	
  	
  	
  	
  if	
  (debugging)	
  
	
  	
  	
  	
  	
  	
  Serial.println("playingSeq");	
  	
  	
  
	
  	
  	
  	
  playSeq();	
  
	
  	
  	
  	
  posType	
  =	
  0;	
  
	
  	
  	
  	
  state	
  =	
  userTyping;	
  
	
  	
  	
  	
  return;	
  
	
  	
  case	
  userTyping:	
  
	
  	
  	
  	
  lcd.clear();	
  
	
  	
  	
  	
  lcd.setCursor(0,	
  0);	
  
	
  	
  	
  	
  lcd.print("Jogo	
  Iniciado");	
  
	
  	
  	
  	
  if	
  (debugging)	
  
	
  	
  	
  	
  	
  	
  Serial.println("userTyping");	
  	
  	
  
	
  	
  	
  	
  key	
  =	
  1;	
  
	
  	
  	
  	
  int	
  ok	
  =	
  true;	
  
	
  	
  	
  	
  while(ok)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  key	
  =	
  readKey(true);	
  
	
  	
  	
  	
  	
  	
  if	
  (key	
  ==	
  0)	
  
	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  	
  	
  	
  	
  	
  play(key-­‐4);	
  
 	
  	
  	
  	
  	
  ok	
  =	
  validateSeq(key);	
  
	
  	
  	
  	
  	
  	
  if	
  (debugging)	
  
	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  Serial.print("ok=");	
  
	
  	
  	
  	
  	
  	
  	
  	
  Serial.println(ok);	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  if	
  (ok)	
  
	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (posType	
  ==	
  posSeq)	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  delay(1000);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  posSeq++;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  state	
  =	
  playingSeq;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  interval	
  =	
  interval	
  *	
  0.95;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  else	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  posType++;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  lcd.clear();	
  
	
  	
  	
  	
  lcd.setCursor(0,	
  0);	
  
	
  	
  	
  	
  lcd.print("Sua	
  pontuacao:");	
  
	
  	
  	
  	
  lcd.setCursor(0,	
  1);	
  
	
  	
  	
  	
  lcd.print(posSeq);	
  
	
  	
  	
  	
  Serial.print("Voce	
  fez	
  ");	
  
	
  	
  	
  	
  Serial.println(posSeq);	
  
	
  	
  	
  	
  playWrong();	
  
	
  	
  	
  	
  generateSeq();	
  
	
  	
  	
  	
  state	
  =	
  waitingStart;	
  
	
  	
  	
  	
  return;	
  	
  	
  	
  	
  	
  	
  
	
  	
  }	
  
}	
  
	
  
int	
  validateSeq(int	
  key)	
  
{	
  
	
  	
  return	
  (key-­‐4)	
  ==	
  seq[posType];	
  //	
  (key	
  -­‐4)	
  =	
  key	
  to	
  LED	
  
}	
  
	
  
	
  
int	
  readKey(int	
  validateMilis)	
  
{	
  
	
  	
  unsigned	
  long	
  ms	
  =	
  millis();	
  
	
  	
  int	
  value	
  =	
  LOW;	
  
	
  	
  while(value	
  ==	
  LOW)	
  
	
  	
  {	
  
	
  	
  	
  	
  for	
  (int	
  i	
  =	
  kred;	
  i	
  >=	
  kwhite;	
  i-­‐-­‐)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  if	
  (validateMilis)	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  ((millis()	
  -­‐	
  ms)	
  >	
  3000)	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (debugging)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Serial.println("Timeout");	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  0;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  value	
  =	
  digitalRead(i);	
  
 	
  	
  	
  	
  	
  if	
  (value	
  ==	
  HIGH)	
  
	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  i;	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}	
  
	
  
void	
  playPich(int	
  pich,	
  int	
  duration)	
  
{	
  
	
  	
  tone(buzzer,	
  pich);	
  
	
  	
  delay(duration);	
  
	
  	
  noTone(buzzer);	
  
}	
  
	
  
void	
  playWrong()	
  
{	
  
	
  	
  int	
  ritym	
  =	
  500;	
  
	
  	
  Serial.println("Play	
  Wrong");	
  	
  
	
  	
  //	
  	
  	
  	
  for(int	
  i	
  =	
  0;	
  i	
  <	
  2;	
  i++)	
  
	
  	
  //	
  	
  	
  	
  {	
  
	
  	
  digitalWrite(lred,	
  HIGH);	
  
	
  	
  digitalWrite(lyellow,	
  HIGH);	
  
	
  	
  digitalWrite(lgreen,	
  HIGH);	
  
	
  	
  digitalWrite(lwhite,	
  HIGH);	
  
	
  	
  playPich(NOTE_A3,	
  ritym);	
  
	
  	
  playPich(NOTE_A3,	
  ritym);	
  
	
  	
  playPich(NOTE_A3,	
  ritym);	
  
	
  	
  playPich(NOTE_F3,	
  ritym	
  *	
  3	
  /	
  4);	
  
	
  	
  playPich(NOTE_C4,	
  ritym	
  *	
  1	
  /	
  4);	
  
	
  	
  playPich(NOTE_A3,	
  ritym);	
  
	
  	
  playPich(NOTE_F3,	
  ritym	
  *	
  3	
  /	
  4);	
  
	
  	
  playPich(NOTE_C4,	
  ritym	
  *	
  1	
  /	
  4);	
  
	
  	
  playPich(NOTE_A3,	
  ritym	
  *	
  2);	
  
	
  	
  playPich(NOTE_E4,	
  ritym);	
  
	
  	
  playPich(NOTE_E4,	
  ritym);	
  
	
  	
  playPich(NOTE_E4,	
  ritym);	
  
	
  	
  playPich(NOTE_F4,	
  ritym	
  *	
  3	
  /	
  4);	
  
	
  	
  playPich(NOTE_C4,	
  ritym	
  *	
  1	
  /	
  4);	
  
	
  	
  playPich(NOTE_GS3,	
  ritym);	
  
	
  	
  playPich(NOTE_F3,	
  ritym	
  *	
  3	
  /	
  4);	
  
	
  	
  playPich(NOTE_C4,	
  ritym	
  *	
  1	
  /	
  4);	
  
	
  	
  playPich(NOTE_A3,	
  ritym	
  *	
  2);	
  
	
  	
  digitalWrite(lred,	
  LOW);	
  
	
  	
  digitalWrite(lyellow,	
  LOW);	
  
	
  	
  digitalWrite(lgreen,	
  LOW);	
  
	
  	
  digitalWrite(lwhite,	
  LOW);	
  
	
  	
  noTone(buzzer);	
  
	
  	
  delay(500);	
  
	
  	
  //	
  	
  	
  	
  }	
  	
  	
  
}	
  
	
  
void	
  demo()	
  
{	
  
	
  	
  interval	
  =	
  500;	
  
	
  	
  while(interval	
  >	
  5)	
  
	
  	
  {	
  
	
  	
  	
  	
  play(lred);	
  
	
  	
  	
  	
  play(lyellow);	
  
 	
  	
  	
  play(lgreen);	
  
	
  	
  	
  	
  play(lwhite);	
  
	
  	
  	
  	
  interval	
  =	
  interval	
  /	
  1.5;	
  
	
  	
  }	
  
}	
  
	
  
void	
  blink(int	
  led,	
  int	
  pich)	
  
{	
  
	
  	
  digitalWrite(led,	
  HIGH);	
  
	
  	
  tone(buzzer,pich);	
  
	
  	
  delay(interval);	
  
	
  	
  digitalWrite(led,	
  LOW);	
  
	
  	
  noTone(buzzer);	
  
	
  	
  delay(noSound);	
  
}	
  
	
  
void	
  play(int	
  pich)	
  
{	
  
	
  	
  switch(pich)	
  
	
  	
  {	
  
	
  	
  case	
  7:	
  
	
  	
  	
  	
  blink(lred,NOTE_C4);	
  
	
  	
  	
  	
  break;	
  
	
  	
  case	
  6:	
  
	
  	
  	
  	
  blink(lyellow,NOTE_E4);	
  
	
  	
  	
  	
  break;	
  
	
  	
  case	
  5:	
  
	
  	
  	
  	
  blink(lgreen,NOTE_G4);	
  
	
  	
  	
  	
  break;	
  
	
  	
  case	
  4:	
  
	
  	
  	
  	
  blink(lwhite,NOTE_AS4);	
  
	
  	
  	
  	
  break;	
  
	
  	
  }	
  	
  	
  
}	
  
	
  
void	
  generateSeq()	
  
{	
  
	
  	
  posSeq	
  =	
  0;	
  
	
  	
  if	
  (debugging)	
  
	
  	
  	
  	
  Serial.println("generateSeq");	
  
	
  	
  int	
  note;	
  
	
  	
  for	
  (int	
  i	
  =	
  0;	
  i	
  <	
  50;	
  i++)	
  
	
  	
  {	
  
	
  	
  	
  	
  seq[i]	
  =	
  random(4)	
  +	
  4;	
  
	
  	
  	
  	
  if	
  (debugging)	
  
	
  	
  	
  	
  	
  	
  Serial.println(seq[i]);	
  
	
  	
  }	
  
}	
  
	
  
void	
  playSeq()	
  
{	
  
	
  	
  for	
  (int	
  i	
  =	
  0;	
  i	
  <=	
  posSeq;	
  i++)	
  
	
  	
  {	
  
	
  	
  	
  	
  play(seq[i]);	
  
	
  	
  }	
  
}	
  
	
  
	
  
Divulgação:	
  
	
  
O	
  vídeo	
  com	
  divulgação	
  do	
  projeto	
  pode	
  ser	
  encontrado	
  em:	
  
http://www.youtube.com/watch?v=MueJwG-­‐1vKM	
  
	
  
Grupo:	
  
	
  
Thiago	
  Figueredo	
  Pereira	
  	
  
Rodrigo	
  de	
  Almeida	
  Gustavo	
  	
  
Luiz	
  Fernando	
  de	
  Moura	
  
Leandro	
  Ramos	
  
	
  
Referências:	
  
	
  
http://labdegaragem.com/profiles/blogs/genius	
  
	
  
http://labdegaragem.com/profiles/blogs/tutorial-­‐lcd-­‐16x2-­‐com-­‐
pcf8574-­‐e-­‐
arduino?id=6223006%3ABlogPost%3A137664&page=1#comments	
  
	
  
http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/	
  
	
  
http://www.nxp.com/documents/data_sheet/PCF8574.pdf	
  
	
  
	
  

Mais conteúdo relacionado

Mais procurados

Elipsóide_de_Fresnel_Rev1
Elipsóide_de_Fresnel_Rev1Elipsóide_de_Fresnel_Rev1
Elipsóide_de_Fresnel_Rev1
paulo_campolina
 
A laicização do Estado
A laicização do Estado  A laicização do Estado
A laicização do Estado
eb23ja
 
Ge protecao diferencial
Ge protecao diferencialGe protecao diferencial
Ge protecao diferencial
panelada
 
Caricaturas da 1ª República
Caricaturas da 1ª RepúblicaCaricaturas da 1ª República
Caricaturas da 1ª República
Carolina Penedo
 

Mais procurados (20)

Eu e os políticos - José António Saraiva
Eu e os políticos - José António SaraivaEu e os políticos - José António Saraiva
Eu e os políticos - José António Saraiva
 
Elipsóide_de_Fresnel_Rev1
Elipsóide_de_Fresnel_Rev1Elipsóide_de_Fresnel_Rev1
Elipsóide_de_Fresnel_Rev1
 
Portugal na 2ª metade do século XIX.
 Portugal na 2ª metade do século XIX. Portugal na 2ª metade do século XIX.
Portugal na 2ª metade do século XIX.
 
1ª república
1ª república1ª república
1ª república
 
101545233 exercicios-resolvidos-de-sinais-e-sistemas
101545233 exercicios-resolvidos-de-sinais-e-sistemas101545233 exercicios-resolvidos-de-sinais-e-sistemas
101545233 exercicios-resolvidos-de-sinais-e-sistemas
 
vendas-e-negociacao.pdf
vendas-e-negociacao.pdfvendas-e-negociacao.pdf
vendas-e-negociacao.pdf
 
Circuitos combinacionais
Circuitos combinacionaisCircuitos combinacionais
Circuitos combinacionais
 
O Fontismo
O FontismoO Fontismo
O Fontismo
 
O Antigo Regime
O Antigo RegimeO Antigo Regime
O Antigo Regime
 
H2 o caso português
H2 o caso portuguêsH2 o caso português
H2 o caso português
 
Loucos anos 20
Loucos anos 20Loucos anos 20
Loucos anos 20
 
A laicização do Estado
A laicização do Estado  A laicização do Estado
A laicização do Estado
 
Ge protecao diferencial
Ge protecao diferencialGe protecao diferencial
Ge protecao diferencial
 
Mercantilismo
Mercantilismo Mercantilismo
Mercantilismo
 
Tabela coelba
Tabela coelbaTabela coelba
Tabela coelba
 
[HAVC] Surrealismo: António Pedro
[HAVC] Surrealismo: António Pedro[HAVC] Surrealismo: António Pedro
[HAVC] Surrealismo: António Pedro
 
Primeira república
Primeira repúblicaPrimeira república
Primeira república
 
Resumo sobre a a matéria (O iluminismo e as reformas pombalinas) de 8ºano.
Resumo sobre a a matéria (O iluminismo e as reformas pombalinas) de 8ºano.Resumo sobre a a matéria (O iluminismo e as reformas pombalinas) de 8ºano.
Resumo sobre a a matéria (O iluminismo e as reformas pombalinas) de 8ºano.
 
Caricaturas da 1ª República
Caricaturas da 1ª RepúblicaCaricaturas da 1ª República
Caricaturas da 1ª República
 
Colonialismo e imperialismo
Colonialismo e imperialismoColonialismo e imperialismo
Colonialismo e imperialismo
 

Destaque

liquid crystal display
liquid crystal displayliquid crystal display
liquid crystal display
Dinesh Pasi
 

Destaque (10)

Calculadora de 4 Dígitos em Arduíno
Calculadora de 4 Dígitos em ArduínoCalculadora de 4 Dígitos em Arduíno
Calculadora de 4 Dígitos em Arduíno
 
LCD Theory and Working Principles
LCD Theory and Working PrinciplesLCD Theory and Working Principles
LCD Theory and Working Principles
 
Arduino uno lcd display 16x2
Arduino uno lcd display 16x2Arduino uno lcd display 16x2
Arduino uno lcd display 16x2
 
Lcd interfacing
Lcd interfacingLcd interfacing
Lcd interfacing
 
Getting Started with Raspberry Pi and Arduino
Getting Started with Raspberry Pi and ArduinoGetting Started with Raspberry Pi and Arduino
Getting Started with Raspberry Pi and Arduino
 
Lcd with arduino uno
Lcd with arduino unoLcd with arduino uno
Lcd with arduino uno
 
Led Theory and Working Principles
Led Theory and Working PrinciplesLed Theory and Working Principles
Led Theory and Working Principles
 
Liquid Crystal Display (LCD)
Liquid Crystal Display (LCD)Liquid Crystal Display (LCD)
Liquid Crystal Display (LCD)
 
LCD Display
LCD DisplayLCD Display
LCD Display
 
liquid crystal display
liquid crystal displayliquid crystal display
liquid crystal display
 

Semelhante a Arduino genius com display lcd 16x2 usando i2 c

Compus Party - processing e arduino
Compus Party - processing e arduinoCompus Party - processing e arduino
Compus Party - processing e arduino
Campus Party Brasil
 

Semelhante a Arduino genius com display lcd 16x2 usando i2 c (20)

Treinamento arduino (1).pptx
Treinamento arduino (1).pptxTreinamento arduino (1).pptx
Treinamento arduino (1).pptx
 
Programa final
Programa finalPrograma final
Programa final
 
Introdução a plataforma arduino
Introdução a plataforma arduinoIntrodução a plataforma arduino
Introdução a plataforma arduino
 
Controle relés com Log, sensor hall e emergência
Controle relés com Log, sensor hall e emergênciaControle relés com Log, sensor hall e emergência
Controle relés com Log, sensor hall e emergência
 
Programa final
Programa finalPrograma final
Programa final
 
Mini Curso Introdutório ao Arduino
Mini Curso Introdutório ao ArduinoMini Curso Introdutório ao Arduino
Mini Curso Introdutório ao Arduino
 
Arduino - Parte 2.pdf
Arduino - Parte 2.pdfArduino - Parte 2.pdf
Arduino - Parte 2.pdf
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?
 
Compus Party - processing e arduino
Compus Party - processing e arduinoCompus Party - processing e arduino
Compus Party - processing e arduino
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
MiniCursoDeArduino
MiniCursoDeArduinoMiniCursoDeArduino
MiniCursoDeArduino
 
Arduino sist u_controlados_intro_eletrica_2019_keynote_novo
Arduino sist u_controlados_intro_eletrica_2019_keynote_novoArduino sist u_controlados_intro_eletrica_2019_keynote_novo
Arduino sist u_controlados_intro_eletrica_2019_keynote_novo
 
TDC2014 - Arduino Legacy
TDC2014 - Arduino LegacyTDC2014 - Arduino Legacy
TDC2014 - Arduino Legacy
 
Cartao referencia ccs
Cartao referencia ccsCartao referencia ccs
Cartao referencia ccs
 
Pic slides
Pic slidesPic slides
Pic slides
 
Workshop de Arduino
Workshop de ArduinoWorkshop de Arduino
Workshop de Arduino
 
Introdução ao arduino palestra
Introdução ao arduino palestraIntrodução ao arduino palestra
Introdução ao arduino palestra
 
Minicurso Arduino com Projetos Praticos - Jotacisio Oliveira
Minicurso Arduino com Projetos Praticos - Jotacisio OliveiraMinicurso Arduino com Projetos Praticos - Jotacisio Oliveira
Minicurso Arduino com Projetos Praticos - Jotacisio Oliveira
 
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfIntrodução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdf
 

Arduino genius com display lcd 16x2 usando i2 c

  • 1. Arduino:  Genius  com  display  LCD  16x2  usando  I2C       Este  projeto  foi  construído  para  a  matéria  de  Automação  e  Controle  de   Processos  do  Centro  Universitário  de  Volta  Redonda  –  UniFOA.     Falando  sobre  o  projeto,  ele  é  a  construção  do  jogo  conhecido  como  Simon  Says   (Genius),  com  apresentação  de  resultados  no  display  com  o  Arduino.     Primeiramente  iremos  detalhar  os  componentes  utilizados  na  construção  do   projeto:     Componentes:     1  x  Arduno  Uno     4  x  LEDs  (Cores  de  sua  preferência)   4  x  Resistores  330  Ohms   4  x  Push  Buttons   1  x  Display  LCD  16  x  2   1  x  CI  PCF8574AP  (Podem  ser  utilizados  outros  compatíveis)     Montagem  do  jogo:     O  jogo  foi  montado  com  base  no  tutorial  do  Mauro  Assis,  disponível  em   (http://labdegaragem.com/profiles/blogs/genius).  Como  o  arduino  uno  tem   limitação  de  portas  e  não  era  possível  conectar  um  display  para  mostrar  os   resultados  tivemos  que  fazer  breves  adaptações  no  projeto  original.     Sketch:      
  • 2.   Inclusão  da  Biblioteca  I2C  e  Pitches.h:     Pela  limitação  de  portas  foi  necessário  utilizar  o  PCF8574  para  expandir  as   portas  do  arduino.  No  site   (http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/  ).  Escolha  a  versão   mais  adequada  a  sua  versão  da  IDE  do  Arduino,  no  meu  caso  utilizei  a  biblioteca   para  a  versão  1.0.  Depois  de  baixado  a  biblioteca  descompacte  para  a  pasta   libraries  do  arduino,  então  ela  estará  disponível  para  ser  utilizada  através  da   IDE.     Outra  biblioteca  foi  necessária  na  construção  do  jogo.  A  pitches.h,  disponível  em:     (http://api.ning.com/files/zHb0ubf3UnFl5CVITtXvtbMG2zDlNhSnr2L1yrynJ1kx AyeMpfLDP94aIV*7WgVAORzwKixdYiJ2VXW9Vcl8JKq*sG3T1zSa/Piches.h).   Deverá  ser  feito  o  mesmo  procedimento  para  inclusão.   Código  do  Jogo:     Este  código  foi  adaptado  do  original  para  prover  o  suporte  a  tela:     #include  "pitches.h"   #include  <Wire.h>     #include  <LiquidCrystal_I2C.h>     #define  buzzer  3     #define  waitingStart      0     #define  playingSeq          1   #define  userTyping          3   #define  validatingSeq    4     #define  kred        11   #define  kyellow  10   #define  kgreen      9   #define  kwhite      8     #define  lred        7   #define  lyellow  6   #define  lgreen    5   #define  lwhite    4     #define  debugging  1     int  interval  =  500;   int  noSound  =  200;   int  seq[50];   int  posSeq  =  0;   int  posType  =  0;   int  state  =  waitingStart;     int  key  =  0;       LiquidCrystal_I2C  lcd(56,16,2);       void  setup()    
  • 3. {                                      pinMode(lred,  OUTPUT);                pinMode(lyellow,  OUTPUT);                pinMode(lgreen,  OUTPUT);                pinMode(lwhite,  OUTPUT);            pinMode(kred,  INPUT);          pinMode(kyellow,  INPUT);          pinMode(kgreen,  INPUT);          pinMode(kwhite,  INPUT);          noSound  =  0;      //    demo();      lcd.init();  //  initialize  the  lcd          //  Print  a  message  to  the  LCD.      lcd.backlight();      lcd.print("Simon  says");        playWrong();      noSound  =  50;      Serial.begin(9600);        randomSeed(analogRead(0));      generateSeq();   }     void  loop()  {      switch(state)      {      case  waitingStart:                interval  =  500;          if  (debugging)              Serial.println("waitingStart");              lcd.clear();          lcd.print("Aguardando...");          lcd.setCursor(0,  1);          lcd.print("Pressione  botao");          key  =  readKey(false);          state  =  playingSeq;          return;          case  playingSeq:          if  (debugging)              Serial.println("playingSeq");              playSeq();          posType  =  0;          state  =  userTyping;          return;      case  userTyping:          lcd.clear();          lcd.setCursor(0,  0);          lcd.print("Jogo  Iniciado");          if  (debugging)              Serial.println("userTyping");              key  =  1;          int  ok  =  true;          while(ok)          {              key  =  readKey(true);              if  (key  ==  0)                  break;              play(key-­‐4);  
  • 4.            ok  =  validateSeq(key);              if  (debugging)              {                  Serial.print("ok=");                  Serial.println(ok);              }              if  (ok)              {                  if  (posType  ==  posSeq)                  {                      delay(1000);                      posSeq++;                      state  =  playingSeq;                      interval  =  interval  *  0.95;                      return;                  }                      else                  {                      posType++;                  }                                      }          }                      lcd.clear();          lcd.setCursor(0,  0);          lcd.print("Sua  pontuacao:");          lcd.setCursor(0,  1);          lcd.print(posSeq);          Serial.print("Voce  fez  ");          Serial.println(posSeq);          playWrong();          generateSeq();          state  =  waitingStart;          return;                  }   }     int  validateSeq(int  key)   {      return  (key-­‐4)  ==  seq[posType];  //  (key  -­‐4)  =  key  to  LED   }       int  readKey(int  validateMilis)   {      unsigned  long  ms  =  millis();      int  value  =  LOW;      while(value  ==  LOW)      {          for  (int  i  =  kred;  i  >=  kwhite;  i-­‐-­‐)          {              if  (validateMilis)                  if  ((millis()  -­‐  ms)  >  3000)                  {                      if  (debugging)                          Serial.println("Timeout");                        return  0;                  }              value  =  digitalRead(i);  
  • 5.            if  (value  ==  HIGH)              {                  return  i;              }          }      }   }     void  playPich(int  pich,  int  duration)   {      tone(buzzer,  pich);      delay(duration);      noTone(buzzer);   }     void  playWrong()   {      int  ritym  =  500;      Serial.println("Play  Wrong");        //        for(int  i  =  0;  i  <  2;  i++)      //        {      digitalWrite(lred,  HIGH);      digitalWrite(lyellow,  HIGH);      digitalWrite(lgreen,  HIGH);      digitalWrite(lwhite,  HIGH);      playPich(NOTE_A3,  ritym);      playPich(NOTE_A3,  ritym);      playPich(NOTE_A3,  ritym);      playPich(NOTE_F3,  ritym  *  3  /  4);      playPich(NOTE_C4,  ritym  *  1  /  4);      playPich(NOTE_A3,  ritym);      playPich(NOTE_F3,  ritym  *  3  /  4);      playPich(NOTE_C4,  ritym  *  1  /  4);      playPich(NOTE_A3,  ritym  *  2);      playPich(NOTE_E4,  ritym);      playPich(NOTE_E4,  ritym);      playPich(NOTE_E4,  ritym);      playPich(NOTE_F4,  ritym  *  3  /  4);      playPich(NOTE_C4,  ritym  *  1  /  4);      playPich(NOTE_GS3,  ritym);      playPich(NOTE_F3,  ritym  *  3  /  4);      playPich(NOTE_C4,  ritym  *  1  /  4);      playPich(NOTE_A3,  ritym  *  2);      digitalWrite(lred,  LOW);      digitalWrite(lyellow,  LOW);      digitalWrite(lgreen,  LOW);      digitalWrite(lwhite,  LOW);      noTone(buzzer);      delay(500);      //        }       }     void  demo()   {      interval  =  500;      while(interval  >  5)      {          play(lred);          play(lyellow);  
  • 6.        play(lgreen);          play(lwhite);          interval  =  interval  /  1.5;      }   }     void  blink(int  led,  int  pich)   {      digitalWrite(led,  HIGH);      tone(buzzer,pich);      delay(interval);      digitalWrite(led,  LOW);      noTone(buzzer);      delay(noSound);   }     void  play(int  pich)   {      switch(pich)      {      case  7:          blink(lred,NOTE_C4);          break;      case  6:          blink(lyellow,NOTE_E4);          break;      case  5:          blink(lgreen,NOTE_G4);          break;      case  4:          blink(lwhite,NOTE_AS4);          break;      }       }     void  generateSeq()   {      posSeq  =  0;      if  (debugging)          Serial.println("generateSeq");      int  note;      for  (int  i  =  0;  i  <  50;  i++)      {          seq[i]  =  random(4)  +  4;          if  (debugging)              Serial.println(seq[i]);      }   }     void  playSeq()   {      for  (int  i  =  0;  i  <=  posSeq;  i++)      {          play(seq[i]);      }   }      
  • 7. Divulgação:     O  vídeo  com  divulgação  do  projeto  pode  ser  encontrado  em:   http://www.youtube.com/watch?v=MueJwG-­‐1vKM     Grupo:     Thiago  Figueredo  Pereira     Rodrigo  de  Almeida  Gustavo     Luiz  Fernando  de  Moura   Leandro  Ramos     Referências:     http://labdegaragem.com/profiles/blogs/genius     http://labdegaragem.com/profiles/blogs/tutorial-­‐lcd-­‐16x2-­‐com-­‐ pcf8574-­‐e-­‐ arduino?id=6223006%3ABlogPost%3A137664&page=1#comments     http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/     http://www.nxp.com/documents/data_sheet/PCF8574.pdf