Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다
소개
Arduino 개발의 시작으로 간단한 게임을 만들려고했습니다.
개요
움직이지 않으면 승리 게임을 만듭니다.
1분간 센서에 감지되지 않도록 움직임을 멈추고 감시를 빠져나가는 게임입니다.
사양
・전원이 들어오면 게임 스타트.
・게임을 스타트하고 나서 1분간, 인감 센서에 움직임을 감지되지 않으면 게임 클리어.
· 움직임을 감지되면 게임 오버.
・게임 클리어, 게임 오버시에 LED를 점등.
· 다시 게임을 시작하려면 Arduino의 리셋 버튼을 누르고 리셋합니다.
구성
・Arduino Uno R3
・LCD 디스플레이(I2C 모듈 부착)
・인감 센서
흐름
막힌 곳
· LCD 액정에 문자가 표시되지 않았다.
원인: I2C 주소가 잘못되었습니다.
해결:아래의 URL을 참고로 주소를 조사해 설정했습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
원인: 디스플레이의 밝기가 너무 밝아서 문자가 보이지 않았다.
해결: 아래의 URL을 참고로 I2C 모듈의 LCD Constract의 설정을 변경하면 표시할 수 있었습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
회로도
완성 이미지
소스 코드
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//----------------------------
// 人感センサー
#define SWITCH_SOCKET 2
//----------------------------
// LED制御
#define LED_SOCKET 10
//----------------------------
// Geme 制御
#define STATE_START 0 // ゲームスタート
#define STATE_RUN 1 // ゲーム実行中
#define STATE_GEME_OVER 9 // ゲームオーバー
#define STATE_GEME_CLEAR 8 // ゲームクリア
#define START_START_TIME 2000
int m_state = STATE_START;
void setup() {
Serial.begin(9600);
//-------------------------
// PIN MODE 設定
pinMode(LED_SOCKET,OUTPUT);
pinMode(SWITCH_SOCKET, INPUT);
//-------------------------
// LED設定
digitalWrite(LED_SOCKET,LOW);
//-------------------------
// LCD設定
lcd.init();
lcd.backlight();
}
void loop() {
//--------------------------
// 経過時間を取得
unsigned long time_m = millis() - START_START_TIME;
if(m_state == STATE_RUN)
{
//----------------------------
// 人感センサー
// 動きを感知したらゲームオーバー
int val = digitalRead(SWITCH_SOCKET);
if(val == 1){
m_state = STATE_GEME_OVER;
lcd.clear();
}
// 経過時間を監視
// 1分過ぎたらゲームクリア
int m = (time_m / 1000) / 60;
m = m % 60;
if(m >= 1){
m_state = STATE_GEME_CLEAR;
lcd.clear();
}
}
// 状態に応じて表示を切り替え
switch (m_state) {
case STATE_START:
lcd.setCursor(0, 0);
lcd.print("Game Start !!");
lcd.setCursor(0, 1);
lcd.print("Don't move!");
m_state = STATE_RUN;
delay(START_START_TIME);
lcd.clear();
break;
case STATE_RUN:
// 現在時刻を表示
DispCountTimer(time_m);
break;
case STATE_GEME_OVER:
lcd.setCursor(0, 0);
lcd.print("Game Over,,");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
case STATE_GEME_CLEAR:
lcd.setCursor(0, 0);
lcd.print("Game Clear!!");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
}
delay(500);
}
/**
* 現在時刻を表示
*/
void DispCountTimer(unsigned long time_m)
{
int s = (time_m / 1000) % 60;
int m = (time_m / 1000) / 60;
m = m % 60;
int h = (time_m / 1000) / 60 / 60;
lcd.setCursor(0, 0);
lcd.print(StringTwoZero(String(h)) + ":" + StringTwoZero(String(m)) + ":" + StringTwoZero(String(s)) );
}
/**
* 2桁の前ゼロ変換
*/
String StringTwoZero(String val)
{
val = "00" + val;
return val.substring(val.length() - 2);
}
참고로 한 사이트
LCD 디스플레이에 문자 표시:
h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
마지막으로
LCD 디스플레이의 표시가 생각하게 되지 않고 시간이 걸렸습니다만, 블로그에서 기술 전개해 주는 여러분 덕분에, 어떻게든 완성할 수 있었습니다. 고마워요.
인감 센서의 감도를 높게 설정하고 있다고 호흡을 한 것만으로 게임 오버가 되므로, 감도는 낮추는 것이 좋을까 생각합니다.
또, 게임으로서 뿐만 아니라 일의 집중력이 끊어졌을 때 등에 이 게임을 실시하면, 집중력을 회복할 수 있으므로, 꼭 이용해 주세요.
Reference
이 문제에 관하여(Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/c762a3081cb35088b100
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
움직이지 않으면 승리 게임을 만듭니다.
1분간 센서에 감지되지 않도록 움직임을 멈추고 감시를 빠져나가는 게임입니다.
사양
・전원이 들어오면 게임 스타트.
・게임을 스타트하고 나서 1분간, 인감 센서에 움직임을 감지되지 않으면 게임 클리어.
· 움직임을 감지되면 게임 오버.
・게임 클리어, 게임 오버시에 LED를 점등.
· 다시 게임을 시작하려면 Arduino의 리셋 버튼을 누르고 리셋합니다.
구성
・Arduino Uno R3
・LCD 디스플레이(I2C 모듈 부착)
・인감 센서
흐름
막힌 곳
· LCD 액정에 문자가 표시되지 않았다.
원인: I2C 주소가 잘못되었습니다.
해결:아래의 URL을 참고로 주소를 조사해 설정했습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
원인: 디스플레이의 밝기가 너무 밝아서 문자가 보이지 않았다.
해결: 아래의 URL을 참고로 I2C 모듈의 LCD Constract의 설정을 변경하면 표시할 수 있었습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
회로도
완성 이미지
소스 코드
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//----------------------------
// 人感センサー
#define SWITCH_SOCKET 2
//----------------------------
// LED制御
#define LED_SOCKET 10
//----------------------------
// Geme 制御
#define STATE_START 0 // ゲームスタート
#define STATE_RUN 1 // ゲーム実行中
#define STATE_GEME_OVER 9 // ゲームオーバー
#define STATE_GEME_CLEAR 8 // ゲームクリア
#define START_START_TIME 2000
int m_state = STATE_START;
void setup() {
Serial.begin(9600);
//-------------------------
// PIN MODE 設定
pinMode(LED_SOCKET,OUTPUT);
pinMode(SWITCH_SOCKET, INPUT);
//-------------------------
// LED設定
digitalWrite(LED_SOCKET,LOW);
//-------------------------
// LCD設定
lcd.init();
lcd.backlight();
}
void loop() {
//--------------------------
// 経過時間を取得
unsigned long time_m = millis() - START_START_TIME;
if(m_state == STATE_RUN)
{
//----------------------------
// 人感センサー
// 動きを感知したらゲームオーバー
int val = digitalRead(SWITCH_SOCKET);
if(val == 1){
m_state = STATE_GEME_OVER;
lcd.clear();
}
// 経過時間を監視
// 1分過ぎたらゲームクリア
int m = (time_m / 1000) / 60;
m = m % 60;
if(m >= 1){
m_state = STATE_GEME_CLEAR;
lcd.clear();
}
}
// 状態に応じて表示を切り替え
switch (m_state) {
case STATE_START:
lcd.setCursor(0, 0);
lcd.print("Game Start !!");
lcd.setCursor(0, 1);
lcd.print("Don't move!");
m_state = STATE_RUN;
delay(START_START_TIME);
lcd.clear();
break;
case STATE_RUN:
// 現在時刻を表示
DispCountTimer(time_m);
break;
case STATE_GEME_OVER:
lcd.setCursor(0, 0);
lcd.print("Game Over,,");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
case STATE_GEME_CLEAR:
lcd.setCursor(0, 0);
lcd.print("Game Clear!!");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
}
delay(500);
}
/**
* 現在時刻を表示
*/
void DispCountTimer(unsigned long time_m)
{
int s = (time_m / 1000) % 60;
int m = (time_m / 1000) / 60;
m = m % 60;
int h = (time_m / 1000) / 60 / 60;
lcd.setCursor(0, 0);
lcd.print(StringTwoZero(String(h)) + ":" + StringTwoZero(String(m)) + ":" + StringTwoZero(String(s)) );
}
/**
* 2桁の前ゼロ変換
*/
String StringTwoZero(String val)
{
val = "00" + val;
return val.substring(val.length() - 2);
}
참고로 한 사이트
LCD 디스플레이에 문자 표시:
h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
마지막으로
LCD 디스플레이의 표시가 생각하게 되지 않고 시간이 걸렸습니다만, 블로그에서 기술 전개해 주는 여러분 덕분에, 어떻게든 완성할 수 있었습니다. 고마워요.
인감 센서의 감도를 높게 설정하고 있다고 호흡을 한 것만으로 게임 오버가 되므로, 감도는 낮추는 것이 좋을까 생각합니다.
또, 게임으로서 뿐만 아니라 일의 집중력이 끊어졌을 때 등에 이 게임을 실시하면, 집중력을 회복할 수 있으므로, 꼭 이용해 주세요.
Reference
이 문제에 관하여(Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/c762a3081cb35088b100
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・Arduino Uno R3
・LCD 디스플레이(I2C 모듈 부착)
・인감 센서
흐름
막힌 곳
· LCD 액정에 문자가 표시되지 않았다.
원인: I2C 주소가 잘못되었습니다.
해결:아래의 URL을 참고로 주소를 조사해 설정했습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
원인: 디스플레이의 밝기가 너무 밝아서 문자가 보이지 않았다.
해결: 아래의 URL을 참고로 I2C 모듈의 LCD Constract의 설정을 변경하면 표시할 수 있었습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
회로도
완성 이미지
소스 코드
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//----------------------------
// 人感センサー
#define SWITCH_SOCKET 2
//----------------------------
// LED制御
#define LED_SOCKET 10
//----------------------------
// Geme 制御
#define STATE_START 0 // ゲームスタート
#define STATE_RUN 1 // ゲーム実行中
#define STATE_GEME_OVER 9 // ゲームオーバー
#define STATE_GEME_CLEAR 8 // ゲームクリア
#define START_START_TIME 2000
int m_state = STATE_START;
void setup() {
Serial.begin(9600);
//-------------------------
// PIN MODE 設定
pinMode(LED_SOCKET,OUTPUT);
pinMode(SWITCH_SOCKET, INPUT);
//-------------------------
// LED設定
digitalWrite(LED_SOCKET,LOW);
//-------------------------
// LCD設定
lcd.init();
lcd.backlight();
}
void loop() {
//--------------------------
// 経過時間を取得
unsigned long time_m = millis() - START_START_TIME;
if(m_state == STATE_RUN)
{
//----------------------------
// 人感センサー
// 動きを感知したらゲームオーバー
int val = digitalRead(SWITCH_SOCKET);
if(val == 1){
m_state = STATE_GEME_OVER;
lcd.clear();
}
// 経過時間を監視
// 1分過ぎたらゲームクリア
int m = (time_m / 1000) / 60;
m = m % 60;
if(m >= 1){
m_state = STATE_GEME_CLEAR;
lcd.clear();
}
}
// 状態に応じて表示を切り替え
switch (m_state) {
case STATE_START:
lcd.setCursor(0, 0);
lcd.print("Game Start !!");
lcd.setCursor(0, 1);
lcd.print("Don't move!");
m_state = STATE_RUN;
delay(START_START_TIME);
lcd.clear();
break;
case STATE_RUN:
// 現在時刻を表示
DispCountTimer(time_m);
break;
case STATE_GEME_OVER:
lcd.setCursor(0, 0);
lcd.print("Game Over,,");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
case STATE_GEME_CLEAR:
lcd.setCursor(0, 0);
lcd.print("Game Clear!!");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
}
delay(500);
}
/**
* 現在時刻を表示
*/
void DispCountTimer(unsigned long time_m)
{
int s = (time_m / 1000) % 60;
int m = (time_m / 1000) / 60;
m = m % 60;
int h = (time_m / 1000) / 60 / 60;
lcd.setCursor(0, 0);
lcd.print(StringTwoZero(String(h)) + ":" + StringTwoZero(String(m)) + ":" + StringTwoZero(String(s)) );
}
/**
* 2桁の前ゼロ変換
*/
String StringTwoZero(String val)
{
val = "00" + val;
return val.substring(val.length() - 2);
}
참고로 한 사이트
LCD 디스플레이에 문자 표시:
h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
마지막으로
LCD 디스플레이의 표시가 생각하게 되지 않고 시간이 걸렸습니다만, 블로그에서 기술 전개해 주는 여러분 덕분에, 어떻게든 완성할 수 있었습니다. 고마워요.
인감 센서의 감도를 높게 설정하고 있다고 호흡을 한 것만으로 게임 오버가 되므로, 감도는 낮추는 것이 좋을까 생각합니다.
또, 게임으로서 뿐만 아니라 일의 집중력이 끊어졌을 때 등에 이 게임을 실시하면, 집중력을 회복할 수 있으므로, 꼭 이용해 주세요.
Reference
이 문제에 관하여(Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/c762a3081cb35088b100
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· LCD 액정에 문자가 표시되지 않았다.
원인: I2C 주소가 잘못되었습니다.
해결:아래의 URL을 참고로 주소를 조사해 설정했습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
원인: 디스플레이의 밝기가 너무 밝아서 문자가 보이지 않았다.
해결: 아래의 URL을 참고로 I2C 모듈의 LCD Constract의 설정을 변경하면 표시할 수 있었습니다.
URL : h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
회로도
완성 이미지
소스 코드
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//----------------------------
// 人感センサー
#define SWITCH_SOCKET 2
//----------------------------
// LED制御
#define LED_SOCKET 10
//----------------------------
// Geme 制御
#define STATE_START 0 // ゲームスタート
#define STATE_RUN 1 // ゲーム実行中
#define STATE_GEME_OVER 9 // ゲームオーバー
#define STATE_GEME_CLEAR 8 // ゲームクリア
#define START_START_TIME 2000
int m_state = STATE_START;
void setup() {
Serial.begin(9600);
//-------------------------
// PIN MODE 設定
pinMode(LED_SOCKET,OUTPUT);
pinMode(SWITCH_SOCKET, INPUT);
//-------------------------
// LED設定
digitalWrite(LED_SOCKET,LOW);
//-------------------------
// LCD設定
lcd.init();
lcd.backlight();
}
void loop() {
//--------------------------
// 経過時間を取得
unsigned long time_m = millis() - START_START_TIME;
if(m_state == STATE_RUN)
{
//----------------------------
// 人感センサー
// 動きを感知したらゲームオーバー
int val = digitalRead(SWITCH_SOCKET);
if(val == 1){
m_state = STATE_GEME_OVER;
lcd.clear();
}
// 経過時間を監視
// 1分過ぎたらゲームクリア
int m = (time_m / 1000) / 60;
m = m % 60;
if(m >= 1){
m_state = STATE_GEME_CLEAR;
lcd.clear();
}
}
// 状態に応じて表示を切り替え
switch (m_state) {
case STATE_START:
lcd.setCursor(0, 0);
lcd.print("Game Start !!");
lcd.setCursor(0, 1);
lcd.print("Don't move!");
m_state = STATE_RUN;
delay(START_START_TIME);
lcd.clear();
break;
case STATE_RUN:
// 現在時刻を表示
DispCountTimer(time_m);
break;
case STATE_GEME_OVER:
lcd.setCursor(0, 0);
lcd.print("Game Over,,");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
case STATE_GEME_CLEAR:
lcd.setCursor(0, 0);
lcd.print("Game Clear!!");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
}
delay(500);
}
/**
* 現在時刻を表示
*/
void DispCountTimer(unsigned long time_m)
{
int s = (time_m / 1000) % 60;
int m = (time_m / 1000) / 60;
m = m % 60;
int h = (time_m / 1000) / 60 / 60;
lcd.setCursor(0, 0);
lcd.print(StringTwoZero(String(h)) + ":" + StringTwoZero(String(m)) + ":" + StringTwoZero(String(s)) );
}
/**
* 2桁の前ゼロ変換
*/
String StringTwoZero(String val)
{
val = "00" + val;
return val.substring(val.length() - 2);
}
참고로 한 사이트
LCD 디스플레이에 문자 표시:
h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
마지막으로
LCD 디스플레이의 표시가 생각하게 되지 않고 시간이 걸렸습니다만, 블로그에서 기술 전개해 주는 여러분 덕분에, 어떻게든 완성할 수 있었습니다. 고마워요.
인감 센서의 감도를 높게 설정하고 있다고 호흡을 한 것만으로 게임 오버가 되므로, 감도는 낮추는 것이 좋을까 생각합니다.
또, 게임으로서 뿐만 아니라 일의 집중력이 끊어졌을 때 등에 이 게임을 실시하면, 집중력을 회복할 수 있으므로, 꼭 이용해 주세요.
Reference
이 문제에 관하여(Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/c762a3081cb35088b100
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
소스 코드
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//----------------------------
// 人感センサー
#define SWITCH_SOCKET 2
//----------------------------
// LED制御
#define LED_SOCKET 10
//----------------------------
// Geme 制御
#define STATE_START 0 // ゲームスタート
#define STATE_RUN 1 // ゲーム実行中
#define STATE_GEME_OVER 9 // ゲームオーバー
#define STATE_GEME_CLEAR 8 // ゲームクリア
#define START_START_TIME 2000
int m_state = STATE_START;
void setup() {
Serial.begin(9600);
//-------------------------
// PIN MODE 設定
pinMode(LED_SOCKET,OUTPUT);
pinMode(SWITCH_SOCKET, INPUT);
//-------------------------
// LED設定
digitalWrite(LED_SOCKET,LOW);
//-------------------------
// LCD設定
lcd.init();
lcd.backlight();
}
void loop() {
//--------------------------
// 経過時間を取得
unsigned long time_m = millis() - START_START_TIME;
if(m_state == STATE_RUN)
{
//----------------------------
// 人感センサー
// 動きを感知したらゲームオーバー
int val = digitalRead(SWITCH_SOCKET);
if(val == 1){
m_state = STATE_GEME_OVER;
lcd.clear();
}
// 経過時間を監視
// 1分過ぎたらゲームクリア
int m = (time_m / 1000) / 60;
m = m % 60;
if(m >= 1){
m_state = STATE_GEME_CLEAR;
lcd.clear();
}
}
// 状態に応じて表示を切り替え
switch (m_state) {
case STATE_START:
lcd.setCursor(0, 0);
lcd.print("Game Start !!");
lcd.setCursor(0, 1);
lcd.print("Don't move!");
m_state = STATE_RUN;
delay(START_START_TIME);
lcd.clear();
break;
case STATE_RUN:
// 現在時刻を表示
DispCountTimer(time_m);
break;
case STATE_GEME_OVER:
lcd.setCursor(0, 0);
lcd.print("Game Over,,");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
case STATE_GEME_CLEAR:
lcd.setCursor(0, 0);
lcd.print("Game Clear!!");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
}
delay(500);
}
/**
* 現在時刻を表示
*/
void DispCountTimer(unsigned long time_m)
{
int s = (time_m / 1000) % 60;
int m = (time_m / 1000) / 60;
m = m % 60;
int h = (time_m / 1000) / 60 / 60;
lcd.setCursor(0, 0);
lcd.print(StringTwoZero(String(h)) + ":" + StringTwoZero(String(m)) + ":" + StringTwoZero(String(s)) );
}
/**
* 2桁の前ゼロ変換
*/
String StringTwoZero(String val)
{
val = "00" + val;
return val.substring(val.length() - 2);
}
참고로 한 사이트
LCD 디스플레이에 문자 표시:
h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
마지막으로
LCD 디스플레이의 표시가 생각하게 되지 않고 시간이 걸렸습니다만, 블로그에서 기술 전개해 주는 여러분 덕분에, 어떻게든 완성할 수 있었습니다. 고마워요.
인감 센서의 감도를 높게 설정하고 있다고 호흡을 한 것만으로 게임 오버가 되므로, 감도는 낮추는 것이 좋을까 생각합니다.
또, 게임으로서 뿐만 아니라 일의 집중력이 끊어졌을 때 등에 이 게임을 실시하면, 집중력을 회복할 수 있으므로, 꼭 이용해 주세요.
Reference
이 문제에 관하여(Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/c762a3081cb35088b100
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//----------------------------
// 人感センサー
#define SWITCH_SOCKET 2
//----------------------------
// LED制御
#define LED_SOCKET 10
//----------------------------
// Geme 制御
#define STATE_START 0 // ゲームスタート
#define STATE_RUN 1 // ゲーム実行中
#define STATE_GEME_OVER 9 // ゲームオーバー
#define STATE_GEME_CLEAR 8 // ゲームクリア
#define START_START_TIME 2000
int m_state = STATE_START;
void setup() {
Serial.begin(9600);
//-------------------------
// PIN MODE 設定
pinMode(LED_SOCKET,OUTPUT);
pinMode(SWITCH_SOCKET, INPUT);
//-------------------------
// LED設定
digitalWrite(LED_SOCKET,LOW);
//-------------------------
// LCD設定
lcd.init();
lcd.backlight();
}
void loop() {
//--------------------------
// 経過時間を取得
unsigned long time_m = millis() - START_START_TIME;
if(m_state == STATE_RUN)
{
//----------------------------
// 人感センサー
// 動きを感知したらゲームオーバー
int val = digitalRead(SWITCH_SOCKET);
if(val == 1){
m_state = STATE_GEME_OVER;
lcd.clear();
}
// 経過時間を監視
// 1分過ぎたらゲームクリア
int m = (time_m / 1000) / 60;
m = m % 60;
if(m >= 1){
m_state = STATE_GEME_CLEAR;
lcd.clear();
}
}
// 状態に応じて表示を切り替え
switch (m_state) {
case STATE_START:
lcd.setCursor(0, 0);
lcd.print("Game Start !!");
lcd.setCursor(0, 1);
lcd.print("Don't move!");
m_state = STATE_RUN;
delay(START_START_TIME);
lcd.clear();
break;
case STATE_RUN:
// 現在時刻を表示
DispCountTimer(time_m);
break;
case STATE_GEME_OVER:
lcd.setCursor(0, 0);
lcd.print("Game Over,,");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
case STATE_GEME_CLEAR:
lcd.setCursor(0, 0);
lcd.print("Game Clear!!");
analogWrite(LED_SOCKET, 124);
digitalWrite(LED_SOCKET,HIGH);
break;
}
delay(500);
}
/**
* 現在時刻を表示
*/
void DispCountTimer(unsigned long time_m)
{
int s = (time_m / 1000) % 60;
int m = (time_m / 1000) / 60;
m = m % 60;
int h = (time_m / 1000) / 60 / 60;
lcd.setCursor(0, 0);
lcd.print(StringTwoZero(String(h)) + ":" + StringTwoZero(String(m)) + ":" + StringTwoZero(String(s)) );
}
/**
* 2桁の前ゼロ変換
*/
String StringTwoZero(String val)
{
val = "00" + val;
return val.substring(val.length() - 2);
}
LCD 디스플레이에 문자 표시:
h tp : // ht-에서. 이 m / ar 즈의 / lcd_i 2c. HTML
마지막으로
LCD 디스플레이의 표시가 생각하게 되지 않고 시간이 걸렸습니다만, 블로그에서 기술 전개해 주는 여러분 덕분에, 어떻게든 완성할 수 있었습니다. 고마워요.
인감 센서의 감도를 높게 설정하고 있다고 호흡을 한 것만으로 게임 오버가 되므로, 감도는 낮추는 것이 좋을까 생각합니다.
또, 게임으로서 뿐만 아니라 일의 집중력이 끊어졌을 때 등에 이 게임을 실시하면, 집중력을 회복할 수 있으므로, 꼭 이용해 주세요.
Reference
이 문제에 관하여(Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-katayama/items/c762a3081cb35088b100
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Arduino 개발 입문 - 움직이지 않으면 승리 게임을 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/e-katayama/items/c762a3081cb35088b100텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)