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

Arduino 메모리 게임 만들기

구성품 및 소모품

Arduino UNO
× 1
SparkFun 330옴 저항기
4개만 필요합니다
× 1
SparkFun 10k 옴 저항기
4개만 필요합니다
× 1
SparkFun 모듬 LED
다른 색상의 LED 4개가 필요합니다.
× 1
SparkFun Mini 스피커
사운드에 신경 쓰지 않는다면 이것 없이도 할 수 있습니다.
× 1
SparkFun BreadBoard(전체 크기)
× 1
점퍼 와이어(일반)
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

"사이먼"이라는 게임을 기억하십니까? 내 또래의 많은 사람들(70년대생)이 게임을 하는 데 많은 시간을 할애했습니다. 게임은 간단했습니다. 순서대로 불이 켜지는 서로 다른 색상의 버튼 4개가 있으며 이 순서를 반복해야 했습니다. 매번 정답을 맞추면 게임은 마지막에 추가 색상으로 시퀀스를 다시 제공합니다.

오래 전에 Xmas용으로 하나 받았는데 이사를 하고 이사를 하고 또 이사를 해서 다른 곳으로 옮겨도 포장을 풀지 않는 많은 상자 중 하나에서 게임이 길을 잃습니다...

"어른"으로서 나는 아두이노의 즐거움을 발견했고, 그것으로 오랜 시간 낭비했던 친구를 되살릴 기회를 얻었습니다.

이 튜토리얼에서는 Arduino Uno 몇 개의 LED와 저항과 비교적 간단한 회로를 사용하여 유사한 게임을 만드는 방법을 보여줍니다.

프로그램 자체가 초보자에게는 다소 복잡할 수 있으므로 코드에서 수행하는 작업과 방법을 설명하려고 했습니다.

이 게임을 실행하는 가장 간단한 방법은 다음과 같습니다.

1) 그림과 같이 회로를 정확히 연결합니다. 전선의 색은 상관없으니 검은색 전선이 다 떨어져도 괜찮습니다. :)

2) 소스 코드를 즐겨 사용하는 Arduino 편집기에 붙여넣고 보드에 업로드합니다.

3) 게임 플레이

게임은 약 3초 후에 모든 LED가 5번 느리게 깜박이면서 시작됩니다.

하나 이상의 LED가 깜박이지 않으면 배선을 확인하십시오. 내 보드에서 아주 작은 버튼은 항상 제대로 위치하지 않고 저절로 튀어나오는 경향이 있습니다.

배선이 올바르면 작동하는 LED와 작동하지 않는 LED를 반전시켜 배선인지 LED 자체인지 확인하세요.

5번의 깜박임이 완료되면 하나의 LED가 켜집니다. 나는 당신에게 말할 수 없습니다, 그것은 놀라운 일입니다 :) 그 LED에 대한 버튼을 누르십시오. 이 LED가 다시 켜진 후 새 LED가 켜집니다. 순서대로 올바른 버튼을 누르십시오... 그것으로 내가 어디로 가는지 알 수 있습니다...

그러면 곧 모든 것이 빠르게 깜박이는 것을 볼 수 있습니다. 그것은 당신이 졌다는 것을 의미합니다. :D

주어진 마지막 시퀀스가 ​​재생되어 점수를 계산할 수 있으며 게임이 다시 시작됨을 나타내는 이전의 5번의 느린 깜박임이 뒤따릅니다.

각 버튼을 누를 수 있는 시간은 2초입니다.

저기요! 즐거운 시간 보내세요!

조금 더 어렵게 만들고 싶습니까? 코드의 맨 윗줄을 다른 값으로 변경하지 않는 이유는 무엇입니까?

#define PLAYER_WAIT_TIME 2000  

또는 LED가 있는 경우 다른 LED를 추가할 수 있습니다. 이를 위해 먼저 회로의 이 부분을 재현해야 합니다.

여기 주황색 선은 Arduino에서 사용하지 않는 핀으로 연결됩니다(0과 1은 피하세요)

그런 다음 코드에서 다음 줄을 수정합니다.

byte noPins =4byte 핀[] ={2, 13, 10, 8};  

핀 6에 하나의 LED를 추가하면 코드는 다음과 같이 됩니다.

byte noPins =5byte 핀[] ={2, 13, 10, 8, 6};  

Arduino 코드 작성을 위한 작은 팁:

void setup() { delay(3000); Serial.begin(9600); 초기화(); }  

setup() 함수의 첫 번째 명령문으로 짧은 지연을 넣으십시오. Arduino를 무한 루프로 만들거나 어떤 식으로든 잠그는 것은 매우 쉽습니다. 그런 일이 발생하면 짧은 지연으로 Arduino를 재설정하고 다시 잠기기 전에 빈 스케치를 업로드할 수 있습니다. .

