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

MAX72XX LED 매트릭스 디스플레이 소행성 게임

구성품 및 소모품

Arduino Mega 2560
× 1
Maxim 통합 MAXREFDES99# MAX7219 디스플레이 드라이버 실드
× 1
SparkFun 푸시버튼 스위치 12mm
× 2
부저
× 1
브레드보드(일반)
× 1

이 프로젝트 정보

이것은 MAX72XX LED 매트릭스를 디스플레이로, 2개의 마이크로 스위치를 버튼으로, 활성 부저를 음향 효과로 사용하는 간단한 게임입니다.

당신은 우주선이고 떨어지는 소행성과의 접촉을 피해야 합니다. 게임은 시간이 지날수록 빨라집니다. 마지막에 생존한 시간을 보여주는 점수가 표시됩니다.

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

코드

<울>
  • 소행성 게임 코드
  • 소행성 게임 코드Arduino
    <사전>/************************************************ ********** * MAX72XX LED-Matrix를 이용한 간단한 게임입니다. * 당신은 우주선이고 떨어지는 소행성과의 접촉을 피해야 합니다. * * (c) Joshua Weßner의 2018년 * * * ************************************** *****************///Eberhard Fahle의 LedControl// 참조:http://wayoda.github.io/LedControl/#include "LedControl.h"/* 지금 작업할 LedControl이 필요합니다. ***** 이 핀 번호는 하드웨어에서 작동하지 않을 수 있습니다. ***** 핀 12는 DataIn에 연결되어 있습니다. 핀 11은 CLK에 연결되어 있습니다. 핀 10은 LOAD에 연결되어 있습니다. MAX72XX는 하나만 있습니다. */LedControl lc=LedControl(12,11,10,1);/************************************ ***************************** * 전역 변수 */ /* 디스플레이 업데이트 간의 지연 */unsigned long delaytime=1000; /* 점수 표시 */String scoreString;int score;int 수백;String scoreStr;String scoreArr[] ={"" ,"" ,"" };/* 제어용 마이크로 스위치 */int pinLeft =2;int pinRight =3, 휘발성 서명되지 않은 긴 buttonPressed, int buttonDelay =150, //접촉 바운스휘발성 bool gameOver =false;/* 게임의 "리듬", im 밀리초 */int tick;int tickCounter =1;/* 타임스탬프 */unsigned long now;/* display */int ship; /* 초기 선박 위치 */int columns[] ={0,0,0,0,0,0,0,0}; // 8개의 열, 모든 int는 행 1-8.int randomInt;/************************************ ***************************** * 설정 */void setup() { /* 초기화 중 */ gameOver =false; 수백 =0; scoreArr[0] =""; scoreArr[1] =""; scoreArr[2] =""; 점수 =0; 틱 =300; 틱 카운터 =1; 배 =3; 지금 =millis(); 버튼 누름 =밀리(); randomSeed(analogRead(15)); // 더 나은 난수 for(int i =0; i<8; i++) columns[i] =0; // 디버깅 // Serial.begin(9600); // Serial.print(열[0]); /* MAX72XX는 시작 시 절전 모드에 있으므로 웨이크업 호출을 수행해야 합니다. */ lc.shutdown(0,false); /* 밝기를 중간 값으로 설정 */ lc.setIntensity(0,1); /* 디스플레이를 지우고 */ lc.clearDisplay(0); 핀모드(핀왼쪽, INPUT_PULLUP); 핀모드(핀오른쪽, INPUT_PULLUP); /* 인터럽트에 연결 버튼 누르기 */ attachInterrupt(digitalPinToInterrupt(pinLeft), left, FALLING); attachInterrupt(digitalPinToInterrupt(pinRight), 오른쪽, FALLING); }/************************************************ ************** * 왼쪽 버튼 누름 처리 */void left(){ if(millis() - buttonPressed> buttonDelay) // 스위치 접점 바운스 처리 { if(ship !=0) 배--; 그렇지 않으면 배 =7; lc.clearDisplay(0); 버튼 누름 =밀리(); } // 게임이 끝난 후 버튼을 누르면 게임이 다시 시작됩니다. if(gameOver ==true){ gameOver =false; 설정(); }}/************************************************** *************** * 오른쪽 버튼 누름 처리 */void right(){ if(millis() - buttonPressed> buttonDelay) // 스위치 접점 바운스 처리 { if(ship !=7 ) 배송++; 그렇지 않으면 선박 =0; lc.clearDisplay(0); 버튼 누름 =밀리(); } // 게임이 끝난 후 버튼을 누르면 게임이 다시 시작됩니다. if(gameOver ==true){ gameOver =false; 설정(); } }/**************************************************** *************** * 루프 */void loop() { if(millis() - now> tick){ // 모든 틱을 수행합니다 // 점수는 다음과 같습니다. 살아남은 틱 수 점수++; 지금 =millis(); if(tickCounter ==1){ //매 4번째 틱 // 시간이 지남에 따라 게임을 더 빠르게 만듭니다. tick =tick/1.02; // 무작위로 열 선택 randomInt =random(0, 8); // 열에 소행성이 없으면 1행에 생성합니다. if(columns[randomInt] ==​​0){ columns[randomInt] =1; } } if(tickCounter !=4) tickCounter++; 그렇지 않으면 틱 카운터 =1; // 모든 열에 대해 수행 for(int i =0; i<8; i++){ if(columns[i] ==10) // 표시되지 않을 때 소행성을 삭제합니다. columns[i] =0; if(columns[i] !=0) // 소행성을 아래로 떨어뜨립니다. columns[i]++; } lc.clearDisplay(0); } /* 디스플레이에 쓰기 */ // 배송 lc.setLed(0, 7, ship, true); // 소행성 for(int i =0; i<8; i++){ if(columns[i]> 0) lc.setLed(0, columns[i]-2, i, true); lc.setLed(0, 열[i]-3, i, true); } // 우주선과 소행성 충돌 감지 if(columns[ship] ==10 or columns[ship] ==9){ lc.clearDisplay(0); // 폭발 애니메이션 for(int i =0; i<4; i++){ lc.setLed(0,7,ship+i,true); lc.setLed(0,7,ship-i,true); lc.setLed(0,7-i,ship+i,true); lc.setLed(0,7-i,ship-i,true); lc.setLed(0,7-1.5*i,ship,true); // 폭발음 unsigned long time =millis(); int randomSound=1000; while(millis() - 시간 <=250) { randomSound--; 톤(9, random(randomSound, 1000)); // 다른 소리에 대해 random()의 매개변수를 변경합니다. } lc.clearDisplay(0); 노톤(9); } 지연(500); /* 점수 표시 */ scoreStr =String(score); // 점수에서 한 자리수 얻기 int scoreArr[0] =scoreStr.charAt(0); scoreArr[1] =scoreStr.charAt(1); scoreArr[2] =scoreStr.charAt(2); // 행렬은 최대 2자리(최대 99)까지만 표시할 수 있습니다. if(score <100){ for(int i =0; i<2; i++){ if(scoreArr[i] =="0") draw0( 1+i*4); if(scoreArr[i] =="1") draw1(1+i*4); if(scoreArr[i] =="2") draw2(1+i*4); if(scoreArr[i] =="3") draw3(1+i*4); if(scoreArr[i] =="4") draw4(1+i*4); if(scoreArr[i] =="5") draw5(1+i*4); if(scoreArr[i] =="6") draw6(1+i*4); if(scoreArr[i] =="7") draw7(1+i*4); if(scoreArr[i] =="8") draw8(1+i*4); if(scoreArr[i] =="9") draw9(1+i*4); } } // 점수가> 100이면 점수의 마지막 두 자리만 표시 else{ for(int i =1; i<3; i++){ if(scoreArr[i] =="0") draw0(1+( 나-1)*4); if(scoreArr[i] =="1") draw1(1+(i-1)*4); if(scoreArr[i] =="2") draw2(1+(i-1)*4); if(scoreArr[i] =="3") draw3(1+(i-1)*4); if(scoreArr[i] =="4") draw4(1+(i-1)*4); if(scoreArr[i] =="5") draw5(1+(i-1)*4); if(scoreArr[i] =="6") draw6(1+(i-1)*4); if(scoreArr[i] =="7") draw7(1+(i-1)*4); if(scoreArr[i] =="8") draw8(1+(i-1)*4); if(scoreArr[i] =="9") draw9(1+(i-1)*4); } // 점수의 첫 번째 숫자("백")는 점으로 표시됩니다. 100마다 한 점. for(int i =1; i<10; i++){ if(scoreArr[0] ==String(i)) 수백 =i; } for(int i =1; i <=수백; i++){ lc.setLed(0,0,i-1,true); lc.setLed(0,1,i-1,true); 지연(200); } } 게임 오버 =참; while(gameOver ==true){ // 버튼 누름을 기다리는 것 외에는 아무것도 하지 않음 } } }////////////////////////////// 그리기 점수 자릿수 /////////////////////////////////////////void draw1(int position){ lc.setColumn(0,0+위치,B00001000); lc.setColumn(0,1+위치,B00011111); } 무효 draw2(int 위치){ lc.setColumn(0,0+위치,B00010111); lc.setColumn(0,1+위치,B00010101); lc.setColumn(0,2+위치,B00011101); }무승부 draw3(int 위치){ lc.setColumn(0,0+위치,B00010001); lc.setColumn(0,1+위치,B00010101); lc.setColumn(0,2+위치,B00011111); }무승부 draw4(int 위치){ lc.setColumn(0,0+위치,B00011100); lc.setColumn(0,1+위치,B00000100); lc.setColumn(0,2+위치,B00011111); }무효 draw5(int 위치){ lc.setColumn(0,0+위치,B00011101); lc.setColumn(0,1+위치,B00010101); lc.setColumn(0,2+위치,B00010111); } 무효 draw6(int 위치){ lc.setColumn(0,0+위치,B00011111); lc.setColumn(0,1+위치,B00010101); lc.setColumn(0,2+위치,B00010111); } 무효 draw7(int 위치){ lc.setColumn(0,0+위치,B00010000); lc.setColumn(0,1+위치,B00010011); lc.setColumn(0,2+위치,B00011100); }무효 draw8(int 위치){ lc.setColumn(0,0+위치,B00011111); lc.setColumn(0,1+위치,B00010101); lc.setColumn(0,2+위치,B00011111); }무효 draw9(int 위치){ lc.setColumn(0,0+위치,B00011101); lc.setColumn(0,1+위치,B00010101); lc.setColumn(0,2+위치,B00011111); } 무효 draw0(int 위치){ lc.setColumn(0,0+위치,B00011111); lc.setColumn(0,1+위치,B00010001); lc.setColumn(0,2+위치,B00011111); }

    회로도


    제조공정

    1. 체스
    2. 핀볼
    3. 축구
    4. Arduino Pong 게임 - OLED 디스플레이
    5. DIY 37 LED 룰렛 게임
    6. MAX7219가 있는 24x16 매트릭스의 Arduino Pong 게임
    7. 수제 16x8 매트릭스의 Arduino Nano 테트리스 게임
    8. 조이스틱 게임
    9. LED 매트릭스 + 모션 센서 도어 디스플레이 [Arduino Holiday]
    10. 사운드에 의한 8x LED 조명