{"id":602,"date":"2015-12-03T18:33:33","date_gmt":"2015-12-03T16:33:33","guid":{"rendered":"http:\/\/www.hasankahraman.com.tr\/?p=602"},"modified":"2015-12-03T18:33:33","modified_gmt":"2015-12-03T16:33:33","slug":"dnyarduino-ile-lcd-ekranda-oyun-oynama","status":"publish","type":"post","link":"https:\/\/www.hasankahraman.com.tr\/index.php\/2015\/12\/03\/dnyarduino-ile-lcd-ekranda-oyun-oynama\/","title":{"rendered":"dnyArduino ile LCD Ekranda Oyun Oynama"},"content":{"rendered":"<p>Merhaba Arkada\u015flar,<br \/>\ndnyArduino ile LCD ekran ve Buton yard\u0131m\u0131yla oynanan bir oyun uygulamas\u0131\u00a0g\u00f6sterece\u011fim.A\u015fa\u011f\u0131da kolayl\u0131kla yapabilece\u011finiz ba\u011flant\u0131 \u015femas\u0131 yer almakta.<a href=\"http:\/\/www.hasankahraman.com.tr\/wp-content\/uploads\/hasankahraman2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-603\" src=\"http:\/\/www.hasankahraman.com.tr\/wp-content\/uploads\/hasankahraman2-300x253.png\" alt=\"hasankahraman2\" width=\"300\" height=\"253\" \/><\/a><\/p>\n<p>\u0130lgili kodlar a\u015fa\u011f\u0131da bulunmaktad\u0131r.<br \/>\n[csharp]#include <LiquidCrystal.h>  \/\/LCD ekran K\u00fct\u00fcphanesini \u00c7a\u011f\u0131rd\u0131k<\/p>\n<p>#define PIN_BUTTON 2   \/\/ B1 butonu 2. pin e tan\u0131mlad\u0131k<br \/>\n#define PIN_AUTOPLAY 1<br \/>\n#define PIN_READWRITE 10<br \/>\n#define PIN_CONTRAST 12<\/p>\n<p>#define SPRITE_RUN1 1<br \/>\n#define SPRITE_RUN2 2<br \/>\n#define SPRITE_JUMP 3<br \/>\n#define SPRITE_JUMP_UPPER &#8216;.&#8217; \/\/ &#8216;.&#8217; Karaterini kafa olarak ayarla<br \/>\n#define SPRITE_JUMP_LOWER 4<br \/>\n#define SPRITE_TERRAIN_EMPTY &#8216; &#8216; \/\/ User the &#8216; &#8216; character<br \/>\n#define SPRITE_TERRAIN_SOLID 5<br \/>\n#define SPRITE_TERRAIN_SOLID_RIGHT 6<br \/>\n#define SPRITE_TERRAIN_SOLID_LEFT 7<\/p>\n<p>#define HERO_HORIZONTAL_POSITION 1 \/\/ Oyun Kahraman\u0131m\u0131z\u0131n dikey pozisyonu<\/p>\n<p>#define TERRAIN_WIDTH 16<br \/>\n#define TERRAIN_EMPTY 0<br \/>\n#define TERRAIN_LOWER_BLOCK 1<br \/>\n#define TERRAIN_UPPER_BLOCK 2<\/p>\n<p>#define HERO_POSITION_OFF 0 \/\/ Oyun Kahraman\u0131m\u0131z g\u00f6r\u00fcnmez durumda<br \/>\n#define HERO_POSITION_RUN_LOWER_1 1 \/\/ Kahraman\u0131m\u0131z alt sat\u0131rda ko\u015fuyor (1. pozisyon)<br \/>\n#define HERO_POSITION_RUN_LOWER_2 2 \/\/ (2. Pozisyon)<\/p>\n<p>#define HERO_POSITION_JUMP_1 3 \/\/ Z\u0131plama Ba\u015flatmas\u0131<br \/>\n#define HERO_POSITION_JUMP_2 4 \/\/ Yar\u0131 ilerleme<br \/>\n#define HERO_POSITION_JUMP_3 5 \/\/ \u00dcst sat\u0131rda z\u0131plama<br \/>\n#define HERO_POSITION_JUMP_4 6 \/\/ \u00dcst sat\u0131rda z\u0131plama<br \/>\n#define HERO_POSITION_JUMP_5 7 \/\/ \u00dcst sat\u0131rda z\u0131plama<br \/>\n#define HERO_POSITION_JUMP_6 8 \/\/ \u00dcst sat\u0131rda z\u0131plama<br \/>\n#define HERO_POSITION_JUMP_7 9 \/\/ yar\u0131m a\u015fa\u011f\u0131<br \/>\n#define HERO_POSITION_JUMP_8 10 \/\/ zemin<\/p>\n<p>#define HERO_POSITION_RUN_UPPER_1 11 \/\/ Kahraman\u0131m\u0131z \u00fcst sat\u0131rda ko\u015fuyor ( 1.pozisyon)<br \/>\n#define HERO_POSITION_RUN_UPPER_2 12 \/\/ (2. Pozisyon)<\/p>\n<p>LiquidCrystal lcd(11,9, 6, 5, 4, 3);  \/\/ LCD ekran pinlerimizi tan\u0131mlad\u0131k<br \/>\nstatic char terrainUpper[TERRAIN_WIDTH + 1];<br \/>\nstatic char terrainLower[TERRAIN_WIDTH + 1];<br \/>\nstatic bool buttonPushed = false;<\/p>\n<p>void initializeGraphics(){<br \/>\n static byte graphics[] = {<br \/>\n \/\/ 1. Pozisyonda ilerle<br \/>\n B01100,<br \/>\n B01100,<br \/>\n B00000,<br \/>\n B01110,<br \/>\n B11100,<br \/>\n B01100,<br \/>\n B11010,<br \/>\n B10011,<br \/>\n \/\/ Pozisyon 2 de ilerle<br \/>\n B01100,<br \/>\n B01100,<br \/>\n B00000,<br \/>\n B01100,<br \/>\n B01100,<br \/>\n B01100,<br \/>\n B01100,<br \/>\n B01110,<br \/>\n \/\/ Z\u0131pla<br \/>\n B01100,<br \/>\n B01100,<br \/>\n B00000,<br \/>\n B11110,<br \/>\n B01101,<br \/>\n B11111,<br \/>\n B10000,<br \/>\n B00000,<br \/>\n \/\/ Al\u00e7ak z\u0131plama<br \/>\n B11110,<br \/>\n B01101,<br \/>\n B11111,<br \/>\n B10000,<br \/>\n B00000,<br \/>\n B00000,<br \/>\n B00000,<br \/>\n B00000,<br \/>\n \/\/ Zemin<br \/>\n B11111,<br \/>\n B11111,<br \/>\n B11111,<br \/>\n B11111,<br \/>\n B11111,<br \/>\n B11111,<br \/>\n B11111,<br \/>\n B11111,<br \/>\n \/\/ Zemin sa\u011f taraf<br \/>\n B00011,<br \/>\n B00011,<br \/>\n B00011,<br \/>\n B00011,<br \/>\n B00011,<br \/>\n B00011,<br \/>\n B00011,<br \/>\n B00011,<br \/>\n \/\/ Zemin sol taraf<br \/>\n B11000,<br \/>\n B11000,<br \/>\n B11000,<br \/>\n B11000,<br \/>\n B11000,<br \/>\n B11000,<br \/>\n B11000,<br \/>\n B11000,<br \/>\n };<br \/>\n int i;<br \/>\n \/\/ Skip using character 0, this allows lcd.print() to be used to<br \/>\n \/\/ quickly draw multiple characters<br \/>\n for (i = 0; i < 7; ++i) {\n lcd.createChar(i + 1, &#038;graphics[i * 8]);\n }\n for (i = 0; i < TERRAIN_WIDTH; ++i) {\n terrainUpper[i] = SPRITE_TERRAIN_EMPTY;\n terrainLower[i] = SPRITE_TERRAIN_EMPTY;\n }\n}\n  \n\/\/ Slide the terrain to the left in half-character increments\n\/\/\nvoid advanceTerrain(char* terrain, byte newTerrain){\n for (int i = 0; i < TERRAIN_WIDTH; ++i) {\n char current = terrain[i];\n char next = (i == TERRAIN_WIDTH-1) ? newTerrain : terrain[i+1];\n switch (current){\n case SPRITE_TERRAIN_EMPTY:\n terrain[i] = (next == SPRITE_TERRAIN_SOLID) ? SPRITE_TERRAIN_SOLID_RIGHT : SPRITE_TERRAIN_EMPTY;\n break;\n case SPRITE_TERRAIN_SOLID:\n terrain[i] = (next == SPRITE_TERRAIN_EMPTY) ? SPRITE_TERRAIN_SOLID_LEFT : SPRITE_TERRAIN_SOLID;\n break;\n case SPRITE_TERRAIN_SOLID_RIGHT:\n terrain[i] = SPRITE_TERRAIN_SOLID;\n break;\n case SPRITE_TERRAIN_SOLID_LEFT:\n terrain[i] = SPRITE_TERRAIN_EMPTY;\n break;\n }\n }\n}\n  \nbool drawHero(byte position, char* terrainUpper, char* terrainLower, unsigned int score) {\n bool collide = false;\n char upperSave = terrainUpper[HERO_HORIZONTAL_POSITION];\n char lowerSave = terrainLower[HERO_HORIZONTAL_POSITION];\n byte upper, lower;\n switch (position) {\n case HERO_POSITION_OFF:\n upper = lower = SPRITE_TERRAIN_EMPTY;\n break;\n case HERO_POSITION_RUN_LOWER_1:\n upper = SPRITE_TERRAIN_EMPTY;\n lower = SPRITE_RUN1;\n break;\n case HERO_POSITION_RUN_LOWER_2:\n upper = SPRITE_TERRAIN_EMPTY;\n lower = SPRITE_RUN2;\n break;\n case HERO_POSITION_JUMP_1:\n case HERO_POSITION_JUMP_8:\n upper = SPRITE_TERRAIN_EMPTY;\n lower = SPRITE_JUMP;\n break;\n case HERO_POSITION_JUMP_2:\n case HERO_POSITION_JUMP_7:\n upper = SPRITE_JUMP_UPPER;\n lower = SPRITE_JUMP_LOWER;\n break;\n case HERO_POSITION_JUMP_3:\n case HERO_POSITION_JUMP_4:\n case HERO_POSITION_JUMP_5:\n case HERO_POSITION_JUMP_6:\n upper = SPRITE_JUMP;\n lower = SPRITE_TERRAIN_EMPTY;\n break;\n case HERO_POSITION_RUN_UPPER_1:\n upper = SPRITE_RUN1;\n lower = SPRITE_TERRAIN_EMPTY;\n break;\n case HERO_POSITION_RUN_UPPER_2:\n upper = SPRITE_RUN2;\n lower = SPRITE_TERRAIN_EMPTY;\n break;\n }\n if (upper != ' ') {\n terrainUpper[HERO_HORIZONTAL_POSITION] = upper;\n collide = (upperSave == SPRITE_TERRAIN_EMPTY) ? false : true;\n }\n if (lower != ' ') {\n terrainLower[HERO_HORIZONTAL_POSITION] = lower;\n collide |= (lowerSave == SPRITE_TERRAIN_EMPTY) ? false : true;\n }\n  \n byte digits = (score > 9999) ? 5 : (score > 999) ? 4 : (score > 99) ? 3 : (score > 9) ? 2 : 1;<\/p>\n<p> \/\/ Draw the scene<br \/>\n terrainUpper[TERRAIN_WIDTH] = &#8216;\\0&#8217;;<br \/>\n terrainLower[TERRAIN_WIDTH] = &#8216;\\0&#8217;;<br \/>\n char temp = terrainUpper[16-digits];<br \/>\n terrainUpper[16-digits] = &#8216;\\0&#8217;;<br \/>\n lcd.setCursor(0,0);  \/\/LCD ekran\u0131n ilk sat\u0131r\u0131 \u00fcst haraketler i\u00e7in<br \/>\n lcd.print(terrainUpper);<br \/>\n terrainUpper[16-digits] = temp;<br \/>\n lcd.setCursor(0,1);  \/\/LCD ekran\u0131n ikinici sat\u0131r\u0131 alt hareketler i\u00e7in<br \/>\n lcd.print(terrainLower);<\/p>\n<p> lcd.setCursor(16 &#8211; digits,0);<br \/>\n lcd.print(score);<\/p>\n<p> terrainUpper[HERO_HORIZONTAL_POSITION] = upperSave;<br \/>\n terrainLower[HERO_HORIZONTAL_POSITION] = lowerSave;<br \/>\n return collide;<br \/>\n}<\/p>\n<p>\/\/ Handle the button push as an interrupt<br \/>\nvoid buttonPush() {<br \/>\n buttonPushed = true;<br \/>\n}<\/p>\n<p>void setup(){<br \/>\n pinMode(PIN_READWRITE, OUTPUT);      \/\/Gerekli giri\u015f ve \u00e7\u0131k\u0131\u015f pinlerini ayarl\u0131yoruz<br \/>\n digitalWrite(PIN_READWRITE, LOW);<br \/>\n pinMode(PIN_CONTRAST, OUTPUT);<br \/>\n digitalWrite(PIN_CONTRAST, LOW);<br \/>\n pinMode(PIN_BUTTON, INPUT);<br \/>\n digitalWrite(PIN_BUTTON, HIGH);<br \/>\n pinMode(PIN_AUTOPLAY, OUTPUT);<br \/>\n digitalWrite(PIN_AUTOPLAY, HIGH);<\/p>\n<p> \/\/ Digital pin 2 maps to interrupt 0<br \/>\n attachInterrupt(0\/*PIN_BUTTON*\/, buttonPush, FALLING);<\/p>\n<p> initializeGraphics();<\/p>\n<p> lcd.begin(16, 2);<br \/>\n}<br \/>\n  \/\/ Tekrar eden d\u00f6ng\u00fcleri belirliyoruz<br \/>\nvoid loop(){<br \/>\n static byte heroPos = HERO_POSITION_RUN_LOWER_1;<br \/>\n static byte newTerrainType = TERRAIN_EMPTY;<br \/>\n static byte newTerrainDuration = 1;<br \/>\n static bool playing = false;<br \/>\n static bool blink = false;<br \/>\n static unsigned int distance = 0;<\/p>\n<p> if (!playing) {<br \/>\n drawHero((blink) ? HERO_POSITION_OFF : heroPos, terrainUpper, terrainLower, distance >> 3);<br \/>\n if (blink) {<br \/>\n lcd.setCursor(0,0);<br \/>\n lcd.print(&#8220;OYUNU BASLAT&#8221;); \/\/ Ekrana Oyunun durumu hakk\u0131nda bilgi yaz\u0131yoruz<br \/>\n }<br \/>\n delay(250);<br \/>\n blink = !blink;<br \/>\n if (buttonPushed) {<br \/>\n initializeGraphics();<br \/>\n heroPos = HERO_POSITION_RUN_LOWER_1;<br \/>\n playing = true;<br \/>\n buttonPushed = false;<br \/>\n distance = 0;<br \/>\n }<br \/>\n return;<br \/>\n }<\/p>\n<p> \/\/ Shift the terrain to the left<br \/>\n advanceTerrain(terrainLower, newTerrainType == TERRAIN_LOWER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY);<br \/>\n advanceTerrain(terrainUpper, newTerrainType == TERRAIN_UPPER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY);<\/p>\n<p> \/\/ Make new terrain to enter on the right<br \/>\n if (&#8211;newTerrainDuration == 0) {<br \/>\n if (newTerrainType == TERRAIN_EMPTY) {<br \/>\n newTerrainType = (random(3) == 0) ? TERRAIN_UPPER_BLOCK : TERRAIN_LOWER_BLOCK;<br \/>\n newTerrainDuration = 2 + random(10);<br \/>\n } else {<br \/>\n newTerrainType = TERRAIN_EMPTY;<br \/>\n newTerrainDuration = 10 + random(10);<br \/>\n }<br \/>\n }<\/p>\n<p> if (buttonPushed) {<br \/>\n if (heroPos <= HERO_POSITION_RUN_LOWER_2) heroPos = HERO_POSITION_JUMP_1;\n buttonPushed = false;\n } \n  \n if (drawHero(heroPos, terrainUpper, terrainLower, distance >> 3)) {<br \/>\n playing = false; \/\/ The hero collided with something. Too bad.<br \/>\n } else {<br \/>\n if (heroPos == HERO_POSITION_RUN_LOWER_2 || heroPos == HERO_POSITION_JUMP_8) {<br \/>\n heroPos = HERO_POSITION_RUN_LOWER_1;<br \/>\n } else if ((heroPos >= HERO_POSITION_JUMP_3 &#038;&#038; heroPos <= HERO_POSITION_JUMP_5) &#038;&#038; terrainLower[HERO_HORIZONTAL_POSITION] != SPRITE_TERRAIN_EMPTY) {\n heroPos = HERO_POSITION_RUN_UPPER_1;\n } else if (heroPos >= HERO_POSITION_RUN_UPPER_1 &#038;&#038; terrainLower[HERO_HORIZONTAL_POSITION] == SPRITE_TERRAIN_EMPTY) {<br \/>\n heroPos = HERO_POSITION_JUMP_5;<br \/>\n } else if (heroPos == HERO_POSITION_RUN_UPPER_2) {<br \/>\n heroPos = HERO_POSITION_RUN_UPPER_1;<br \/>\n } else {<br \/>\n ++heroPos;<br \/>\n }<br \/>\n ++distance;<\/p>\n<p> digitalWrite(PIN_AUTOPLAY, terrainLower[HERO_HORIZONTAL_POSITION + 2] == SPRITE_TERRAIN_EMPTY ? HIGH : LOW);<br \/>\n }<br \/>\n delay(100);<br \/>\n} \/\/ www.instructables.com\/id\/Arduino-LCD-Game sitesinden al\u0131nt\u0131d\u0131r. dnyArduino i\u00e7in uyarlanm\u0131\u015ft\u0131r. [\/csharp]<\/p>\n<p>Uygulama ile ilgili videoyu izleyebilirsiniz.<br \/>\n<iframe loading=\"lazy\" title=\"dnyArduino ile LCD Ekranda Oyun Oynama\" width=\"660\" height=\"371\" src=\"https:\/\/www.youtube.com\/embed\/ZS2ADEu_Ch8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba Arkada\u015flar, dnyArduino ile LCD ekran ve Buton yard\u0131m\u0131yla oynanan bir oyun uygulamas\u0131\u00a0g\u00f6sterece\u011fim.A\u015fa\u011f\u0131da kolayl\u0131kla yapabilece\u011finiz ba\u011flant\u0131 \u015femas\u0131 yer almakta. \u0130lgili kodlar a\u015fa\u011f\u0131da bulunmaktad\u0131r. [csharp]#include \/\/LCD ekran K\u00fct\u00fcphanesini \u00c7a\u011f\u0131rd\u0131k #define PIN_BUTTON 2 \/\/ B1 butonu 2. pin e tan\u0131mlad\u0131k #define PIN_AUTOPLAY 1 #define PIN_READWRITE 10 #define PIN_CONTRAST 12 #define SPRITE_RUN1 1 #define SPRITE_RUN2 2 #define SPRITE_JUMP &hellip; <a href=\"https:\/\/www.hasankahraman.com.tr\/index.php\/2015\/12\/03\/dnyarduino-ile-lcd-ekranda-oyun-oynama\/\" class=\"more-link\">Okumaya devam et <span class=\"screen-reader-text\">dnyArduino ile LCD Ekranda Oyun Oynama<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-602","post","type-post","status-publish","format-standard","hentry","category-dnyarduino"],"_links":{"self":[{"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/posts\/602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/comments?post=602"}],"version-history":[{"count":0,"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/posts\/602\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/media?parent=602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/categories?post=602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hasankahraman.com.tr\/index.php\/wp-json\/wp\/v2\/tags?post=602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}