나는 결국 이 작은 아이디어를 가지고 휴대용으로 만들었습니다...

비슷한(그러나 훨씬 더 발전된) 게임에 대한 정말 멋진 아이디어를 보고 싶다면. Peter Kent의 https://www.instructables.com/id/Lego-Mini-Memory-Game을 확인하십시오. 그는 레고 자동차의 인터페이스로 모바일 게임을 만들었습니다. 정말 대단해!

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

코드

<울>
  • 메모리 게임 코드
  • 메모리 게임 코드Arduino
    이것은 게임의 전체 코드입니다. 즐겨찾는 IDE에 복사하여 붙여넣고 Arduino에 업로드하기만 하면 됩니다.
    #define PLAYER_WAIT_TIME 2000 // 버튼 누름 사이의 허용 시간 - 2s byte sequence[100]; // 라이트 시퀀스 바이트를 위한 스토리지 curLen =0; // sequencebyte의 현재 길이 inputCount =0; // 플레이어가 주어진 턴 바이트에서 (정확한) 버튼을 누른 횟수 lastInput =0; // playerbyte의 마지막 입력 expRd =0; // playerbool에 의해 켜져 있다고 가정하는 LED btnDwn =false; // 버튼이 눌렸는지 확인하는 데 사용bool wait =false; // 프로그램이 사용자가 buttonbool을 누르기를 기다리고 있습니까? resetFlag =false; // 일단 플레이어가 lostbyte soundPin =5라는 것을 프로그램에 표시하는 데 사용됩니다. // 스피커 출력 바이트 noPins =4; // 버튼/LED의 수 (이 작업을 하는 동안 LED 2개만 사용했습니다) // LED/버튼/저항 조합을 추가하면 게임을 더 어렵게 만들 수 있습니다. byte 핀[] ={2, 13, 10 , 8}; // 버튼 입력 핀 및 LED 출력 핀 - 버튼을 다른 핀에 연결하려면 이 값을 변경하십시오. // 요소 수는 long inputTime =0 아래의 noPins와 일치해야 합니다. // 사용자 입력 간의 지연을 위한 타이머 변수void setup() { delay(3000); // arduino 연결 후 숨을 쉴 시간을 주기 위함입니다. - 원하면 제거 가능 Serial.begin(9600); // 시리얼 모니터를 시작합니다. Reset();}////// 'dir' 값에 따라 모든 핀을 INPUT 또는 OUTPUT으로 설정합니다.///void setPinDirection(byte dir){ for(byte i =0; i  빠름 | 큰 숫자 -> 느린 /// 무효 플래시(짧은 주파수){ setPinDirection(OUTPUT); /// 이제 LED를 활성화합니다. for(int i =0; i <5; i++){ writeAllPins(HIGH); 삐(50); 지연(주파수); writeAllPins(낮음); 지연(주파수); }}//////이 함수는 모든 게임 변수를 기본값으로 재설정합니다.///void Reset(){ flash(500); curLen =0; 입력 수 =0; 마지막 입력 =0; expRd =0; btnDwn =거짓; 대기 =거짓; resetFlag =false;}////// 사용자 손실///void Lose(){ flash(50); }////// arduino는 사용자에게 무엇을 암기해야 하는지 보여줍니다./// 마지막 시퀀스가 ​​무엇인지 보여주기 위해 잃어버린 후에도 호출됩니다.///void playSequence(){ //저장된 시퀀스를 반복하고 적절한 조명 LED는 차례로 for(int i =0; i  PLAYER_WAIT_TIME){ // 플레이어가 허용된 시간보다 오래 걸리면 DoLoseProcess(); // 모두 손실됨 :( return; } if(!btnDwn){ // expRd =sequence[inputCount]; // 플레이어에서 기대하는 값 찾기 Serial.print("Expected:"); // 직렬 모니터 출력 - Serial.println(expRd); 위의 Serial.begin을 제거한 경우 제거되어야 함 // 직렬 모니터 출력 - 위의 Serial.begin을 제거한 경우 제거되어야 함 for(int i =0; i   

    회로도

    simonsays_siKds3Jmk2.fzz

    제조공정

    1. Arduino를 사용하여 모니터 Ambilight 만들기
    2. MPU-6050을 사용한 Arduino 자이로스코프 게임
    3. NeoPixel Ring으로 재미있는 자이로스코프
    4. Arduino Pong 게임 - OLED 디스플레이
    5. Arduino 게임 컨트롤러
    6. Arduino 터치 브레이크아웃 게임
    7. Pixie:Arduino 기반 NeoPixel 손목시계
    8. 픽셀 체이서 게임
    9. arduino를 사용한 자동화된 Dino 게임
    10. 모바일 원격 감시 카메라