Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Dodge The Defs!

Componentes e suprimentos

Resistor 10k ohm
Um para o contraste da tela LCD, outro para o botão.Importante:Use o resistor para puxar configuração-down, ao contrário da configuração pull-up mostrada no manual.
× 2
Resistor 1k ohm
Para o contraste da tela LCD.
× 1
SparkFun Botão de pressão 12 mm
× 1
Adafruit LCD padrão - 16x2 branco em azul
× 1
Arduino UNO
× 1
Fios de jumpers (genérico)
× 1

Sobre este projeto





Antecedentes


Eu fazia parte de um projeto maior, mas houve um atraso. Então decidi fazer algo com meu antigo kit Arduino. Nunca usei a tela LCD antes. Então, soldei os pinos na tela (aprendi a soldar pela primeira vez).

Inicialmente, copiei o código de um manual online e fiz o upload. Ele apenas exibia texto, movendo-se para a direita e para a esquerda. Foi quando fui apresentado à biblioteca LiquidCrystal. Eu escrevi um código que fazia o número "0" ricochetear na tela, foi muito divertido. Foi quando pensei em fazer algo um pouco mais complexo, um jogo. Pesquisei jogos de lcd no Arduino e encontrei apenas 3 jogos, 2 dos quais funcionaram para mim. O código para esses jogos era muito complexo para eu entender, então decidi criar um jogo fácil.





Configurando


Conecte os pinos lcd ao arduino com fios, conforme mostrado no esquema abaixo.

Usei um potenciômetro de 10k para ajustar o contraste e ajustei para o contraste que eu queria. Eu medi a resistência entre os pinos com um multímetro e usei resistores apropriados (1k e 10k ohms em série) para o pino VO do LCD.

Coloque um botão na placa de ensaio e conecte o fio de entrada ao pino 8 no arduino. Faça o upload do código para o seu arduino e você estará pronto para começar.

Nota:Use o resistor de botão no modo pull-down, conforme mostrado no esquema.





Jogar o jogo


Neste jogo, você é um jogador de futebol americano com a bola nas pernas. Você terá defensores se aproximando de você, e você deve simplesmente evitá-los.

Após a introdução, aperte o botão quando solicitado. Quando o defensor chegar perto o suficiente, aperte o botão para pular. O próximo defensor se aproximará com maior velocidade, e isso continua por 10 defensores.

PS:Inicialmente usei "0" como controle e "1" como obstáculo. Como a Copa do Mundo FIFA 2018 está acontecendo e como sou um fã de Messi, decidi mudar o tema.

Fiz os glifos para o jogador e o defensor usando um gerador online, link fornecido aqui:https://omerk.github.io/lcdchargen/

Código

  • lcd_1.ino
