SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Downloaden Sie, um offline zu lesen
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	
  
	
  
	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Vulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers DockerVulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers DockerFlorian Bobin
 
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...Saâd Zerhouni
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1Tarek MOHAMED
 
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミングYuto Takei
 
Chp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesChp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesLilia Sfaxi
 
Top 10 admissions coordinator interview questions and answers
Top 10 admissions coordinator interview questions and answersTop 10 admissions coordinator interview questions and answers
Top 10 admissions coordinator interview questions and answersgarijom
 
CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練Joseph Chiang
 
Alphorm.com Formation Laravel : Le Guide Complet du Débutant
Alphorm.com Formation Laravel : Le Guide Complet du DébutantAlphorm.com Formation Laravel : Le Guide Complet du Débutant
Alphorm.com Formation Laravel : Le Guide Complet du DébutantAlphorm
 

Was ist angesagt? (11)

Vulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers DockerVulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers Docker
 
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1
 
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
 
Chp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications MobilesChp3 - Architecture Logicielle des Applications Mobiles
Chp3 - Architecture Logicielle des Applications Mobiles
 
Cours php
Cours phpCours php
Cours php
 
Web services SOAP et REST
Web services  SOAP et RESTWeb services  SOAP et REST
Web services SOAP et REST
 
Top 10 admissions coordinator interview questions and answers
Top 10 admissions coordinator interview questions and answersTop 10 admissions coordinator interview questions and answers
Top 10 admissions coordinator interview questions and answers
 
CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練CSS 入門 - 前端工程開發實務訓練
CSS 入門 - 前端工程開發實務訓練
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Alphorm.com Formation Laravel : Le Guide Complet du Débutant
Alphorm.com Formation Laravel : Le Guide Complet du DébutantAlphorm.com Formation Laravel : Le Guide Complet du Débutant
Alphorm.com Formation Laravel : Le Guide Complet du Débutant
 

Andere mochten auch

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ínoValdemir S. M. Reis
 
LCD Theory and Working Principles
LCD Theory and Working PrinciplesLCD Theory and Working Principles
LCD Theory and Working PrinciplesRobo India
 
Arduino uno lcd display 16x2
Arduino uno lcd display 16x2Arduino uno lcd display 16x2
Arduino uno lcd display 16x2Robomart India
 
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 ArduinoChad Mairn
 
Led Theory and Working Principles
Led Theory and Working PrinciplesLed Theory and Working Principles
Led Theory and Working PrinciplesRobo India
 
liquid crystal display
liquid crystal displayliquid crystal display
liquid crystal displayDinesh Pasi
 

Andere mochten auch (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
 

Ähnlich wie Arduino Genius com LCD I2C

Arduino - Parte 2.pdf
Arduino - Parte 2.pdfArduino - Parte 2.pdf
Arduino - Parte 2.pdfprofwtelles
 
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?Embarcados
 
Compus Party - processing e arduino
Compus Party - processing e arduinoCompus Party - processing e arduino
Compus Party - processing e arduinoCampus Party Brasil
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoSamir Siqueira
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
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_novoFernando Passold
 
Cartao referencia ccs
Cartao referencia ccsCartao referencia ccs
Cartao referencia ccsLuciano Zica
 
Introdução ao arduino palestra
Introdução ao arduino palestraIntrodução ao arduino palestra
Introdução ao arduino palestraVitor Ferreira
 
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 OliveiraPotiLivre Sobrenome
 
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.pdfCliverRaimundo2
 

Ähnlich wie Arduino Genius com LCD I2C (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 LCD I2C

  • 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