산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Dedge The Defs!

구성품 및 소모품

저항 10k 옴
하나는 LCD 화면의 대비용이고 다른 하나는 버튼용입니다.중요:저항을 당겨서 사용 매뉴얼에 표시된 풀업 구성과 반대되는 -다운 구성.
× 2
저항 1k 옴
LCD 화면의 대비용
× 1
SparkFun 푸시버튼 스위치 12mm
× 1
Adafruit Standard LCD - 파란색 바탕에 16x2 흰색
× 1
Arduino UNO
× 1
점퍼 와이어(일반)
× 1

이 프로젝트 정보

배경

더 큰 프로젝트에 참여했지만 지연이 있었습니다. 그래서 나는 내 오래된 Arduino 키트로 뭔가를 하기로 결정했습니다. 나는 전에 LCD 화면을 사용한 적이 없습니다. 그래서 스크린에 핀을 납땜했습니다(납땜을 처음 배웠습니다).

처음에는 온라인 매뉴얼에서 코드를 복사하여 업로드했습니다. 텍스트만 표시하고 좌우로 움직였습니다. 이것이 제가 LiquidCrystal 라이브러리를 소개받았을 때였습니다. 나는 숫자 "0"이 화면 주위를 맴돌게 만드는 코드를 작성했는데 꽤 재미있었습니다. 그때는 좀 더 복잡한 게임, 게임을 만들고 싶다는 생각이 들었습니다. 나는 arduino에서 lcd 게임을 검색했고 3개의 게임만 찾았습니다. 그 중 2개는 저에게 효과적이었습니다. 이 게임의 코드는 너무 복잡해서 제가 이해할 수 없었습니다. 그래서 저는 쉬운 게임을 만들기로 결정했습니다.

설정

아래 회로도와 같이 lcd 핀을 와이어로 arduino에 연결합니다.

10k 전위차계를 사용하여 대비를 조정하고 원하는 대비로 조정했습니다. 멀티미터로 핀 사이의 저항을 측정하고 LCD의 VO 핀에 적절한 저항(1k 및 10k 옴 직렬)을 사용했습니다.

브레드보드에 푸시 버튼을 놓고 입력 와이어를 arduino의 핀 8에 연결합니다. 코드를 arduino에 업로드하면 바로 사용할 수 있습니다.

참고:회로도와 같이 풀다운 모드에서 버튼 저항을 사용하십시오.

게임하기

이 게임에서 당신은 공을 다리에 대고 있는 축구 선수입니다. 당신에게 접근하는 수비수들이 있을 것이고, 당신은 단순히 그들을 피해야 합니다.

소개가 끝나면 요청을 받으면 버튼을 누르십시오. 수비수가 충분히 가까워지면 버튼을 눌러 점프합니다. 다음 수비수가 더 빠른 속도로 접근하며 10명의 수비수에게 계속됩니다.

추신:처음에는 "0"을 컨트롤로 사용하고 "1"을 장애물로 사용했습니다. 2018 FIFA 월드컵이 한창 진행 중이고 메시의 팬이 되어 주제를 바꾸게 되었습니다.