lcd_1.ino Arduino
 / * Desvie dos defs !! Criado por:Shreyas R P Criado em:21-06-2018 ID do e-mail:[email protected] Um jogo simples para LCD 16x2 com um botão. Se você fizer alguma melhoria ou alteração no jogo, por favor, adicione seus créditos abaixo da linha:Aproveite :) Copyright (C) 2018 Shreyas RP Este programa é um software livre:você pode redistribuí-lo e / ou modificá-lo nos termos da GNU Licença Pública Geral conforme publicada pela Free Software Foundation, seja a versão 3 da Licença ou (conforme sua opção) qualquer versão posterior. Este programa é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a GNU General Public License para mais detalhes. Você deve ter recebido uma cópia da GNU General Public License junto com este programa. Caso contrário, consulte . -------------------------------------------------- ------------------------------------------- * / # inclui  const int btn =8; // pino de entrada do botão // textos para displaychar * introText [] ={"Desvie dos defs !!", "Criado em:", "Aperte o botão ..."}; // variável declarationsint game =0; int buttonPress =0; int buttonState =0; int obstaclePos; int obsDelay; int score =0; sem sinal longo lastDebounceTime =0; // a última vez que o pino de saída foi alternado para assinar long debounceDelay =50; int lastButtonState =LOW; // GRAPHICSbyte runnin1 [8] ={0b01100, 0b01100, 0b00000, 0b11100, 0b01110, 0b01100, 0b11110, 0b00011}; byte runnin2 [8] ={0b001b10, 0b001, 011000, 011000 0b01110, 0b00101}; salto de byte [8] ={0b00100, 0b01100, 0b11100, 0b01110, 0b01100, 0b11111, 0b00000, 0b00001}; byte def1 [8] ={0b00100, 0b0010110, 0b0010111b011000, 0b011000 0b00000}; byte def2 [8] ={0b00100, 0b00110, 0b00111, 0b01110, 0b00110, 0b00110, 0b00110, 0b00010}; byte slide [8] ={0b00000, 0b00000, 0b00011, 0b00011, 0b001000, 0b0011}; LiquidCrystal lcd (4,6,10,11,12,13); configuração de vazio () {Serial.begin (9600); pinMode (btn, INPUT); lcd.begin (16,2); lcd.createChar (0, runnin1); lcd.createChar (1, runnin2); lcd.createChar (2, salto); lcd.createChar (3, def1); lcd.createChar (4, def2); lcd.createChar (5, slide); buttonState =digitalRead (btn);} void loop () {intro (); while (jogo ==1) ballActive (); endGame (); } void intro () {pontuação =0; lcd.clear (); lcd.print (introText [0]); // Em vez de declarar introText, você pode imprimir o texto diretamente com "..." lcd.setCursor (7,1); lcd.print ("Por SRP888"); atraso (2000); lcd.clear (); lcd.print (introText [1]); lcd.setCursor (0,1); lcd.print ("21-06-2018"); atraso (2000); lcd.clear (); while (button ()! =1) // esperar que o usuário aperte o botão, exibe o texto até isso. {lcd.setCursor (0,0); lcd.print (introText [2]); atraso (100); } if (botão () ==1) jogo =1; } void reset () {if (obstaclePos% 2 ==0) // Mudar a exibição do jogador de uma pose para outra para mostrar que ele está correndo, de forma inteligente usando obstaclePos. {lcd.clear (); lcd.setCursor (0,1); lcd.write (byte (0)); } else {lcd.clear (); lcd.setCursor (0,1); lcd.write (1); }} void ballActive () {obsDelay =200; // atraso inicial para o defensor obstaclePos =15; // visto que é um lcd 16x2 e o índice começa em 0. while (game ==1) {reset (); if (button () ==1) // se o botão for pressionado. {lcd.clear (); lcd.setCursor (0,0); lcd.write (2); // imprime o obstáculo saltando do jogador (obstaclePos); // imprime o atraso do defensor (400); // Isso evita que a tela desapareça rapidamente e passe despercebida. lcd.clear (); lcd.setCursor (0,1); lcd.write (1); // imprime o jogador de volta ao solo obstacle (obstaclePos); // imprime o defensor} else {if (obstaclePos! =0) // se o defensor não se aproximou do jogador, então continue. { Redefinir(); obstáculo (obstaclePos); } else if (obstaclePos ==0) // se o defensor estiver na posição 0, ou seja, ele se aproximou do jogador quando ele estava no chão, então encerrou o jogo. {jogo =0; pausa; }} obstaclePos--; // aproxima o defensor do jogador if (obstaclePos <0) // se o jogador se esquiva com sucesso, então, {obsDelay =obsDelay-20; // diminui o atraso (aumenta a velocidade), obstaclePos =15; // traz o defensor para a posição inicial, pontuação ++; // e aumentar a pontuação em 1.} if (obsDelay ==0) // se 10 jogadores foram evitados (porque 200/20 =10), então termina o jogo =0; atraso (obsDelay); }} botão int () {leitura int =digitalRead (btn); // Se a chave mudou, devido a ruído ou ao pressionar:if (reading! =LastButtonState) {// zera o temporizador de debouncing lastDebounceTime =millis (); } if ((millis () - lastDebounceTime)> debounceDelay) {buttonState =reading; if (buttonState ==HIGH) {lastButtonState =reading; return 1; }} lastButtonState =reading;} void obstacle (int i) {if (obstaclePos% 2 ==0 &&obstaclePos> 2) // se o defensor estiver longe do jogador, mostre-o correndo {lcd.setCursor (i, 1); lcd.write (3); } else if (obstaclePos% 2! =0 &&obstaclePos> 2) {lcd.setCursor (i, 1); lcd.write (4); } else // se ele estiver 2 passos perto do jogador, mostre-o deslizando {lcd.setCursor (i, 1); lcd.write (5); }} void endGame () {if (pontuação ==10) {lcd.clear (); lcd.print ("Parabéns!"); lcd.setCursor (0,1); lcd.print ("Você venceu todos"); atraso (3000); } else if (pontuação <3) {lcd.clear (); lcd.print ("Você é péssimo"); lcd.setCursor (0,1); lcd.print ("Pontuação:"); lcd.print (pontuação); atraso (3000); } else if (pontuação <6) {lcd.clear (); lcd.print ("Nada mal!"); lcd.setCursor (0,1); lcd.print ("Pontuação:"); lcd.print (pontuação); atraso (3000); } else {lcd.clear (); lcd.print ("Ótimo!"); lcd.setCursor (0,1); lcd.print ("Pontuação:"); lcd.print (pontuação); atraso (3000); }} 

Esquemas


Processo de manufatura

  1. Ode ao protótipo
  2. Os desafios do design de produto
  3. O Tetrodo
  4. Monitoramento de temperatura no Raspberry Pi
  5. Exposição:A Tela Primária
  6. O Drone Pi
  7. Arquimedes:A coruja robô AI
  8. Sourcing estratégico de dados é a maneira moderna de evitar interrupções
  9. O segredo para o reparo da tela de toque industrial
  10. O melhor soprador de folhas