logo
+7 (495) 997-37-74
Москва, ул.Международная, 15
13.07.2016

Игра "Змейка" на Arduino

13.07.2016

На старых телефонах Nokia была прекрасная игра «Змейка». Находясь в настальгических чувствах, мы решили возродить эту игру на Arduino

Наверное многие знают, что до смартфонов были еще телефоны с маленькими экранами и с 16-и голосной полифонией. Среди производителей телефонов были лидеры Nokia и Siemens. У большинства  людей был Siemens, так как эти телефоны были дешевле. Телефоны Nokia считались телефонами более дорогого сегмента. Они и были сделаны качественнее.

Так вот был у меня телефон Nokia 3110. Это был «неубиваемый» телефон во всех смыслах этого слова. На этом телефоне была игра «Змейка», в которую мы с товарищами постоянно играли. На днях у нашего инженера была ностальгия по этому поводу, и он запустил эту самую игру на Arduino. Чтобы было интереснее вместо джойстика мы применили ИК-пульт с приемником.

Схема конструктора очень проста.

Для сборки проекта нам понадобились:

  1. Arduino совместимая платформа, в нашем случае ElemikUNO
  2. ИК-пульт из серии NEC
  3. ИК-приемник vs1838 (приемная частота 38 кГц)
  4. дисплей Nokia 3110/5110
  5. беспаечная макетная плата
  6. провода «папа-папа»

Подключение дисплея:

LCD

RST

CE

DC

DIN

CLK

VCC

Light

GND

Arduino

D19

D10

D11

D12

D13

3.3v

GND

GND

 

Подключение  ИК-приемника:

ИК-приемник

OUT

GND

VCC

Arduino

D6

GND

3.3v

 

Стоит обратить внимание, что для каждого пульта управления свои коды.  На нашем пульте для управления направлением движения змейки мы использовали клавиши «вправо», «влево», «вверх» и «вниз». Поэтому для подстановки своих значений вам следует для начала снять показания кнопок своего ИК-пульта. Скетч данной программы приводим ниже:

 

#include <IRremote.h>
int RECV_PIN = 6;
IRrec#include <IRremote.h>
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определенного порта
decode_results results; //Переменная, хранящая результат

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Начинаем прием
}

void loop() {
  if (irrecv.decode(&results)) { //При получении сигнала...
    Serial.println(results.value); //выводим его значение в последовательный порт
    irrecv.resume(); // Получаем следующее значение
  }
}
v irrecv(RECV_PIN); //Создаем объект получения сигнала с определенного порта
decode_results results; //Переменная, хранящая результат

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Начинаем прием
}

void loop() {
  if (irrecv.decode(&results)) { //При получении сигнала...
    Serial.println(results.value); //выводим его значение в последовательный порт
    irrecv.resume(); // Получаем следующее значение
  }
}

 Далее открываем Serial Monitor и видим вывод значений:

 

Подставляем полученные значения в этот блок программы:

Если вы все сделали правильно, то можете загрузить скетч в плату и наслаждаться игрой.