온라인 생성기를 사용하여 플레이어와 수비수에 대한 글리프를 만들었습니다. 링크는 다음과 같습니다. https://omerk.github.io/lcdchargen/

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • lcd_1.ino
  • lcd_1.ino아두이노
    /* def를 피하세요!! 만든이:Shreyas R P 만든이:2018-06-21 E-mail ID:[email protected] 버튼이 있는 16x2 LCD용 간단한 게임입니다. 게임을 개선하거나 변경하는 경우 다음 행 아래에 크레딧을 추가하세요. 즐기세요 :) Copyright (C) 2018 Shreyas RP 이 프로그램은 무료 소프트웨어입니다. GNU 조건에 따라 재배포 및/또는 수정할 수 있습니다. 자유 소프트웨어 재단(Free Software Foundation)에서 발행한 일반 공중 사용 허가서, 라이선스 버전 3 또는 (귀하의 선택에 따라) 이후 버전. 이 프로그램은 유용하기를 바라며 배포되지만 어떠한 보증도 하지 않습니다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증도 없이. 자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오. 이 프로그램과 함께 GNU General Public License 사본을 받았어야 합니다. 그렇지 않은 경우 를 참조하십시오. -------------------------------------------------- ------------------------------------------- */#include  const int btn =8; //버튼 입력 핀//디스플레이에 텍스트* introText[]={"Dodge the defs!!","Created on:", "Hit the button..."};//variable Declarationsint game=0;int buttonPress =0; int buttonState=0;int 장애물Pos;int obsDelay;int 점수=0; unsigned long lastDebounceTime =0; // 마지막으로 출력 핀이 토글된 시간dunsigned long debounceDelay =50; INT lastButtonState =LOW // GRAPHICSbyte runnin1 [8] =를 {0b01100, 0b01100, 0b00000, 0b11100, 0b01110, 0b01100, 0b11110, 0b00011} 바이트 runnin2 [8] ={0b00110, 0b00110, 0b00000, 0b00111, 0b01110, 0b00110, 0b01110, 0b00101} 바이트 점프 [8] ={0b00100, 0b01100, 0b11100, 0b01110, 0b01100, 0b11111, 0b00000, 0b00001} 바이트 def1 [8] ={0b00100, 0b00110, 0b00111, 0b01110, 0b00110, 0b01111, 0b01000, 0b00000} 바이트 def2 [8] ={0b00100, 0b00110, 0b00111, 0b01110, 0b00110, 0b00110, 0b00110, 0b00010} 바이트 슬라이드 [8] ={0b00000, 0b00000, 0b00011, 0b00011, 0b00000, 0b01111, 0b11111, 0b00000}; LiquidCrystal lcd(4,6,10,11,12,13); 무효 설정() { Serial.begin(9600); 핀모드(btn,입력); lcd.begin(16,2); lcd.createChar(0,runnin1); lcd.createChar(1,runnin2); lcd.createChar(2, 점프); lcd.createChar(3,def1); lcd.createChar(4,def2); lcd.createChar(5, 슬라이드); buttonState=digitalRead(btn);}무효 루프(){ 소개(); 동안(게임==1) ballActive(); 최종 단계(); } 무효 소개() { 점수=0; lcd.clear(); lcd.print(소개텍스트[0]); //introText를 선언하는 대신 " ... "를 사용하여 텍스트를 직접 인쇄할 수 있습니다. lcd.setCursor(7,1); lcd.print("SRP888 기준"); 지연(2000); lcd.clear(); lcd.print(소개 텍스트[1]); lcd.setCursor(0,1); lcd.print("2018-06-21"); 지연(2000); lcd.clear(); while(button()!=1) //사용자가 버튼을 누를 때까지 기다리며 그 때까지 텍스트를 표시합니다. { lcd.setCursor(0,0); lcd.print(소개 텍스트[2]); 지연(100); } if(버튼()==1) 게임=1; } void reset() { if(obstaclePos%2==0) //선수가 실행 중임을 나타내기 위해 한 포즈에서 다른 포즈로 플레이어의 디스플레이를 변경합니다. { lcd.clear(); lcd.setCursor(0,1); lcd.write(바이트(0)); } else { lcd.clear(); lcd.setCursor(0,1); lcd.write(1); } } 무효 ballActive() { obsDelay=200; //수비수에 대한 초기 딜레이 barrierPos=15; //16x2 lcd이고 인덱스가 0부터 시작하기 때문입니다. while(game==1) { reset(); if(button()==1) //버튼이 눌렸을 때. { lcd.clear(); lcd.setCursor(0,0); lcd.write(2); // 플레이어가 점프하는 장애물을 인쇄합니다(obstaclePos); // 방어자 delay(400) 출력; //디스플레이가 빠르게 사라지고 눈에 띄지 않게 하기 위함입니다. lcd.clear(); lcd.setCursor(0,1); lcd.write(1); // 플레이어를 지상으로 되돌려 출력합니다. 장애물(obstaclePos); //수비수 출력 } else { if(obstaclePos!=0) //수비수가 플레이어에게 접근하지 않았다면 계속 진행합니다. { 초기화(); 장애물(obstaclePos); } else if(obstaclePos==0) ​​// 방어자가 0 위치에 있는 경우, 즉 그는 지상에 있을 때 플레이어에게 접근한 다음 게임을 종료합니다. { 게임=0; 부서지다; } } 장애물포스--; //수비수를 플레이어에게 더 가깝게 만듭니다. if(obstaclePos<0) //플레이어가 성공적으로 회피하면 { obsDelay=obsDelay-20; //지연 감소(속도 증가), barrierPos=15; //수비수를 시작 위치로 이동, score++; //그리고 점수를 1 증가시킵니다. } if(obsDelay==0) // 10명의 플레이어가 회피했다면(200/20=10 때문에), 게임을 종료합니다 game=0; 지연(obsDelay); } }int 버튼() { 정수 읽기 =digitalRead(btn); // 노이즈 또는 누름으로 인해 스위치가 변경된 경우:if (reading !=lastButtonState) { // 디바운싱 타이머 재설정 lastDebounceTime =millis(); } if ((millis() - lastDebounceTime)> debounceDelay) { buttonState =읽기; if (buttonState ==HIGH) { lastButtonState =읽기; 반환 1; } } lastButtonState =reading;}void 장애물(int i){ if(obstaclePos%2==0&&장애물포스>2) //수비수가 플레이어로부터 멀리 떨어져 있으면, 그에게 실행을 보여줍니다 { lcd.setCursor(i,1); lcd.write(3); } else if(obstaclePos%2!=0&&장애물포스>2) { lcd.setCursor(i,1); lcd.write(4); } else //그가 플레이어와 2보 가까이 있으면 슬라이딩을 보여줍니다. { lcd.setCursor(i,1); lcd.write(5); }} endGame(){ if(score==10) { lcd.clear(); lcd.print("축하합니다!"); lcd.setCursor(0,1); lcd.print("모두 이겼습니다."); 지연(3000); } else if(점수<3) { lcd.clear(); lcd.print("귀찮아"); lcd.setCursor(0,1); lcd.print("점수:"); lcd.print(점수); 지연(3000); } else if(점수<6) { lcd.clear(); lcd.print("나쁘지 않아요!"); lcd.setCursor(0,1); lcd.print("점수:"); lcd.print(점수); 지연(3000); } else { lcd.clear(); lcd.print("대단합니다!"); lcd.setCursor(0,1); lcd.print("점수:"); lcd.print(점수); 지연(3000); }}

    회로도


    제조공정

    1. 시제품에 대한 찬가
    2. 제품 디자인의 과제
    3. 테트로드
    4. Raspberry Pi의 온도 모니터링
    5. 전시:원시 전시
    6. 드론 파이
    7. 아르키메데스:AI 로봇 올빼미
    8. 전략적 데이터 소싱은 혼란을 피하는 현대적인 방법입니다
    9. 산업용 터치 스크린 수리의 비밀
    10. 최고의 잎 송풍기