Мазмуну:

ATtiny85 жана OLED дисплейиндеги Flappy Bird SSD1306: 6 кадам (сүрөттөр менен)
ATtiny85 жана OLED дисплейиндеги Flappy Bird SSD1306: 6 кадам (сүрөттөр менен)

Video: ATtiny85 жана OLED дисплейиндеги Flappy Bird SSD1306: 6 кадам (сүрөттөр менен)

Video: ATtiny85 жана OLED дисплейиндеги Flappy Bird SSD1306: 6 кадам (сүрөттөр менен)
Video: ATtiny85 Project DHT21 Temperature & Humidity Sensor and SSD1306 Oled Display, Arduino IDE 2024, Ноябрь
Anonim
Image
Image
Аппараттык
Аппараттык

Эй баарына, Бүгүн мен силерге канаттуулардын клонунун негизги клонун көрсөтөм жана ага окшош оюнду кантип жасай аласыңар. Мен негизи сиз менен кодумду иштетип, анын ар бир кадамында кантип иштээрин түшүндүрөм. Бул оюн I2C OLED дисплейи менен 1МГц жыштыктагы ATtiny85те иштөө үчүн курулган. Алга!

1 -кадам: Аппараттык

Эгер сиз чындыгында оюндун схемасын түзүүгө кызыкпасаңыз, бирок анын теориясын түшүнсөңүз, анда бул кадамды өткөрүп жиберсеңиз болот.

Менин оюнум үчүн эки баскыч, ATtiny85, I2C OLED 128x64px экраны жана кандайдыр бир күч булагы керек. Менин инструктивдүү визиттик картам/оюн консолум: ATtiny85 жана OLED экраны сизге керектүү нерселердин баары бар такта курууну көрсөтөт! Эгерде сиз менин тактайымды жасоого кызыкдар эмес болсоңуз, анда нан табыңыздан чыгыңыз, мен сизге техникалык шарттарды айтып берем. Сиз ATtiny85тин каалаган вариантын колдоно аласыз. Мен ушул сыяктуу OLED дисплейлерди сунуштайм.

  1. ATtiny85 түзмөгүңүздөгү 2 жана 3 -казыктарга эки баскычтын бир жагын зым менен байланыштырыңыз. Бул зымдарга, жерге туташкан 10к Ом каршылыгын кошуңуз (түшүүчү каршылык).
  2. Бул баскычтардын экинчи тарабын чыңалууга өткөрүңүз. Кнопка басылбаса, пин абалы төмөн болот. Ал басылганда, пин абалы бийик болот.
  3. 7 -пинди дисплейдеги SCL төөнөгүчкө жана 5 -пинди дисплейиңиздеги SDA пинине туташтырыңыз. Тиешелүү түрдө дисплейдеги электр казыктарын (VCC жана GND) өткөрүңүз.
  4. Акырында, ATtinyдеги 4 пинти жерге жана 8 чыңалууга туташтырыңыз.

2 -кадам: Программалык камсыздоо

Программалык камсыздоо!
Программалык камсыздоо!

Бул жерде оюнду иштетүү үчүн керектүү бардык файлдары бар папка тиркелет. Файлдардын экөө, FlappyBird.ino жана WallFunctions.h, окуу ырахатыңыз үчүн абдан жакшы жазылган. Сиз FlappyBird.ino эскизин ATtiny85ке (1МГцте) жүктөп, алысыраак ойной аласыз! Эгер бул оюндун теориясын үйрөнүү сизди кызыктырса же сиз өзүңүздүн оюңузду жасоону кааласаңыз, анда окуңуз!

Менин оюнумда дагы деле бир аз көйгөйлөр бар. I2C - бул маалыматтарды берүүнүн эң жакшы жолу эмес. Бул билдирүүгө ылайык, дисплей маалыматты болжол менен 100 кГцте кабыл алат, андыктан ATtiny сааттын ылдамдыгын 8 МГцке чейин көтөрсөк дагы, I2C каналы дагы эле тоскоолдук болуп калат. Дисплей максимум 10 кадрга чейин чыгара алат. Дисплей канчалык өзүнчө сүрөттөрдү тартууга муктаж болсо, бүт процесс ошончолук жай болот. Ошентип, менин оюнум абдан оңой, анткени сиз дубалдарды экранда өтө ылдам жылдыра албайсыз! Төмөндө сиз тапшырмага жетем деп ойлосоңуз, анда сиз үчүн кээ бир кыйынчылыктар бар:

  • Оюнду татаалдаштыруу үчүн, дубалдын ортосундагы аралыкты 4кө эмес, 2ге чейин жеткире алаарыңызды көрүңүз. Менин программамдын кандай иштээрин түшүнгөндөн кийин, бул өтө оор болбошу керек:). Сураныч, эгер аны иштете алсаңыз, комментарийге жазыңыз!
  • Менин оюнумдун жетишпеген дагы бир нерсеси - бул баллдык система жана упайды көрсөтүү жана аны сактоо ыкмасы. Бирин ишке ашыра аларыңызды көрүңүз!
  • Акырында, дубалдар бир колонканы жылдыргандан көрө, жылмакай кыймыл үчүн ар бир дубалды бир пикселден жылдырууга аракет кылыңыз.

3 -кадам: Flappy Bird ATtiny85: Теория

Flappy Bird ATtiny85: Теория
Flappy Bird ATtiny85: Теория

Биз колдонуп жаткан дисплейде оюн үчүн 64 пиксель бийиктиги болсо да, элементтерди 8 пикселдик блокторго жайгаштыруу мүмкүн. Ошентип, 8 гана мүмкүн болгон y-координаттары бар. Ишти жеңилдетүү үчүн, программалык камсыздоодо мен бүт экранды ушундай жол менен бөлүштүрдүм, 16 блоктон 8 блокко торчо жасап, ар бир блок 8х8 пиксель. Ар бир блокту толтуруу үчүн, оюндагы ар бир спрайт 8х8 пикселди түзөт. Бул баарын башкарууну бир топ жеңилдетет. Жогорудагы сүрөттү карасаңыз, экранымды кантип бөлүштүргөнүмдү көрө аласыз. Ар бир дубал 6 блоктон турат, тешиги 2 блок, бийиктиги 8 блок.

Программада ар бир дубал Wall деп аталган структура катары көрсөтүлгөн. Ар бир дубалдын эки касиети бар - holePosition жана мамыча. 'holePosition'-бул 0-6 саны, анткени 2 блоктун бийиктиги үчүн 8 блоктун дубалында 7 гана мүмкүн болгон позициялар бар. 'мамыча'-бул 0-15 саны, анткени экранда мүмкүн болгон 16 мамыча блоктору бар.

Сунушталууда: