| 1 | /* |
| 2 | |
| 3 | SpaceTrash.ino |
| 4 | |
| 5 | Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) |
| 6 | |
| 7 | Copyright (c) 2016, olikraus@gmail.com |
| 8 | All rights reserved. |
| 9 | |
| 10 | Redistribution and use in source and binary forms, with or without modification, |
| 11 | are permitted provided that the following conditions are met: |
| 12 | |
| 13 | * Redistributions of source code must retain the above copyright notice, this list |
| 14 | of conditions and the following disclaimer. |
| 15 | |
| 16 | * Redistributions in binary form must reproduce the above copyright notice, this |
| 17 | list of conditions and the following disclaimer in the documentation and/or other |
| 18 | materials provided with the distribution. |
| 19 | |
| 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
| 21 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
| 22 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| 23 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR |
| 25 | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 26 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| 27 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 28 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 29 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| 30 | STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 31 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| 32 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 33 | |
| 34 | */ |
| 35 | |
| 36 | #include <Arduino.h> |
| 37 | #include <U8g2lib.h> |
| 38 | |
| 39 | #ifdef U8X8_HAVE_HW_SPI |
| 40 | #include <SPI.h> |
| 41 | #endif |
| 42 | #ifdef U8X8_HAVE_HW_I2C |
| 43 | #include <Wire.h> |
| 44 | #endif |
| 45 | |
| 46 | // Please UNCOMMENT one of the contructor lines below |
| 47 | // U8g2 Contructor List (Picture Loop Page Buffer) |
| 48 | // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp |
| 49 | // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected |
| 50 | //U8G2_NULL u8g2(U8G2_R0); // null device, a 8x8 pixel display which does nothing |
| 51 | //U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 52 | //U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6); // Arduboy (Production, Kickstarter Edition) |
| 53 | //U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 54 | //U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8); |
| 55 | //U8G2_SSD1306_128X64_NONAME_1_3W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* reset=*/ 8); |
| 56 | //U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 57 | //U8G2_SSD1306_128X64_ALT0_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem |
| 58 | //U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8); |
| 59 | //U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display |
| 60 | //U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 16, /* data=*/ 17, /* reset=*/ U8X8_PIN_NONE); // ESP32 Thing, pure SW emulated I2C |
| 61 | //U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 16, /* data=*/ 17); // ESP32 Thing, HW I2C with pin remapping |
| 62 | //U8G2_SSD1306_128X64_NONAME_1_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); |
| 63 | //U8G2_SSD1306_128X64_NONAME_1_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); |
| 64 | //U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but maximizes setContrast() range |
| 65 | //U8G2_SSD1306_128X64_ALT0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem |
| 66 | //U8G2_SSD1306_102X64_EA_OLEDS102_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem |
| 67 | //U8G2_SSD1312_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 68 | //U8G2_SSD1312_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ 8); |
| 69 | //U8G2_SSD1312_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); |
| 70 | //U8G2_SSD1312_120X28_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 71 | //U8G2_SSD1312_120X28_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ 8); |
| 72 | //U8G2_SSD1312_120X28_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); |
| 73 | //U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 74 | //U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 75 | //U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but maximizes setContrast() range |
| 76 | //U8G2_SH1106_128X64_WINSTAR_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but uses updated SH1106 init sequence |
| 77 | //U8G2_SH1106_128X32_VISIONOX_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 78 | //U8G2_SH1106_128X32_VISIONOX_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 79 | //U8G2_SH1106_72X40_WISE_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 80 | //U8G2_SH1107_64X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 81 | //U8G2_SH1107_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 82 | //U8G2_SH1107_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); |
| 83 | //U8G2_SH1107_128X80_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); |
| 84 | //U8G2_SH1107_PIMORONI_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); |
| 85 | //U8G2_SH1107_SEEED_128X128_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); |
| 86 | //U8G2_SH1107_SEEED_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 87 | //U8G2_SH1107_SEEED_96X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 88 | //U8G2_SH1107_HJR_OEL1M0201_96X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 89 | //U8G2_SH1107_TK078F288_80X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 90 | //U8G2_SH1108_128X160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 91 | //U8G2_CH1120_128X160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 92 | //U8G2_SH1108_160X160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 93 | //U8G2_SH1122_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 94 | //U8G2_SH1122_256X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 95 | //U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather M0 Basic Proto + FeatherWing OLED |
| 96 | //U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED |
| 97 | //U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED |
| 98 | //U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA); // pin remapping with ESP8266 HW I2C |
| 99 | //U8G2_SSD1306_128X32_WINSTAR_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA); // pin remapping with ESP8266 HW I2C |
| 100 | //U8G2_SSD1306_64X48_ER_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // EastRising 0.66" OLED breakout board, Uno: A4=SDA, A5=SCL, 5V powered |
| 101 | //U8G2_SSD1306_48X64_WINSTAR_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 102 | //U8G2_SSD1306_64X32_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 103 | //U8G2_SSD1306_64X32_1F_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 104 | //U8G2_SSD1306_96X16_ER_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // EastRising 0.69" OLED |
| 105 | //U8G2_SSD1306_72X40_ER_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // EastRising 0.42" OLED |
| 106 | //U8G2_SSD1306_96X40_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 107 | //U8G2_SSD1306_96X39_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 108 | //U8G2_SSD1322_240X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 109 | //U8G2_SSD1322_TOPWIN_240X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 110 | //U8G2_SSD1322_NHD_256X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 111 | //U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 112 | //U8G2_SSD1322_ZJY_256X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 113 | //U8G2_SSD1322_ZJY_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 114 | //U8G2_SSD1362_256X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 115 | //U8G2_SSD1362_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 116 | //U8G2_SSD1362_206X36_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 117 | //U8G2_SSD1362_206X36_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 118 | //U8G2_SSD1363_256X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 119 | //U8G2_SSD1363_256X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h |
| 120 | //U8G2_SSD1322_NHD_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 121 | //U8G2_SSD1322_NHD_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 122 | //U8G2_SSD1325_NHD_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 123 | //U8G2_SSD1325_NHD_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 124 | //U8G2_SSD0323_OS128064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 125 | //U8G2_SSD0323_OS128064_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 126 | //U8G2_SSD1326_ER_256X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // experimental driver for ER-OLED018-1 |
| 127 | //U8G2_SSD1327_SEEED_96X96_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // Seeedstudio Grove OLED 96x96 |
| 128 | //U8G2_SSD1327_SEEED_96X96_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // Seeedstudio Grove OLED 96x96 |
| 129 | //U8G2_SSD1327_EA_W128128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 130 | //U8G2_SSD1327_EA_W128128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 131 | //U8G2_SSD1327_EA_W128128_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 4, /* reset=*/ U8X8_PIN_NONE); |
| 132 | //U8G2_SSD1327_EA_W128128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */ |
| 133 | //U8G2_SSD1327_MIDAS_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 134 | //U8G2_SSD1327_MIDAS_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 135 | //U8G2_SSD1327_MIDAS_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */ |
| 136 | //U8G2_SSD1327_ZJY_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 137 | //U8G2_SSD1327_ZJY_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 138 | //U8G2_SSD1327_ZJY_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */ |
| 139 | //U8G2_SSD1327_WS_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 140 | //U8G2_SSD1327_WS_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 141 | //U8G2_SSD1327_VISIONOX_128X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 142 | //U8G2_SSD1327_VISIONOX_128X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 143 | //U8G2_SSD1329_128X96_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 144 | //U8G2_SSD1329_128X96_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 145 | //U8G2_SSD1329_96X96_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 146 | //U8G2_SSD1329_96X96_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 147 | //U8G2_SSD1329_96X96_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ A4, /* dc=*/ A2, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather 32u4 Basic Proto |
| 148 | //U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 149 | //U8G2_SSD1305_128X32_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 150 | //U8G2_SSD1305_128X32_ADAFRUIT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 151 | //U8G2_SSD1305_128X32_ADAFRUIT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 152 | //U8G2_SSD1305_128X64_ADAFRUIT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 153 | //U8G2_SSD1305_128X64_ADAFRUIT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 154 | //U8G2_SSD1305_128X64_RAYSTAR_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 155 | //U8G2_SSD1305_128X64_RAYSTAR_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 156 | //U8G2_SSD1309_128X64_NONAME0_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 157 | //U8G2_SSD1309_128X64_NONAME0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 158 | //U8G2_SSD1309_128X128_NONAME0_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 159 | //U8G2_SSD1309_128X128_NONAME0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 160 | //U8G2_SSD1309_128X64_NONAME2_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 161 | //U8G2_SSD1309_128X64_NONAME2_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 162 | //U8G2_SSD1316_128X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 163 | //U8G2_SSD1316_128X32_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 164 | //U8G2_SSD1316_96X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 165 | //U8G2_SSD1316_96X32_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 166 | //U8G2_SSD1317_96X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // not tested, not confirmed |
| 167 | //U8G2_SSD1317_96X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // not tested, not confirmed |
| 168 | //U8G2_SSD1318_128X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 169 | //U8G2_SSD1318_128X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 170 | //U8G2_SSD1320_160X132_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 171 | //U8G2_SSD1320_160X132_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 172 | //U8G2_SSD1320_160X80_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 173 | //U8G2_SSD1320_160X80_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 174 | //U8G2_SSD1320_128X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 175 | //U8G2_SSD1320_128X72_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 176 | //U8G2_LD7032_60X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8); // SW SPI Nano Board |
| 177 | //U8G2_LD7032_60X32_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE); // NOT TESTED! |
| 178 | //U8G2_LD7032_60X32_ALT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8); // SW SPI Nano Board |
| 179 | //U8G2_LD7032_60X32_ALT_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE); // NOT TESTED! |
| 180 | //U8G2_LD7032_128X36_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8); // SW SPI Nano Board |
| 181 | //U8G2_LD7032_128X36_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE); // NOT TESTED! |
| 182 | //U8G2_UC1701_EA_DOGS102_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 183 | //U8G2_UC1701_EA_DOGS102_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 184 | //U8G2_PCD8544_84X48_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Nokia 5110 Display |
| 185 | //U8G2_PCD8544_84X48_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Nokia 5110 Display |
| 186 | //U8G2_PCF8812_96X65_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Could be also PCF8814 |
| 187 | //U8G2_PCF8812_96X65_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Could be also PCF8814 |
| 188 | //U8G2_PCF8812_101X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Could be also PCF8814 |
| 189 | //U8G2_PCF8812_101X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Could be also PCF8814 |
| 190 | //U8G2_HX1230_96X68_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8); |
| 191 | //U8G2_HX1230_96X68_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 192 | //U8G2_KS0108_128X64_1 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ U8X8_PIN_NONE, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low! |
| 193 | //U8G2_KS0108_ERM19264_1 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ 16, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low! |
| 194 | //U8G2_HD44102_100X64_1 u8g2(U8G2_R0, 4, 5, 6, 7, 8, 9, 10, 11, /*enable=*/ 2, /*dc=*/ 3, /*cs0=*/ A0, /*cs1=*/ A1, /*cs2=*/ A2, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low! |
| 195 | //U8G2_T7932_150X32_1 u8g2(U8G2_R0, 4, 5, 6, 7, 8, 9, 10, 11, /*enable=*/ 2, /*dc=*/ 3, /*cs0=*/ A0, /*cs1=*/ A1, /*cs2=*/ A2, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low! |
| 196 | //U8G2_ST7920_256X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE); |
| 197 | //U8G2_ST7920_256X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); |
| 198 | //U8G2_ST7920_192X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE); |
| 199 | //U8G2_ST7920_192X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); |
| 200 | //U8G2_ST7920_128X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE); |
| 201 | //U8G2_ST7920_128X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); |
| 202 | //U8G2_ST7920_144X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE); |
| 203 | //U8G2_ST7920_144X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); |
| 204 | //U8G2_ST7920_160X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE); |
| 205 | //U8G2_ST7920_160X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); |
| 206 | //U8G2_ST7920_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */); // Remember to set R/W to 0 |
| 207 | //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE); |
| 208 | //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8); |
| 209 | //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 14, /* data=*/ 13, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS |
| 210 | //U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8); |
| 211 | //U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS |
| 212 | //U8G2_ST7528_ERC16064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 213 | //U8G2_ST7528_ERC16064_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 214 | //U8G2_ST7539_192X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 215 | //U8G2_ST7539_192X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 216 | //U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 217 | //U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 218 | //U8G2_ST7565_64128N_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 219 | //U8G2_ST7565_64128N_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 220 | //U8G2_ST7565_EA_DOGM132_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); // DOGM132 Shield |
| 221 | //U8G2_ST7565_EA_DOGM132_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); // DOGM132 Shield |
| 222 | //U8G2_ST7565_ZOLEN_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 223 | //U8G2_ST7565_ZOLEN_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 224 | //U8G2_ST7565_LM6059_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Adafruit ST7565 GLCD |
| 225 | //U8G2_ST7565_LM6059_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Adafruit ST7565 GLCD |
| 226 | //U8G2_ST7565_KS0713_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // KS0713 controller |
| 227 | //U8G2_ST7565_KS0713_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // KS0713 controller |
| 228 | //U8G2_ST7565_LX12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 229 | //U8G2_ST7565_LX12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 230 | //U8G2_ST7565_ERC12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 231 | //U8G2_ST7565_ERC12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 232 | //U8G2_ST7565_ERC12864_ALT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // contrast improved version for ERC12864 |
| 233 | //U8G2_ST7565_ERC12864_ALT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // contrast improved version for ERC12864 |
| 234 | //U8G2_ST7565_NHD_C12832_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 235 | //U8G2_ST7565_NHD_C12832_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 236 | //U8G2_ST7565_NHD_C12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 237 | //U8G2_ST7565_NHD_C12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 238 | //U8G2_ST7565_JLX12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 239 | //U8G2_ST7565_JLX12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 240 | //U8G2_ST7567_PI_132X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); // Pax Instruments Shield, LCD_BL=6 |
| 241 | //U8G2_ST7567_PI_132X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); // Pax Instruments Shield, LCD_BL=6 |
| 242 | //U8G2_ST7567_JLX12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); |
| 243 | //U8G2_ST7567_JLX12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); |
| 244 | //U8G2_ST7567_122X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); |
| 245 | //U8G2_ST7567_122X32_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); |
| 246 | //U8G2_ST7567_OS12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); |
| 247 | //U8G2_ST7567_OS12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); |
| 248 | //U8G2_ST7567_ENH_DG128064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 249 | //U8G2_ST7567_ENH_DG128064_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 250 | //U8G2_ST7567_ENH_DG128064I_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 251 | //U8G2_ST7567_ENH_DG128064I_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 252 | //U8G2_ST7567_64X32_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 253 | //U8G2_ST7567_HEM6432_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); |
| 254 | //U8G2_ST7567_ERC13232_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 255 | //U8G2_ST7567_ERC13232_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 256 | //U8G2_ST7567_96X65_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 257 | //U8G2_ST7567_96X65_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 258 | //U8G2_ST7571_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 259 | //U8G2_ST7571_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 260 | //U8G2_ST7571_128X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 261 | //U8G2_ST7571_128X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 262 | //U8G2_ST7571_G12896_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 263 | //U8G2_ST7571_G12896_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 264 | //U8G2_ST7302_122X250_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 265 | //U8G2_ST7305_122X250_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 266 | //U8G2_ST7305_200X200_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 267 | //U8G2_ST7305_168X384_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 268 | //U8G2_ST7305_300X400_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 269 | //U8G2_ST7586S_JLX384160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno: Enable U8g2 16 bit mode for this display |
| 270 | //U8G2_ST7586S_ERC240160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 271 | //U8G2_ST7586S_YMC240160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 272 | //U8G2_ST7586S_JLX320160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno: Enable U8g2 16 bit mode for this display |
| 273 | //U8G2_ST75160_JM16096_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 274 | //U8G2_ST75160_JM16096_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 275 | //U8G2_ST75161_JLX160160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 276 | //U8G2_ST75161_JLX160160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 277 | //U8G2_ST75256_JLX172104_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 278 | //U8G2_ST75256_JLX172104_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 279 | //U8G2_ST75256_JLX19296_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 280 | //U8G2_ST75256_JLX19296_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 281 | //U8G2_ST75256_JLX16080_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 282 | //U8G2_ST75256_JLX16080_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 283 | //U8G2_ST75256_JLX256128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 284 | //U8G2_ST75256_JLX256128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 285 | //U8G2_ST75256_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 286 | //U8G2_ST75256_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 287 | //U8G2_ST75256_WO256X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 288 | //U8G2_ST75256_WO256X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 289 | //U8G2_ST75256_JLX256128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 9, /* data=*/ 8, /* cs=*/ 7, /* dc=*/ 6, /* reset=*/ 5); // MKR Zero, Enable U8g2 16 bit mode for this display |
| 290 | //U8G2_ST75256_JLX256128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 6, /* reset=*/ 5); // MKR Zero, Enable U8g2 16 bit mode for this display |
| 291 | //U8G2_ST75256_JLX256160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 292 | //U8G2_ST75256_JLX256160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 293 | //U8G2_ST75256_JLX256160M_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 294 | //U8G2_ST75256_JLX256160M_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 295 | //U8G2_ST75256_JLX256160_ALT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 296 | //U8G2_ST75256_JLX256160_ALT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 297 | //U8G2_ST75256_JLX240160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 298 | //U8G2_ST75256_JLX240160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 299 | //U8G2_ST75256_JLX25664_1_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); // Due, 2nd I2C, enable U8g2 16 bit mode for this display |
| 300 | //U8G2_ST75320_JLX320240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 301 | //U8G2_ST75320_JLX320240_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display |
| 302 | //U8G2_NT7534_TG12864R_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 303 | //U8G2_NT7534_TG12864R_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 304 | //U8G2_ST7588_JLX12864_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ 5); |
| 305 | //U8G2_ST7588_JLX12864_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 5); |
| 306 | //U8G2_IST3020_ERC19264_1_6800 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37, /*enable=*/ 28, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect WR pin with GND |
| 307 | //U8G2_IST3020_ERC19264_1_8080 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37, /*enable=*/ 29, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect RD pin with 3.3V |
| 308 | //U8G2_IST3020_ERC19264_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 309 | //U8G2_IST3088_320X240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 310 | //U8G2_IST3088_320X240_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 311 | //U8G2_IST7920_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Round display |
| 312 | //U8G2_IST7920_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Round display |
| 313 | //U8G2_LC7981_160X80_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND |
| 314 | //U8G2_LC7981_160X160_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND |
| 315 | //U8G2_LC7981_240X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND |
| 316 | //U8G2_LC7981_240X64_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND |
| 317 | //U8G2_LC7981_128X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND |
| 318 | //U8G2_SED1520_122X32_1 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*dc=*/ A0, /*e1=*/ A3, /*e2=*/ A2, /* reset=*/ A4); // Set R/W to low! |
| 319 | //U8G2_T6963_240X128_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND |
| 320 | //U8G2_T6963_256X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND |
| 321 | //U8G2_T6963_160X80_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND |
| 322 | //U8G2_T6963_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND |
| 323 | //U8G2_T6963_128X64_ALT_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND |
| 324 | //U8G2_T6963_128X160_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND |
| 325 | //U8G2_SED1330_240X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0 |
| 326 | //U8G2_SED1330_240X128_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0 |
| 327 | //U8G2_SED1330_240X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E |
| 328 | //U8G2_SED1330_256X128_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0, enable U8g2 16Bit Mode |
| 329 | //U8G2_SED1330_256X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E, enable U8g2 16Bit Mode |
| 330 | //U8G2_SED1330_320X200_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0, enable U8g2 16Bit Mode |
| 331 | //U8G2_SED1330_320X200_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E, enable U8g2 16Bit Mode |
| 332 | //U8G2_RA8835_NHD_240X128_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0 |
| 333 | //U8G2_RA8835_NHD_240X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E |
| 334 | //U8G2_UC1601_128X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 335 | //U8G2_UC1601_128X32_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8); |
| 336 | //U8G2_UC1601_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 337 | //U8G2_UC1604_JLX19264_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 338 | //U8G2_UC1604_JLX19264_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 339 | //U8G2_UC1609_SLG19264_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 340 | //U8G2_UC1609_SLG19264_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 341 | //U8G2_UC1608_ERC24064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due ERC24064-1 Test Setup |
| 342 | //U8G2_UC1608_DEM240064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due ERC24064-1 Test Setup |
| 343 | //U8G2_UC1608_ERC240120_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 344 | //U8G2_UC1608_240X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due ERC24064-1 Test Setup |
| 345 | //U8G2_UC1610_EA_DOGXL160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); |
| 346 | //U8G2_UC1610_EA_DOGXL160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); |
| 347 | //U8G2_UC1611_EA_DOGM240_1_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); // Due, 2nd I2C, DOGM240 Test Board |
| 348 | //U8G2_UC1611_EA_DOGM240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due DOGXL240 Test Board |
| 349 | //U8G2_UC1611_EA_DOGXL240_1_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); // Due, 2nd I2C, DOGXL240 Test Board |
| 350 | //U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due DOGXL240 Test Board |
| 351 | //U8G2_UC1611_EW50850_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 3, /*dc=*/ 16, /*reset=*/ 17); // 240x160, Connect RD/WR1 pin with 3.3V, CS is aktive high |
| 352 | //U8G2_UC1611_CG160160_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 3, /*dc=*/ 16, /*reset=*/ 17); // Connect WR1 and CD1 pin with 3.3V, connect CS0 with cs, WR0 with enable, CD with dc |
| 353 | //U8G2_UC1611_IDS4073_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8g2 16Bit Mode |
| 354 | //U8G2_UC1611_IDS4073_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8g2 16Bit Mode |
| 355 | //U8G2_UC1617_JLX128128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 356 | //U8G2_UC1617_JLX128128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 357 | //U8G2_UC1628_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 3, /*dc=*/ 16, /*reset=*/ 17); // UC1628 pin names: enable: /WR, dc: CD |
| 358 | //U8G2_UC1628_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 359 | //U8G2_UC1628_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 360 | //U8G2_UC1628_256X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 361 | //U8G2_UC1628_256X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 362 | //U8G2_UC1628_256X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 363 | //U8G2_UC1628_256X32_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 364 | //U8G2_UC1638_192X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 365 | //U8G2_UC1638_192X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 366 | //U8G2_UC1638_192X96_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8); // u8g2 test board: I2C clock/data is same as SPI, I2C default address is 0x78 |
| 367 | //U8G2_UC1638_240X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 368 | //U8G2_UC1638_240X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 369 | //U8G2_UC1638_240X128_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8); // u8g2 test board: I2C clock/data is same as SPI, I2C default address is 0x78 |
| 370 | //U8G2_UC1698_160X160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 371 | //U8G2_UC1698_160X160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 372 | //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display |
| 373 | //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display, original LUT from embedded artists |
| 374 | //U8G2_SSD1607_GD_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Good Display |
| 375 | //U8G2_SSD1607_WS_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Waveshare |
| 376 | //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! |
| 377 | //U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! |
| 378 | //U8G2_LS013B7DH03_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display |
| 379 | //U8G2_LS027B7DH01_400X240_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display, SPI Mode 2 |
| 380 | //U8G2_LS027B7DH01_M0_400X240_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display, SPI Mode 0 |
| 381 | //U8G2_LS013B7DH05_144X168_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display |
| 382 | //U8G2_ST7511_AVD_320X240_1_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable/WR=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); // Enable U8g2 16Bit Mode and connect RD pin with 3.3V/5V |
| 383 | //U8G2_ST7511_640X320_1_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable/WR=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); // Enable U8g2 16Bit Mode and connect RD pin with 3.3V/5V |
| 384 | //U8G2_S1D15300_LM6023_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 385 | //U8G2_S1D15300_LM6023_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 386 | //U8G2_S1D15300_100X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 387 | //U8G2_S1D15300_100X32_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 388 | //U8G2_S1D15300_100X32I_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 389 | //U8G2_S1D15300_100X32I_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 390 | //U8G2_S1D15721_240X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 391 | //U8G2_S1D15721_240X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 392 | //U8G2_GU800_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 393 | //U8G2_GU800_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 394 | //U8G2_GU800_160X16_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 395 | //U8G2_GU800_160X16_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); |
| 396 | //U8G2_GP1294AI_256X48_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8); |
| 397 | |
| 398 | |
| 399 | |
| 400 | |
| 401 | // End of constructor list |
| 402 | |
| 403 | |
| 404 | |
| 405 | /* button setup for Arduboy Production */ |
| 406 | uint8_t pin_up = A0; |
| 407 | uint8_t pin_down = A3; |
| 408 | uint8_t pin_fire = 7; |
| 409 | |
| 410 | |
| 411 | |
| 412 | |
| 413 | #define ST_FP 4 |
| 414 | |
| 415 | /* object types */ |
| 416 | struct _st_ot_struct |
| 417 | { |
| 418 | /* |
| 419 | missle and hit: |
| 420 | bit 0: player missle and trash |
| 421 | bit 1: trash, which might hit the player |
| 422 | */ |
| 423 | |
| 424 | uint8_t missle_mask; /* this object is a missle: it might destroy something if the target is_hit_fn says so */ |
| 425 | uint8_t hit_mask; /* if missle_mask & hit_mask is != 0 then the object can be destroyed */ |
| 426 | uint8_t points; |
| 427 | uint8_t draw_fn; |
| 428 | uint8_t move_fn; |
| 429 | /* ST_MOVE_FN_NONE, ST_MOVE_FN_X_SLOW */ |
| 430 | uint8_t destroy_fn; /* object can be destroyed by a missle (e.g. a missle from the space ship) */ |
| 431 | /* ST_DESTROY_FN_NONE, ST_DESTROY_FN_SPLIT */ |
| 432 | uint8_t is_hit_fn; /* is hit procedure */ |
| 433 | /* ST_IS_HIT_FN_NONE, ST_IS_HIT_BBOX */ |
| 434 | uint8_t fire_fn; |
| 435 | /* ST_FIRE_FN_NONE, ST_FIRE_FN_X_LEFT */ |
| 436 | |
| 437 | }; |
| 438 | typedef struct _st_ot_struct st_ot; |
| 439 | |
| 440 | /* |
| 441 | objects, which are visible at the play area |
| 442 | */ |
| 443 | struct _st_obj_struct |
| 444 | { |
| 445 | uint8_t ot; /* object type: zero means, object is not used */ |
| 446 | int8_t tmp; /* generic value, used by ST_MOVE_IMPLODE */ |
| 447 | /* absolute position */ |
| 448 | /* LCD pixel position is x>>ST_FP and y>>ST_FP */ |
| 449 | int16_t x, y; |
| 450 | int8_t x0,y0,x1,y1; /* object outline in pixel, reference point is at 0,0 */ |
| 451 | }; |
| 452 | typedef struct _st_obj_struct st_obj; |
| 453 | |
| 454 | #define ST_DRAW_NONE 0 |
| 455 | #define ST_DRAW_BBOX 1 |
| 456 | #define ST_DRAW_TRASH1 2 |
| 457 | #define ST_DRAW_PLAYER1 3 |
| 458 | #define ST_DRAW_TRASH2 4 |
| 459 | #define ST_DRAW_PLAYER2 5 |
| 460 | #define ST_DRAW_PLAYER3 6 |
| 461 | #define ST_DRAW_GADGET 7 |
| 462 | #define ST_DRAW_BACKSLASH 8 |
| 463 | #define ST_DRAW_SLASH 9 |
| 464 | #define ST_DRAW_BIG_TRASH 10 |
| 465 | |
| 466 | #define ST_MOVE_NONE 0 |
| 467 | #define ST_MOVE_X_SLOW 1 |
| 468 | #define ST_MOVE_PX_NORMAL 2 |
| 469 | #define ST_MOVE_PX_FAST 3 |
| 470 | #define ST_MOVE_PLAYER 4 |
| 471 | #define ST_MOVE_PY 5 |
| 472 | #define ST_MOVE_NY 6 |
| 473 | #define ST_MOVE_IMPLODE 7 |
| 474 | #define ST_MOVE_X_FAST 8 |
| 475 | #define ST_MOVE_WALL 9 |
| 476 | #define ST_MOVE_NXPY 10 |
| 477 | #define ST_MOVE_NXNY 11 |
| 478 | |
| 479 | #define ST_IS_HIT_NONE 0 |
| 480 | #define ST_IS_HIT_BBOX 1 |
| 481 | #define ST_IS_HIT_WALL 2 |
| 482 | |
| 483 | #define ST_DESTROY_NONE 0 |
| 484 | #define ST_DESTROY_DISAPPEAR 1 |
| 485 | #define ST_DESTROY_TO_DUST 2 |
| 486 | #define ST_DESTROY_GADGET 3 |
| 487 | #define ST_DESTROY_PLAYER 4 |
| 488 | #define ST_DESTROY_PLAYER_GADGETS 5 |
| 489 | #define ST_DESTROY_BIG_TRASH 6 |
| 490 | |
| 491 | #define ST_FIRE_NONE 0 |
| 492 | #define ST_FIRE_PLAYER1 1 |
| 493 | #define ST_FIRE_PLAYER2 2 |
| 494 | #define ST_FIRE_PLAYER3 3 |
| 495 | |
| 496 | #define ST_OT_WALL_SOLID 1 |
| 497 | #define ST_OT_BIG_TRASH 2 |
| 498 | #define ST_OT_MISSLE 3 |
| 499 | #define ST_OT_TRASH1 4 |
| 500 | #define ST_OT_PLAYER 5 |
| 501 | #define ST_OT_DUST_PY 6 |
| 502 | #define ST_OT_DUST_NY 7 |
| 503 | #define ST_OT_TRASH_IMPLODE 8 |
| 504 | #define ST_OT_TRASH2 9 |
| 505 | #define ST_OT_PLAYER2 10 |
| 506 | #define ST_OT_PLAYER3 11 |
| 507 | #define ST_OT_GADGET 12 |
| 508 | #define ST_OT_GADGET_IMPLODE 13 |
| 509 | #define ST_OT_DUST_NXPY 14 |
| 510 | #define ST_OT_DUST_NXNY 15 |
| 511 | |
| 512 | |
| 513 | /*================================================================*/ |
| 514 | /* graphics object */ |
| 515 | /*================================================================*/ |
| 516 | |
| 517 | u8g2_t *st_u8g2; |
| 518 | |
| 519 | u8g2_uint_t u8g_height_minus_one; |
| 520 | |
| 521 | |
| 522 | #define ST_AREA_HEIGHT (st_u8g2->height - 8) |
| 523 | #define ST_AREA_WIDTH (st_u8g2->width) |
| 524 | |
| 525 | |
| 526 | /*================================================================*/ |
| 527 | /* object types */ |
| 528 | /*================================================================*/ |
| 529 | |
| 530 | |
| 531 | const st_ot st_object_types[] U8X8_PROGMEM = |
| 532 | { |
| 533 | /* 0: empty object type */ |
| 534 | { 0, 0, 0, ST_DRAW_NONE, ST_MOVE_NONE, ST_DESTROY_DISAPPEAR, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 535 | /* 1: wall, player will be destroyed */ |
| 536 | { 2, 1, 30, ST_DRAW_BBOX, ST_MOVE_WALL, ST_DESTROY_DISAPPEAR, ST_IS_HIT_WALL, ST_FIRE_NONE }, |
| 537 | /* ST_OT_BIG_TRASH (2) */ |
| 538 | { 2, 1, 0, ST_DRAW_BIG_TRASH, ST_MOVE_X_SLOW, ST_DESTROY_BIG_TRASH, ST_IS_HIT_BBOX, ST_FIRE_NONE }, |
| 539 | /* 3: simple space ship (player) missle */ |
| 540 | { 1, 0, 0, ST_DRAW_BBOX, ST_MOVE_PX_FAST, ST_DESTROY_DISAPPEAR, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 541 | /* ST_OT_TRASH1 (4): trash */ |
| 542 | { 2, 1, 0, ST_DRAW_TRASH1, ST_MOVE_X_SLOW, ST_DESTROY_TO_DUST, ST_IS_HIT_BBOX, ST_FIRE_NONE }, |
| 543 | /* ST_OT_PLAYER (5): player space ship */ |
| 544 | { 0, 2, 0, ST_DRAW_PLAYER1, ST_MOVE_PLAYER, ST_DESTROY_PLAYER, ST_IS_HIT_BBOX, ST_FIRE_PLAYER1 }, |
| 545 | /* ST_OT_DUST_PY (6): Last part of trash */ |
| 546 | { 0, 0, 0, ST_DRAW_BBOX, ST_MOVE_PY, ST_DESTROY_NONE, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 547 | /* ST_OT_DUST_NY (7): Last part of trash */ |
| 548 | { 0, 0, 0, ST_DRAW_BBOX, ST_MOVE_NY, ST_DESTROY_NONE, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 549 | /* ST_OT_TRASH_IMPLODE (8): trash was hit */ |
| 550 | { 0, 0, 5, ST_DRAW_TRASH1, ST_MOVE_IMPLODE, ST_DESTROY_NONE, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 551 | /* ST_OT_TRASH2 (9): trash */ |
| 552 | { 2, 1, 0, ST_DRAW_TRASH2, ST_MOVE_X_SLOW, ST_DESTROY_TO_DUST, ST_IS_HIT_BBOX, ST_FIRE_NONE }, |
| 553 | /* ST_OT_PLAYER2 (10): player space ship+1x enhancement */ |
| 554 | { 0, 2, 0, ST_DRAW_PLAYER2, ST_MOVE_PLAYER, ST_DESTROY_PLAYER_GADGETS, ST_IS_HIT_BBOX, ST_FIRE_PLAYER2 }, |
| 555 | /* ST_OT_PLAYER3 (11): player space ship+2x enhancement */ |
| 556 | { 0, 2, 0, ST_DRAW_PLAYER3, ST_MOVE_PLAYER, ST_DESTROY_PLAYER_GADGETS, ST_IS_HIT_BBOX, ST_FIRE_PLAYER3 }, |
| 557 | /* ST_OT_GADGET (12): adds enhancements */ |
| 558 | { 0, 1, 0, ST_DRAW_GADGET, ST_MOVE_X_FAST, ST_DESTROY_GADGET, ST_IS_HIT_BBOX, ST_FIRE_NONE }, |
| 559 | /* ST_OT_GADGET_IMPLODE (13) */ |
| 560 | { 0, 0, 20, ST_DRAW_GADGET, ST_MOVE_IMPLODE, ST_DESTROY_NONE, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 561 | /* ST_OT_DUST_NXPY (14): Last part of trash */ |
| 562 | { 0, 0, 0, ST_DRAW_BACKSLASH, ST_MOVE_NXPY, ST_DESTROY_NONE, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 563 | /* ST_OT_DUST_NXNY (15): Last part of trash */ |
| 564 | { 0, 0, 0, ST_DRAW_SLASH, ST_MOVE_NXNY, ST_DESTROY_NONE, ST_IS_HIT_NONE, ST_FIRE_NONE }, |
| 565 | |
| 566 | }; |
| 567 | |
| 568 | /*================================================================*/ |
| 569 | /* list of all objects on the screen */ |
| 570 | /*================================================================*/ |
| 571 | |
| 572 | /* use AVR RAMEND constant to derive the number of allowed objects */ |
| 573 | |
| 574 | #if RAMEND < 0x300 |
| 575 | #define ST_OBJ_CNT 25 |
| 576 | #else |
| 577 | //#define ST_OBJ_CNT 45 |
| 578 | #define ST_OBJ_CNT 60 |
| 579 | #endif |
| 580 | |
| 581 | st_obj st_objects[ST_OBJ_CNT]; |
| 582 | |
| 583 | /*================================================================*/ |
| 584 | /* about players space ship*/ |
| 585 | /*================================================================*/ |
| 586 | |
| 587 | /* player position */ |
| 588 | uint8_t st_player_pos; |
| 589 | |
| 590 | /* points */ |
| 591 | #define ST_POINTS_PER_LEVEL 25 |
| 592 | uint16_t st_player_points; |
| 593 | uint16_t st_player_points_delayed; |
| 594 | uint16_t st_highscore = 0; |
| 595 | |
| 596 | /*================================================================*/ |
| 597 | /* overall game state */ |
| 598 | /*================================================================*/ |
| 599 | |
| 600 | #define ST_STATE_PREPARE 0 |
| 601 | #define ST_STATE_IPREPARE 1 |
| 602 | #define ST_STATE_GAME 2 |
| 603 | #define ST_STATE_END 3 |
| 604 | #define ST_STATE_IEND 4 |
| 605 | |
| 606 | uint8_t st_state = ST_STATE_PREPARE; |
| 607 | |
| 608 | /*================================================================*/ |
| 609 | /* game difficulty */ |
| 610 | /*================================================================*/ |
| 611 | uint8_t st_difficulty = 1; |
| 612 | #define ST_DIFF_VIS_LEN 30 |
| 613 | #define ST_DIFF_FP 5 |
| 614 | uint16_t st_to_diff_cnt = 0; |
| 615 | |
| 616 | /*================================================================*/ |
| 617 | /* bitmaps */ |
| 618 | /*================================================================*/ |
| 619 | |
| 620 | const uint8_t st_bitmap_player1[] = |
| 621 | { |
| 622 | /* 01100000 */ 0x060, |
| 623 | /* 11111000 */ 0x0f8, |
| 624 | /* 01111110 */ 0x07e, |
| 625 | /* 11111000 */ 0x0f8, |
| 626 | /* 01100000 */ 0x060 |
| 627 | }; |
| 628 | |
| 629 | const uint8_t st_bitmap_player2[] = |
| 630 | { |
| 631 | /* 01100000 */ 0x060, |
| 632 | /* 01111100 */ 0x078, |
| 633 | /* 01100000 */ 0x060, |
| 634 | /* 11100000 */ 0x0e0, |
| 635 | /* 11111000 */ 0x0f8, |
| 636 | /* 01111110 */ 0x07e, |
| 637 | /* 11111000 */ 0x0f8, |
| 638 | /* 01100000 */ 0x060 |
| 639 | }; |
| 640 | |
| 641 | const uint8_t st_bitmap_player3[] = |
| 642 | { |
| 643 | /* 01100000 */ 0x060, |
| 644 | /* 01111100 */ 0x078, |
| 645 | /* 01100000 */ 0x060, |
| 646 | /* 11100000 */ 0x0e0, |
| 647 | /* 11111000 */ 0x0f8, |
| 648 | /* 01111110 */ 0x07e, |
| 649 | /* 11111000 */ 0x0f8, |
| 650 | /* 11100000 */ 0x0e0, |
| 651 | /* 01100000 */ 0x060, |
| 652 | /* 01111100 */ 0x078, |
| 653 | /* 01100000 */ 0x060 |
| 654 | }; |
| 655 | |
| 656 | const uint8_t st_bitmap_trash_5x5_1[] = |
| 657 | { |
| 658 | /* 01110000 */ 0x070, |
| 659 | /* 11110000 */ 0x0f0, |
| 660 | /* 11111000 */ 0x0f8, |
| 661 | /* 01111000 */ 0x078, |
| 662 | /* 00110000 */ 0x030, |
| 663 | }; |
| 664 | |
| 665 | const uint8_t st_bitmap_trash_5x5_2[] = |
| 666 | { |
| 667 | /* 00110000 */ 0x030, |
| 668 | /* 11111000 */ 0x0f8, |
| 669 | /* 11111000 */ 0x0f8, |
| 670 | /* 11110000 */ 0x0f0, |
| 671 | /* 01110000 */ 0x070, |
| 672 | }; |
| 673 | |
| 674 | const uint8_t st_bitmap_trash_7x7[] = |
| 675 | { |
| 676 | /* 00111000 */ 0x038, |
| 677 | /* 01111100 */ 0x07c, |
| 678 | /* 11111100 */ 0x0fc, |
| 679 | /* 11111110 */ 0x0fe, |
| 680 | /* 11111110 */ 0x0fe, |
| 681 | /* 01111110 */ 0x07e, |
| 682 | /* 01111000 */ 0x078, |
| 683 | }; |
| 684 | |
| 685 | const uint8_t st_bitmap_gadget[] = |
| 686 | { |
| 687 | /* 01110000 */ 0x070, |
| 688 | /* 11011000 */ 0x0d8, |
| 689 | /* 10001000 */ 0x088, |
| 690 | /* 11011000 */ 0x0d8, |
| 691 | /* 01110000 */ 0x070, |
| 692 | }; |
| 693 | |
| 694 | /*================================================================*/ |
| 695 | /* forward definitions */ |
| 696 | /*================================================================*/ |
| 697 | uint8_t st_rnd(void) U8X8_NOINLINE; |
| 698 | static st_obj *st_GetObj(uint8_t objnr) U8X8_NOINLINE; |
| 699 | uint8_t st_GetMissleMask(uint8_t objnr); |
| 700 | uint8_t st_GetHitMask(uint8_t objnr); |
| 701 | int8_t st_FindObj(uint8_t ot) U8X8_NOINLINE; |
| 702 | void st_ClrObjs(void) U8X8_NOINLINE; |
| 703 | int8_t st_NewObj(void) U8X8_NOINLINE; |
| 704 | uint8_t st_CntObj(uint8_t ot); |
| 705 | uint8_t st_CalcXY(st_obj *o) U8X8_NOINLINE; |
| 706 | void st_SetXY(st_obj *o, uint8_t x, uint8_t y) U8X8_NOINLINE; |
| 707 | |
| 708 | void st_FireStep(uint8_t is_auto_fire, uint8_t is_fire) U8X8_NOINLINE; |
| 709 | |
| 710 | void st_InitTrash(uint8_t x, uint8_t y, int8_t dir); |
| 711 | void st_NewGadget(uint8_t x, uint8_t y); |
| 712 | void st_NewPlayerMissle(uint8_t x, uint8_t y) ; |
| 713 | void st_NewTrashDust(uint8_t x, uint8_t y, int ot); |
| 714 | void st_NewTrashDustAreaArgs(int16_t x, int16_t y, int ot); |
| 715 | void st_SetupPlayer(uint8_t objnr, uint8_t ot); |
| 716 | |
| 717 | |
| 718 | /*================================================================*/ |
| 719 | /* utility functions */ |
| 720 | /*================================================================*/ |
| 721 | |
| 722 | char st_itoa_buf[12]; |
| 723 | char *st_itoa(unsigned long v) |
| 724 | { |
| 725 | volatile unsigned char i = 11; |
| 726 | st_itoa_buf[11] = '\0'; |
| 727 | while( i > 0) |
| 728 | { |
| 729 | i--; |
| 730 | st_itoa_buf[i] = (v % 10)+'0'; |
| 731 | v /= 10; |
| 732 | if ( v == 0 ) |
| 733 | break; |
| 734 | } |
| 735 | return st_itoa_buf+i; |
| 736 | } |
| 737 | |
| 738 | |
| 739 | uint8_t st_rnd(void) |
| 740 | { |
| 741 | return rand(); |
| 742 | } |
| 743 | |
| 744 | /* |
| 745 | for the specified index number, return the object |
| 746 | */ |
| 747 | static st_obj *st_GetObj(uint8_t objnr) |
| 748 | { |
| 749 | return st_objects+objnr; |
| 750 | } |
| 751 | |
| 752 | |
| 753 | /* |
| 754 | check, if this is a missle-like object (that is, can this object destroy something else) |
| 755 | */ |
| 756 | uint8_t st_GetMissleMask(uint8_t objnr) |
| 757 | { |
| 758 | st_obj *o = st_GetObj(objnr); |
| 759 | return u8x8_pgm_read(&(st_object_types[o->ot].missle_mask)); |
| 760 | } |
| 761 | |
| 762 | /* |
| 763 | check, if this is a missle-like object (that is, can this object destroy something else) |
| 764 | */ |
| 765 | uint8_t st_GetHitMask(uint8_t objnr) |
| 766 | { |
| 767 | st_obj *o = st_GetObj(objnr); |
| 768 | return u8x8_pgm_read(&(st_object_types[o->ot].hit_mask)); |
| 769 | } |
| 770 | |
| 771 | /* |
| 772 | search an empty object |
| 773 | */ |
| 774 | int8_t st_FindObj(uint8_t ot) |
| 775 | { |
| 776 | int8_t i; |
| 777 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 778 | { |
| 779 | if ( st_objects[i].ot == ot ) |
| 780 | return i; |
| 781 | } |
| 782 | return -1; |
| 783 | } |
| 784 | |
| 785 | /* |
| 786 | delete all objects |
| 787 | */ |
| 788 | |
| 789 | void st_ClrObjs(void) |
| 790 | { |
| 791 | int8_t i; |
| 792 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 793 | st_objects[i].ot = 0; |
| 794 | } |
| 795 | |
| 796 | /* |
| 797 | search an empty object |
| 798 | */ |
| 799 | int8_t st_NewObj(void) |
| 800 | { |
| 801 | int8_t i; |
| 802 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 803 | { |
| 804 | if ( st_objects[i].ot == 0 ) |
| 805 | return i; |
| 806 | } |
| 807 | return -1; |
| 808 | } |
| 809 | |
| 810 | /* |
| 811 | count number of objectes of the provided type |
| 812 | st_CntObj(0) will return the number of empty objects, that means if |
| 813 | st_CntObj(0) > 0 then st_NewObj() will return a valid index |
| 814 | */ |
| 815 | uint8_t st_CntObj(uint8_t ot) |
| 816 | { |
| 817 | uint8_t i; |
| 818 | uint8_t cnt = 0; |
| 819 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 820 | { |
| 821 | if ( st_objects[i].ot == ot ) |
| 822 | cnt++; |
| 823 | } |
| 824 | return cnt; |
| 825 | } |
| 826 | |
| 827 | /* |
| 828 | calculate the pixel coordinates of the reference point of an object |
| 829 | return rhe x value |
| 830 | */ |
| 831 | uint8_t st_px_x, st_px_y; /* pixel within area */ |
| 832 | uint8_t st_CalcXY(st_obj *o) |
| 833 | { |
| 834 | //st_obj *o = st_GetObj(objnr); |
| 835 | st_px_y = o->y>>ST_FP; |
| 836 | st_px_x = o->x>>ST_FP; |
| 837 | return st_px_x; |
| 838 | } |
| 839 | |
| 840 | void st_SetXY(st_obj *o, uint8_t x, uint8_t y) |
| 841 | { |
| 842 | o->x = ((int16_t)x) << ST_FP; |
| 843 | o->y = ((int16_t)y) << ST_FP; |
| 844 | } |
| 845 | |
| 846 | /* |
| 847 | calculate the object bounding box and place it into some global variables |
| 848 | */ |
| 849 | int16_t st_bbox_x0, st_bbox_y0, st_bbox_x1, st_bbox_y1; |
| 850 | |
| 851 | void st_CalcBBOX(uint8_t objnr) |
| 852 | { |
| 853 | st_obj *o = st_GetObj(objnr); |
| 854 | |
| 855 | st_bbox_x0 = (uint16_t)(o->x>>ST_FP); |
| 856 | st_bbox_x1 = st_bbox_x0; |
| 857 | st_bbox_x0 += o->x0; |
| 858 | st_bbox_x1 += o->x1; |
| 859 | |
| 860 | st_bbox_y0 = (uint16_t)(o->y>>ST_FP); |
| 861 | st_bbox_y1 = st_bbox_y0; |
| 862 | st_bbox_y0 += o->y0; |
| 863 | st_bbox_y1 += o->y1; |
| 864 | } |
| 865 | |
| 866 | /* |
| 867 | clip bbox with the view window. requires a call to st_CalcBBOX |
| 868 | return 0, if the bbox is totally outside the window |
| 869 | */ |
| 870 | uint8_t st_cbbox_x0, st_cbbox_y0, st_cbbox_x1, st_cbbox_y1; |
| 871 | uint8_t st_ClipBBOX(void) |
| 872 | { |
| 873 | if ( st_bbox_x0 >= ST_AREA_WIDTH ) |
| 874 | return 0; |
| 875 | if ( st_bbox_x0 >= 0 ) |
| 876 | st_cbbox_x0 = (uint16_t)st_bbox_x0; |
| 877 | else |
| 878 | st_cbbox_x0 = 0; |
| 879 | |
| 880 | if ( st_bbox_x1 < 0 ) |
| 881 | return 0; |
| 882 | if ( st_bbox_x1 < ST_AREA_WIDTH ) |
| 883 | st_cbbox_x1 = (uint16_t)st_bbox_x1; |
| 884 | else |
| 885 | st_cbbox_x1 = ST_AREA_WIDTH-1; |
| 886 | |
| 887 | if ( st_bbox_y0 >= ST_AREA_HEIGHT ) |
| 888 | return 0; |
| 889 | if ( st_bbox_y0 >= 0 ) |
| 890 | st_cbbox_y0 = (uint16_t)st_bbox_y0; |
| 891 | else |
| 892 | st_cbbox_y0 = 0; |
| 893 | |
| 894 | if ( st_bbox_y1 < 0 ) |
| 895 | return 0; |
| 896 | if ( st_bbox_y1 < ST_AREA_HEIGHT ) |
| 897 | st_cbbox_y1 = (uint16_t)st_bbox_y1; |
| 898 | else |
| 899 | st_cbbox_y1 = ST_AREA_HEIGHT-1; |
| 900 | |
| 901 | return 1; |
| 902 | } |
| 903 | |
| 904 | |
| 905 | /*================================================================*/ |
| 906 | /* universal member functions */ |
| 907 | /*================================================================*/ |
| 908 | |
| 909 | |
| 910 | uint8_t st_IsOut(uint8_t objnr) |
| 911 | { |
| 912 | st_CalcBBOX(objnr); |
| 913 | if ( st_bbox_x0 >= ST_AREA_WIDTH ) |
| 914 | return 1; |
| 915 | if ( st_bbox_x1 < 0 ) |
| 916 | return 1; |
| 917 | if ( st_bbox_y0 >= ST_AREA_HEIGHT ) |
| 918 | return 1; |
| 919 | if ( st_bbox_y1 < 0 ) |
| 920 | return 1; |
| 921 | return 0; |
| 922 | } |
| 923 | |
| 924 | void st_Disappear(uint8_t objnr) |
| 925 | { |
| 926 | st_obj *o = st_GetObj(objnr); |
| 927 | st_player_points += u8x8_pgm_read(&(st_object_types[o->ot].points)); |
| 928 | o->ot = 0; |
| 929 | } |
| 930 | |
| 931 | /*================================================================*/ |
| 932 | /* type dependent member functions */ |
| 933 | /*================================================================*/ |
| 934 | |
| 935 | void st_Move(uint8_t objnr) |
| 936 | { |
| 937 | st_obj *o = st_GetObj(objnr); |
| 938 | switch(u8x8_pgm_read(&(st_object_types[o->ot].move_fn))) |
| 939 | { |
| 940 | case ST_MOVE_NONE: |
| 941 | break; |
| 942 | case ST_MOVE_X_SLOW: |
| 943 | o->x -= (1<<ST_FP)/8; |
| 944 | o->x -= st_difficulty; |
| 945 | o->y += (int16_t)o->tmp; |
| 946 | if ( o->y >= ((ST_AREA_HEIGHT-1) << ST_FP) || o->y <= 0 ) |
| 947 | o->tmp = - o->tmp; |
| 948 | break; |
| 949 | case ST_MOVE_X_FAST: |
| 950 | o->x -= (1<<ST_FP)/2; |
| 951 | o->y += (int16_t)o->tmp; |
| 952 | if ( o->y >= ((ST_AREA_HEIGHT-1) << ST_FP) || o->y <= 0 ) |
| 953 | o->tmp = - o->tmp; |
| 954 | break; |
| 955 | case ST_MOVE_PX_NORMAL: |
| 956 | o->x += (1<<ST_FP)/4; |
| 957 | break; |
| 958 | case ST_MOVE_PX_FAST: |
| 959 | o->x += (1<<ST_FP); |
| 960 | break; |
| 961 | case ST_MOVE_PLAYER: |
| 962 | o->y = st_player_pos<<ST_FP; |
| 963 | break; |
| 964 | case ST_MOVE_PY: |
| 965 | o->y += 3*ST_FP; |
| 966 | break; |
| 967 | case ST_MOVE_NY: |
| 968 | o->y -= 3*ST_FP; |
| 969 | break; |
| 970 | case ST_MOVE_NXPY: |
| 971 | o->y += 3*ST_FP; |
| 972 | o->x -= 3*ST_FP; |
| 973 | break; |
| 974 | case ST_MOVE_NXNY: |
| 975 | o->y -= 3*ST_FP; |
| 976 | o->x -= 3*ST_FP; |
| 977 | break; |
| 978 | case ST_MOVE_IMPLODE: |
| 979 | o->tmp++; |
| 980 | if ( (o->tmp & 0x03) == 0 ) |
| 981 | { |
| 982 | if ( o->x0 != o->x1 ) |
| 983 | o->x0++; |
| 984 | else |
| 985 | st_Disappear(objnr); |
| 986 | } |
| 987 | break; |
| 988 | case ST_MOVE_WALL: |
| 989 | o->x -= 1; |
| 990 | o->x -= (st_difficulty>>1); |
| 991 | break; |
| 992 | } |
| 993 | } |
| 994 | |
| 995 | void st_DrawBBOX(uint8_t objnr) |
| 996 | { |
| 997 | uint8_t y0, y1; |
| 998 | /*st_obj *o = st_GetObj(objnr);*/ |
| 999 | st_CalcBBOX(objnr); |
| 1000 | if ( st_ClipBBOX() == 0 ) |
| 1001 | return; |
| 1002 | /* st_cbbox_x0, st_cbbox_y0, st_cbbox_x1, st_cbbox_y1; */ |
| 1003 | |
| 1004 | |
| 1005 | // w = st_cbbox_x1-st_cbbox_x0; |
| 1006 | // w++; |
| 1007 | // h = st_cbbox_y1-st_cbbox_y0; |
| 1008 | // h++; |
| 1009 | |
| 1010 | |
| 1011 | //dog_SetVLine(st_cbbox_x0, st_cbbox_y0, st_cbbox_y1); |
| 1012 | //dog_SetVLine(st_cbbox_x1, st_cbbox_y0, st_cbbox_y1); |
| 1013 | //dog_SetHLine(st_cbbox_x0, st_cbbox_x1, st_cbbox_y0); |
| 1014 | //dog_SetHLine(st_cbbox_x0, st_cbbox_x1, st_cbbox_y1); |
| 1015 | |
| 1016 | u8g2_SetDrawColor(st_u8g2, 1); |
| 1017 | y0 = u8g_height_minus_one - st_cbbox_y0; |
| 1018 | y1 = u8g_height_minus_one - st_cbbox_y1; |
| 1019 | |
| 1020 | u8g2_DrawFrame(st_u8g2, st_cbbox_x0, y1, st_cbbox_x1-st_cbbox_x0+1, y0-y1+1); |
| 1021 | |
| 1022 | //dog_SetBox(st_cbbox_x0, st_cbbox_y0, st_cbbox_x1, st_cbbox_y1); |
| 1023 | |
| 1024 | /* |
| 1025 | if ( o->ot == ST_OT_PLAYER ) |
| 1026 | { |
| 1027 | dog_DrawStr(0, 26, font_4x6, st_itoa(st_cbbox_y0)); |
| 1028 | dog_DrawStr(10, 26, font_4x6, st_itoa(st_cbbox_y1)); |
| 1029 | } |
| 1030 | */ |
| 1031 | } |
| 1032 | |
| 1033 | #ifdef FN_IS_NOT_IN_USE |
| 1034 | void st_DrawFilledBox(uint8_t objnr) |
| 1035 | { |
| 1036 | st_CalcBBOX(objnr); |
| 1037 | if ( st_ClipBBOX() == 0 ) |
| 1038 | return; |
| 1039 | /* st_cbbox_x0, st_cbbox_y0, st_cbbox_x1, st_cbbox_y1; */ |
| 1040 | dog_SetBox(st_cbbox_x0, st_cbbox_y0, st_cbbox_x1, st_cbbox_y1); |
| 1041 | } |
| 1042 | #endif |
| 1043 | |
| 1044 | void st_DrawBitmap(uint8_t objnr, const uint8_t * bm, uint8_t w, uint8_t h) |
| 1045 | { |
| 1046 | /* st_obj *o = st_GetObj(objnr); */ |
| 1047 | st_CalcBBOX(objnr); |
| 1048 | /* result is here: int16_t st_bbox_x0, st_bbox_y0, st_bbox_x1, st_bbox_y1 */ |
| 1049 | //dog_SetBitmapP(st_bbox_x0,st_bbox_y1,bm,w,h); |
| 1050 | |
| 1051 | u8g2_DrawBitmap(st_u8g2, st_bbox_x0, u8g_height_minus_one - st_bbox_y1, (w+7)/8, h, bm); |
| 1052 | |
| 1053 | } |
| 1054 | |
| 1055 | void st_DrawObj(uint8_t objnr) |
| 1056 | { |
| 1057 | st_obj *o = st_GetObj(objnr); |
| 1058 | switch(u8x8_pgm_read(&(st_object_types[o->ot].draw_fn))) |
| 1059 | { |
| 1060 | case ST_DRAW_NONE: |
| 1061 | break; |
| 1062 | case ST_DRAW_BBOX: |
| 1063 | st_DrawBBOX(objnr); |
| 1064 | break; |
| 1065 | case ST_DRAW_TRASH1: |
| 1066 | st_DrawBitmap(objnr, st_bitmap_trash_5x5_1,o->x1-o->x0+1, 5); |
| 1067 | break; |
| 1068 | case ST_DRAW_TRASH2: |
| 1069 | st_DrawBitmap(objnr, st_bitmap_trash_5x5_2,o->x1-o->x0+1, 5); |
| 1070 | break; |
| 1071 | case ST_DRAW_BIG_TRASH: |
| 1072 | st_DrawBitmap(objnr, st_bitmap_trash_7x7,o->x1-o->x0+1, 7); |
| 1073 | break; |
| 1074 | case ST_DRAW_PLAYER1: |
| 1075 | st_DrawBitmap(objnr, st_bitmap_player1,7,5); |
| 1076 | break; |
| 1077 | case ST_DRAW_PLAYER2: |
| 1078 | st_DrawBitmap(objnr, st_bitmap_player2,7,8); |
| 1079 | break; |
| 1080 | case ST_DRAW_PLAYER3: |
| 1081 | st_DrawBitmap(objnr, st_bitmap_player3,7,11); |
| 1082 | break; |
| 1083 | case ST_DRAW_GADGET: |
| 1084 | /* could use this proc, but... */ |
| 1085 | /* st_DrawBitmap(objnr, st_bitmap_gadget,o->x1-o->x0+1, 5); */ |
| 1086 | /* ... this one looks also funny. */ |
| 1087 | st_DrawBitmap(objnr, st_bitmap_gadget,5,5); |
| 1088 | break; |
| 1089 | case ST_DRAW_BACKSLASH: |
| 1090 | { |
| 1091 | uint8_t x; |
| 1092 | uint8_t y; |
| 1093 | x = st_CalcXY(o); |
| 1094 | y = st_px_y; |
| 1095 | |
| 1096 | |
| 1097 | // dog_SetPixel(x,y); |
| 1098 | // x++; y--; |
| 1099 | // dog_SetPixel(x,y); |
| 1100 | // x++; y--; |
| 1101 | // dog_SetPixel(x,y); |
| 1102 | |
| 1103 | u8g2_SetDrawColor(st_u8g2, 1); |
| 1104 | u8g2_DrawPixel(st_u8g2, x, u8g_height_minus_one - y); |
| 1105 | x++; y--; |
| 1106 | u8g2_DrawPixel(st_u8g2, x, u8g_height_minus_one - y); |
| 1107 | x++; y--; |
| 1108 | u8g2_DrawPixel(st_u8g2, x, u8g_height_minus_one - y); |
| 1109 | } |
| 1110 | break; |
| 1111 | case ST_DRAW_SLASH: |
| 1112 | { |
| 1113 | uint8_t x; |
| 1114 | uint8_t y; |
| 1115 | x = st_CalcXY(o); |
| 1116 | y = st_px_y; |
| 1117 | |
| 1118 | // dog_SetPixel(x,y); |
| 1119 | // x++; y++; |
| 1120 | // dog_SetPixel(x,y); |
| 1121 | // x++; y++; |
| 1122 | // dog_SetPixel(x,y); |
| 1123 | |
| 1124 | u8g2_SetDrawColor(st_u8g2, 1); |
| 1125 | u8g2_DrawPixel(st_u8g2, x, u8g_height_minus_one - y); |
| 1126 | x++; y++; |
| 1127 | u8g2_DrawPixel(st_u8g2, x, u8g_height_minus_one - y); |
| 1128 | x++; y++; |
| 1129 | u8g2_DrawPixel(st_u8g2, x, u8g_height_minus_one - y); |
| 1130 | } |
| 1131 | break; |
| 1132 | } |
| 1133 | } |
| 1134 | |
| 1135 | uint8_t st_IsHitBBOX(uint8_t objnr, uint8_t x, uint8_t y) |
| 1136 | { |
| 1137 | st_CalcBBOX(objnr); |
| 1138 | if ( st_ClipBBOX() == 0 ) |
| 1139 | return 0; /* obj is outside (not visible) */ |
| 1140 | if ( x < st_cbbox_x0 ) |
| 1141 | return 0; |
| 1142 | if ( x > st_cbbox_x1 ) |
| 1143 | return 0; |
| 1144 | if ( y < st_cbbox_y0 ) |
| 1145 | return 0; |
| 1146 | if ( y > st_cbbox_y1 ) |
| 1147 | return 0; |
| 1148 | return 1; |
| 1149 | } |
| 1150 | |
| 1151 | void st_Destroy(uint8_t objnr) |
| 1152 | { |
| 1153 | int8_t nr; |
| 1154 | st_obj *o = st_GetObj(objnr); |
| 1155 | switch(u8x8_pgm_read(&(st_object_types[o->ot].destroy_fn))) |
| 1156 | { |
| 1157 | case ST_DESTROY_NONE: /* only usefull for missels or walls which stay alife */ |
| 1158 | break; |
| 1159 | case ST_DESTROY_DISAPPEAR: /* this should be the default operation */ |
| 1160 | st_Disappear(objnr); |
| 1161 | break; |
| 1162 | case ST_DESTROY_GADGET: |
| 1163 | nr = st_FindObj(ST_OT_PLAYER2); |
| 1164 | if ( nr >= 0 ) |
| 1165 | st_SetupPlayer(nr, ST_OT_PLAYER3); |
| 1166 | else |
| 1167 | { |
| 1168 | nr = st_FindObj(ST_OT_PLAYER); |
| 1169 | if ( nr >= 0 ) |
| 1170 | st_SetupPlayer(nr, ST_OT_PLAYER2); |
| 1171 | } |
| 1172 | st_NewTrashDustAreaArgs(o->x, o->y, ST_OT_DUST_PY); |
| 1173 | st_NewTrashDustAreaArgs(o->x, o->y, ST_OT_DUST_NY); |
| 1174 | o->ot = ST_OT_GADGET_IMPLODE; |
| 1175 | o->tmp = 0; |
| 1176 | break; |
| 1177 | case ST_DESTROY_TO_DUST: |
| 1178 | st_NewTrashDustAreaArgs(o->x, o->y, ST_OT_DUST_PY); |
| 1179 | st_NewTrashDustAreaArgs(o->x, o->y, ST_OT_DUST_NY); |
| 1180 | o->ot = ST_OT_TRASH_IMPLODE; |
| 1181 | o->tmp = 0; |
| 1182 | break; |
| 1183 | case ST_DESTROY_BIG_TRASH: |
| 1184 | st_NewTrashDustAreaArgs(o->x, o->y, ST_OT_DUST_PY); |
| 1185 | st_NewTrashDustAreaArgs(o->x, o->y, ST_OT_DUST_NY); |
| 1186 | st_InitTrash((o->x>>ST_FP)-1, (o->y>>ST_FP)+3, 2+(st_rnd()&3)); |
| 1187 | st_InitTrash((o->x>>ST_FP)-2, (o->y>>ST_FP)-3, -2-(st_rnd()&3)); |
| 1188 | st_Disappear(objnr); |
| 1189 | break; |
| 1190 | case ST_DESTROY_PLAYER: |
| 1191 | st_Disappear(objnr); |
| 1192 | st_state = ST_STATE_END; |
| 1193 | o->tmp = 0; |
| 1194 | break; |
| 1195 | case ST_DESTROY_PLAYER_GADGETS: |
| 1196 | /* o->ot = ST_OT_PLAYER; */ |
| 1197 | st_SetupPlayer(objnr, ST_OT_PLAYER); |
| 1198 | break; |
| 1199 | } |
| 1200 | } |
| 1201 | |
| 1202 | /* |
| 1203 | check if the target (objnr) has been hit. |
| 1204 | st_IsHit() must also destroy the target. |
| 1205 | return value: |
| 1206 | 0: do not destroy the missle |
| 1207 | 1: destroy the missle |
| 1208 | */ |
| 1209 | uint8_t st_IsHit(uint8_t objnr, uint8_t x, uint8_t y, uint8_t missle_mask) |
| 1210 | { |
| 1211 | uint8_t hit_mask = st_GetHitMask(objnr); |
| 1212 | st_obj *o; |
| 1213 | |
| 1214 | if ( (hit_mask & missle_mask) == 0 ) |
| 1215 | return 0; |
| 1216 | |
| 1217 | o = st_GetObj(objnr); |
| 1218 | |
| 1219 | switch(u8x8_pgm_read(&(st_object_types[o->ot].is_hit_fn))) |
| 1220 | { |
| 1221 | case ST_IS_HIT_NONE: |
| 1222 | break; |
| 1223 | case ST_IS_HIT_BBOX: |
| 1224 | if ( st_IsHitBBOX(objnr, x, y) != 0 ) |
| 1225 | { |
| 1226 | st_Destroy(objnr); |
| 1227 | return 1; |
| 1228 | } |
| 1229 | break; |
| 1230 | case ST_IS_HIT_WALL: |
| 1231 | if ( st_IsHitBBOX(objnr, x, y) != 0 ) |
| 1232 | { |
| 1233 | o->x0++; |
| 1234 | if ( o->x0 < o->x1 ) |
| 1235 | { |
| 1236 | st_NewTrashDust(x, y, ST_OT_DUST_NXPY); |
| 1237 | st_NewTrashDust(x, y, ST_OT_DUST_NXNY); |
| 1238 | } |
| 1239 | else |
| 1240 | { |
| 1241 | st_Destroy(objnr); |
| 1242 | st_NewTrashDust(x, y, ST_OT_DUST_NXPY); |
| 1243 | st_NewTrashDust(x, y, ST_OT_DUST_NXNY); |
| 1244 | st_NewTrashDust(x, y, ST_OT_DUST_NY); |
| 1245 | st_NewTrashDust(x, y, ST_OT_DUST_PY); |
| 1246 | } |
| 1247 | return 1; |
| 1248 | } |
| 1249 | break; |
| 1250 | } |
| 1251 | return 0; |
| 1252 | } |
| 1253 | |
| 1254 | |
| 1255 | |
| 1256 | /* update all fire counters */ |
| 1257 | uint8_t st_fire_player = 0; |
| 1258 | uint8_t st_fire_period = 51; |
| 1259 | uint8_t st_manual_fire_delay = 20; |
| 1260 | uint8_t st_is_fire_last_value = 0; |
| 1261 | |
| 1262 | /* |
| 1263 | is_auto_fire == 1 |
| 1264 | is_fire will be ignored, autofire enabled |
| 1265 | is_auto_fire == 0 |
| 1266 | a transition from 1 to 0 on the is_fire variable will issue a missle |
| 1267 | */ |
| 1268 | void st_FireStep(uint8_t is_auto_fire, uint8_t is_fire) |
| 1269 | { |
| 1270 | if ( is_auto_fire != 0 ) |
| 1271 | { |
| 1272 | st_fire_player++; |
| 1273 | if ( st_fire_player >= st_fire_period ) |
| 1274 | st_fire_player = 0; |
| 1275 | } |
| 1276 | else |
| 1277 | { |
| 1278 | if ( st_fire_player < st_manual_fire_delay ) |
| 1279 | { |
| 1280 | st_fire_player++; |
| 1281 | } |
| 1282 | else |
| 1283 | { |
| 1284 | if ( st_is_fire_last_value == 0 ) |
| 1285 | if ( is_fire != 0 ) |
| 1286 | st_fire_player = 0; |
| 1287 | } |
| 1288 | st_is_fire_last_value = is_fire; |
| 1289 | } |
| 1290 | } |
| 1291 | |
| 1292 | void st_Fire(uint8_t objnr) |
| 1293 | { |
| 1294 | st_obj *o = st_GetObj(objnr); |
| 1295 | uint8_t x; |
| 1296 | uint8_t y; |
| 1297 | |
| 1298 | switch(u8x8_pgm_read(&(st_object_types[o->ot].fire_fn))) |
| 1299 | { |
| 1300 | case ST_FIRE_NONE: |
| 1301 | break; |
| 1302 | case ST_FIRE_PLAYER1: |
| 1303 | if ( st_fire_player == 0 ) |
| 1304 | { |
| 1305 | /* create missle at st_px_x and st_px_y */ |
| 1306 | x = st_CalcXY(o); |
| 1307 | y = st_px_y; |
| 1308 | st_NewPlayerMissle(x , y ); |
| 1309 | } |
| 1310 | break; |
| 1311 | case ST_FIRE_PLAYER2: |
| 1312 | if ( st_fire_player == 0 ) |
| 1313 | { |
| 1314 | /* create missle at st_px_x and st_px_y */ |
| 1315 | x = st_CalcXY(o); |
| 1316 | y = st_px_y; |
| 1317 | st_NewPlayerMissle(x , y ); |
| 1318 | st_NewPlayerMissle(x , y+4 ); |
| 1319 | } |
| 1320 | break; |
| 1321 | case ST_FIRE_PLAYER3: |
| 1322 | if ( st_fire_player == 0 ) |
| 1323 | { |
| 1324 | /* create missle at st_px_x and st_px_y */ |
| 1325 | x = st_CalcXY(o); |
| 1326 | y = st_px_y; |
| 1327 | st_NewPlayerMissle(x , y ); |
| 1328 | st_NewPlayerMissle(x , y+4 ); |
| 1329 | st_NewPlayerMissle(x , y-4 ); |
| 1330 | } |
| 1331 | break; |
| 1332 | } |
| 1333 | } |
| 1334 | |
| 1335 | /*================================================================*/ |
| 1336 | /* object init functions */ |
| 1337 | /*================================================================*/ |
| 1338 | |
| 1339 | /* |
| 1340 | x,y are pixel coordinats within the play arey |
| 1341 | */ |
| 1342 | void st_NewGadget(uint8_t x, uint8_t y) |
| 1343 | { |
| 1344 | st_obj *o; |
| 1345 | int8_t objnr = st_NewObj(); |
| 1346 | if ( objnr < 0 ) |
| 1347 | return; |
| 1348 | o = st_GetObj(objnr); |
| 1349 | st_SetXY(o, x, y); |
| 1350 | o->ot = ST_OT_GADGET; |
| 1351 | o->tmp = 8; |
| 1352 | //o->x = (x)<<ST_FP; |
| 1353 | //o->y = (y)<<ST_FP; |
| 1354 | o->x0 = -3; |
| 1355 | o->x1 = 1; |
| 1356 | o->y0 = -2; |
| 1357 | o->y1 = 2; |
| 1358 | } |
| 1359 | |
| 1360 | /* |
| 1361 | x,y are pixel coordinats within the play arey |
| 1362 | dir: direction |
| 1363 | 0: random |
| 1364 | != 0 --> assigned |
| 1365 | */ |
| 1366 | void st_InitTrash(uint8_t x, uint8_t y, int8_t dir) |
| 1367 | { |
| 1368 | st_obj *o; |
| 1369 | int8_t objnr = st_NewObj(); |
| 1370 | if ( objnr < 0 ) |
| 1371 | return; |
| 1372 | o = st_GetObj(objnr); |
| 1373 | if ( (st_rnd() & 1) == 0 ) |
| 1374 | o->ot = ST_OT_TRASH1; |
| 1375 | else |
| 1376 | o->ot = ST_OT_TRASH2; |
| 1377 | if ( dir == 0 ) |
| 1378 | { |
| 1379 | o->tmp = 0; |
| 1380 | if ( st_rnd() & 1 ) |
| 1381 | { |
| 1382 | if ( st_rnd() & 1 ) |
| 1383 | o->tmp++; |
| 1384 | else |
| 1385 | o->tmp--; |
| 1386 | } |
| 1387 | } |
| 1388 | else |
| 1389 | { |
| 1390 | o->tmp = dir; |
| 1391 | } |
| 1392 | st_SetXY(o, x, y); |
| 1393 | //o->x = (x)<<ST_FP; |
| 1394 | //o->y = (y)<<ST_FP; |
| 1395 | o->x0 = -3; |
| 1396 | o->x1 = 1; |
| 1397 | o->y0 = -2; |
| 1398 | o->y1 = 2; |
| 1399 | if ( st_difficulty >= 5 ) |
| 1400 | { |
| 1401 | if ( (st_rnd() & 3) == 0 ) |
| 1402 | { |
| 1403 | o->ot = ST_OT_BIG_TRASH; |
| 1404 | o->y0--; |
| 1405 | o->y1++; |
| 1406 | o->x0--; |
| 1407 | o->x1++; |
| 1408 | } |
| 1409 | } |
| 1410 | } |
| 1411 | |
| 1412 | /* |
| 1413 | x,y are pixel coordinats within the play arey |
| 1414 | */ |
| 1415 | void st_NewTrashDust(uint8_t x, uint8_t y, int ot) |
| 1416 | { |
| 1417 | st_obj *o; |
| 1418 | int8_t objnr = st_NewObj(); |
| 1419 | if ( objnr < 0 ) |
| 1420 | return; |
| 1421 | o = st_GetObj(objnr); |
| 1422 | o->ot = ot; |
| 1423 | st_SetXY(o, x, y); |
| 1424 | //o->x = (x)<<ST_FP; |
| 1425 | //o->y = (y)<<ST_FP; |
| 1426 | o->x0 = 0; |
| 1427 | o->x1 = 0; |
| 1428 | o->y0 = -2; |
| 1429 | o->y1 = 2; |
| 1430 | } |
| 1431 | |
| 1432 | void st_NewTrashDustAreaArgs(int16_t x, int16_t y, int ot) |
| 1433 | { |
| 1434 | st_NewTrashDust(x>>ST_FP, y>>ST_FP, ot); |
| 1435 | } |
| 1436 | |
| 1437 | |
| 1438 | void st_NewWall(void) |
| 1439 | { |
| 1440 | st_obj *o; |
| 1441 | int8_t objnr = st_NewObj(); |
| 1442 | int8_t h; |
| 1443 | if ( objnr < 0 ) |
| 1444 | return; |
| 1445 | o = st_GetObj(objnr); |
| 1446 | o->ot = ST_OT_WALL_SOLID; |
| 1447 | h = st_rnd(); |
| 1448 | h &= 63; |
| 1449 | h = (int8_t)(((int16_t)h*(int16_t)(ST_AREA_HEIGHT/4))>>6); |
| 1450 | h += ST_AREA_HEIGHT/6; |
| 1451 | |
| 1452 | o->x0 = 0; |
| 1453 | o->x1 = 5; |
| 1454 | o->x = (ST_AREA_WIDTH-1)<<ST_FP; |
| 1455 | |
| 1456 | if ( (st_rnd() & 1) == 0 ) |
| 1457 | { |
| 1458 | o->y = (ST_AREA_HEIGHT-1)<<ST_FP; |
| 1459 | |
| 1460 | o->y0 = -h; |
| 1461 | o->y1 = 0; |
| 1462 | } |
| 1463 | else |
| 1464 | { |
| 1465 | o->y = (0)<<ST_FP; |
| 1466 | o->y0 = 0; |
| 1467 | o->y1 = h; |
| 1468 | } |
| 1469 | } |
| 1470 | |
| 1471 | void st_NewPlayerMissle(uint8_t x, uint8_t y) |
| 1472 | { |
| 1473 | st_obj *o; |
| 1474 | int8_t objnr = st_NewObj(); |
| 1475 | if ( objnr < 0 ) |
| 1476 | return; |
| 1477 | o = st_GetObj(objnr); |
| 1478 | o->ot = ST_OT_MISSLE; |
| 1479 | st_SetXY(o, x, y); |
| 1480 | //o->x = x<<ST_FP; |
| 1481 | //o->y = y<<ST_FP; |
| 1482 | o->x0 = -4; |
| 1483 | o->x1 = 1; |
| 1484 | o->y0 = 0; |
| 1485 | o->y1 = 0; |
| 1486 | } |
| 1487 | |
| 1488 | void st_SetupPlayer(uint8_t objnr, uint8_t ot) |
| 1489 | { |
| 1490 | st_obj *o = st_GetObj(objnr); |
| 1491 | switch(ot) |
| 1492 | { |
| 1493 | case ST_OT_PLAYER: |
| 1494 | o->ot = ot; |
| 1495 | o->y0 = -2; |
| 1496 | o->y1 = 2; |
| 1497 | break; |
| 1498 | case ST_OT_PLAYER2: |
| 1499 | o->ot = ot; |
| 1500 | o->y0 = -2; |
| 1501 | o->y1 = 5; |
| 1502 | break; |
| 1503 | case ST_OT_PLAYER3: |
| 1504 | o->ot = ot; |
| 1505 | o->y0 = -5; |
| 1506 | o->y1 = 5; |
| 1507 | break; |
| 1508 | } |
| 1509 | } |
| 1510 | |
| 1511 | void st_NewPlayer(void) |
| 1512 | { |
| 1513 | st_obj *o; |
| 1514 | int8_t objnr = st_NewObj(); |
| 1515 | if ( objnr < 0 ) |
| 1516 | return; |
| 1517 | o = st_GetObj(objnr); |
| 1518 | o->x = 6<<ST_FP; |
| 1519 | o->y = (ST_AREA_HEIGHT/2)<<ST_FP; |
| 1520 | o->x0 = -6; |
| 1521 | o->x1 = 0; |
| 1522 | st_SetupPlayer(objnr, ST_OT_PLAYER); |
| 1523 | } |
| 1524 | |
| 1525 | /*================================================================*/ |
| 1526 | /* trash creation */ |
| 1527 | /*================================================================*/ |
| 1528 | |
| 1529 | void st_InitDeltaWall(void) |
| 1530 | { |
| 1531 | uint8_t i; |
| 1532 | uint8_t cnt = 0; |
| 1533 | uint8_t max_x = 0; |
| 1534 | uint8_t max_l; |
| 1535 | |
| 1536 | uint8_t min_dist_for_new = 40; |
| 1537 | uint8_t my_difficulty = st_difficulty; |
| 1538 | |
| 1539 | if ( st_difficulty >= 2 ) |
| 1540 | { |
| 1541 | |
| 1542 | max_l = ST_AREA_WIDTH; |
| 1543 | max_l -= min_dist_for_new; |
| 1544 | |
| 1545 | if ( my_difficulty > 30 ) |
| 1546 | my_difficulty = 30; |
| 1547 | min_dist_for_new -= my_difficulty; |
| 1548 | |
| 1549 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 1550 | { |
| 1551 | if ( st_objects[i].ot == ST_OT_WALL_SOLID ) |
| 1552 | { |
| 1553 | cnt++; |
| 1554 | if ( max_x < (st_objects[i].x>>ST_FP) ) |
| 1555 | max_x = (st_objects[i].x>>ST_FP); |
| 1556 | } |
| 1557 | } |
| 1558 | /* if ( cnt < upper_trash_limit ) */ |
| 1559 | if ( max_x < max_l ) |
| 1560 | { |
| 1561 | st_NewWall(); |
| 1562 | } |
| 1563 | } |
| 1564 | } |
| 1565 | |
| 1566 | |
| 1567 | void st_InitDeltaTrash(void) |
| 1568 | { |
| 1569 | uint8_t i; |
| 1570 | uint8_t cnt = 0; |
| 1571 | uint8_t max_x = 0; |
| 1572 | uint8_t max_l; |
| 1573 | |
| 1574 | uint8_t upper_trash_limit = ST_OBJ_CNT-7; |
| 1575 | uint8_t min_dist_for_new = 20; |
| 1576 | uint8_t my_difficulty = st_difficulty; |
| 1577 | |
| 1578 | if ( my_difficulty > 14 ) |
| 1579 | my_difficulty = 14; |
| 1580 | min_dist_for_new -= my_difficulty; |
| 1581 | |
| 1582 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 1583 | { |
| 1584 | if ( st_objects[i].ot == ST_OT_TRASH1 || st_objects[i].ot == ST_OT_TRASH2 || st_objects[i].ot == ST_OT_GADGET || st_objects[i].ot == ST_OT_BIG_TRASH ) |
| 1585 | { |
| 1586 | cnt++; |
| 1587 | if ( max_x < (st_objects[i].x>>ST_FP) ) |
| 1588 | max_x = (st_objects[i].x>>ST_FP); |
| 1589 | } |
| 1590 | } |
| 1591 | |
| 1592 | max_l = ST_AREA_WIDTH; |
| 1593 | max_l -= min_dist_for_new; |
| 1594 | |
| 1595 | if ( cnt < upper_trash_limit ) |
| 1596 | if ( max_x < max_l ) |
| 1597 | { |
| 1598 | if ( (st_difficulty >= 3) && ((st_rnd() & 7) == 0) ) |
| 1599 | st_NewGadget(ST_AREA_WIDTH-1, rand() & (ST_AREA_HEIGHT-1)); |
| 1600 | else |
| 1601 | st_InitTrash(ST_AREA_WIDTH-1, rand() & (ST_AREA_HEIGHT-1),0 ); |
| 1602 | } |
| 1603 | } |
| 1604 | |
| 1605 | void st_InitDelta(void) |
| 1606 | { |
| 1607 | st_InitDeltaTrash(); |
| 1608 | st_InitDeltaWall(); |
| 1609 | /* |
| 1610 | |
| 1611 | uint8_t cnt; |
| 1612 | cnt = st_CntObj(2); |
| 1613 | if ( cnt == 0 ) |
| 1614 | st_InitBrick1(); |
| 1615 | */ |
| 1616 | } |
| 1617 | |
| 1618 | /*================================================================*/ |
| 1619 | /* API: game draw procedure */ |
| 1620 | /*================================================================*/ |
| 1621 | |
| 1622 | void st_DrawInGame(uint8_t fps) |
| 1623 | { |
| 1624 | uint8_t i; |
| 1625 | /* draw all objects */ |
| 1626 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 1627 | st_DrawObj(i); |
| 1628 | |
| 1629 | //dog_ClrBox(0, ST_AREA_HEIGHT, st_u8g2->width-1, ST_AREA_HEIGHT+3); |
| 1630 | |
| 1631 | u8g2_SetDrawColor(st_u8g2, 0); |
| 1632 | u8g2_DrawBox(st_u8g2, 0, u8g_height_minus_one - ST_AREA_HEIGHT-3, st_u8g2->width, 4); |
| 1633 | |
| 1634 | u8g2_SetDrawColor(st_u8g2, 1); |
| 1635 | u8g2_DrawHLine(st_u8g2, 0, u8g_height_minus_one - ST_AREA_HEIGHT+1, ST_AREA_WIDTH); |
| 1636 | u8g2_DrawHLine(st_u8g2, 0, u8g_height_minus_one, ST_AREA_WIDTH); |
| 1637 | u8g2_SetFont(st_u8g2, u8g_font_4x6r); |
| 1638 | u8g2_DrawStr(st_u8g2, 0, u8g_height_minus_one - ST_AREA_HEIGHT, st_itoa(st_difficulty)); |
| 1639 | u8g2_DrawHLine(st_u8g2, 10, u8g_height_minus_one - ST_AREA_HEIGHT-3, (st_to_diff_cnt>>ST_DIFF_FP)+1); |
| 1640 | u8g2_DrawVLine(st_u8g2, 10, u8g_height_minus_one - ST_AREA_HEIGHT-4, 3); |
| 1641 | u8g2_DrawVLine(st_u8g2, 10+ST_DIFF_VIS_LEN, u8g_height_minus_one - ST_AREA_HEIGHT-4, 3); |
| 1642 | |
| 1643 | |
| 1644 | /* player points */ |
| 1645 | u8g2_DrawStr(st_u8g2, ST_AREA_WIDTH-5*4-2, u8g_height_minus_one - ST_AREA_HEIGHT, st_itoa(st_player_points_delayed)); |
| 1646 | |
| 1647 | |
| 1648 | /* FPS output */ |
| 1649 | if ( fps > 0 ) |
| 1650 | { |
| 1651 | //i = dog_DrawStr(ST_AREA_WIDTH-5*4-2-7*4, ST_AREA_HEIGHT, font_4x6, "FPS:"); |
| 1652 | i = u8g2_DrawStr(st_u8g2, ST_AREA_WIDTH-5*4-2-7*4, u8g_height_minus_one - ST_AREA_HEIGHT, "FPS:"); |
| 1653 | |
| 1654 | //dog_DrawStr(ST_AREA_WIDTH-5*4-2-7*4+i, ST_AREA_HEIGHT, font_4x6, st_itoa(fps)); |
| 1655 | u8g2_DrawStr(st_u8g2, ST_AREA_WIDTH-5*4-2-7*4+i, u8g_height_minus_one - ST_AREA_HEIGHT, st_itoa(fps)); |
| 1656 | } |
| 1657 | /*dog_DrawStr(60+i, ST_AREA_HEIGHT, font_4x6, st_itoa(st_CntObj(0)));*/ |
| 1658 | } |
| 1659 | |
| 1660 | void st_Draw(uint8_t fps) |
| 1661 | { |
| 1662 | switch(st_state) |
| 1663 | { |
| 1664 | case ST_STATE_PREPARE: |
| 1665 | case ST_STATE_IPREPARE: |
| 1666 | //dog_DrawStr(0, (st_u8g2->height-6)/2, font_4x6, "SpaceTrash"); |
| 1667 | u8g2_SetFont(st_u8g2, u8g_font_4x6r); |
| 1668 | u8g2_SetDrawColor(st_u8g2, 1); |
| 1669 | //dog_DrawStrP(0, (st_u8g2->height-6)/2, font_4x6, DOG_PSTR("SpaceTrash")); |
| 1670 | u8g2_DrawStr(st_u8g2, 0, u8g_height_minus_one - (st_u8g2->height-6)/2, "SpaceTrash"); |
| 1671 | //dog_SetHLine(st_u8g2->width-st_to_diff_cnt-10, st_u8g2->width-st_to_diff_cnt, (st_u8g2->height-6)/2-1); |
| 1672 | u8g2_DrawHLine(st_u8g2, st_u8g2->width-st_to_diff_cnt-10, u8g_height_minus_one - (st_u8g2->height-6)/2+1, 11); |
| 1673 | break; |
| 1674 | case ST_STATE_GAME: |
| 1675 | st_DrawInGame(fps); |
| 1676 | break; |
| 1677 | case ST_STATE_END: |
| 1678 | case ST_STATE_IEND: |
| 1679 | u8g2_SetFont(st_u8g2, u8g_font_4x6r); |
| 1680 | u8g2_SetDrawColor(st_u8g2, 1); |
| 1681 | //dog_DrawStr(0, (st_u8g2->height-6)/2, font_4x6, "Game Over"); |
| 1682 | //dog_DrawStrP(0, (st_u8g2->height-6)/2, font_4x6, DOG_PSTR("Game Over")); |
| 1683 | u8g2_DrawStr(st_u8g2, 0, u8g_height_minus_one - (st_u8g2->height-6)/2, "Game Over"); |
| 1684 | //dog_DrawStr(50, (st_u8g2->height-6)/2, font_4x6, st_itoa(st_player_points)); |
| 1685 | u8g2_DrawStr(st_u8g2, 50, u8g_height_minus_one - (st_u8g2->height-6)/2, st_itoa(st_player_points)); |
| 1686 | //dog_DrawStr(75, (st_u8g2->height-6)/2, font_4x6, st_itoa(st_highscore)); |
| 1687 | u8g2_DrawStr(st_u8g2, 75, u8g_height_minus_one - (st_u8g2->height-6)/2, st_itoa(st_highscore)); |
| 1688 | //dog_SetHLine(st_to_diff_cnt, st_to_diff_cnt+10, (st_u8g2->height-6)/2-1); |
| 1689 | u8g2_DrawHLine(st_u8g2, st_to_diff_cnt, u8g_height_minus_one - (st_u8g2->height-6)/2+1, 11); |
| 1690 | break; |
| 1691 | } |
| 1692 | } |
| 1693 | |
| 1694 | void st_SetupInGame(void) |
| 1695 | { |
| 1696 | st_player_points = 0; |
| 1697 | st_player_points_delayed = 0; |
| 1698 | st_difficulty = 1; |
| 1699 | st_to_diff_cnt = 0; |
| 1700 | st_ClrObjs(); |
| 1701 | st_NewPlayer(); |
| 1702 | /* st_InitBrick1(); */ |
| 1703 | } |
| 1704 | |
| 1705 | |
| 1706 | /*================================================================*/ |
| 1707 | /* API: game setup */ |
| 1708 | /*================================================================*/ |
| 1709 | |
| 1710 | void st_Setup(u8g2_t *u8g) |
| 1711 | { |
| 1712 | st_u8g2 = u8g; |
| 1713 | u8g2_SetBitmapMode(u8g, 1); |
| 1714 | u8g_height_minus_one = u8g->height; |
| 1715 | u8g_height_minus_one--; |
| 1716 | } |
| 1717 | |
| 1718 | /*================================================================*/ |
| 1719 | /* API: game step execution */ |
| 1720 | /*================================================================*/ |
| 1721 | |
| 1722 | /* |
| 1723 | player_pos: 0..255 |
| 1724 | */ |
| 1725 | void st_StepInGame(uint8_t player_pos, uint8_t is_auto_fire, uint8_t is_fire) |
| 1726 | { |
| 1727 | uint8_t i, j; |
| 1728 | uint8_t missle_mask; |
| 1729 | |
| 1730 | /* rescale player pos */ |
| 1731 | //st_player_pos = ((uint16_t)player_pos * (uint16_t)ST_AREA_HEIGHT)/256; |
| 1732 | if ( player_pos < 64 ) |
| 1733 | st_player_pos = 0; |
| 1734 | else if ( player_pos >= 192 ) |
| 1735 | st_player_pos = ST_AREA_HEIGHT-2-1; |
| 1736 | else |
| 1737 | st_player_pos = ((uint16_t)((player_pos-64)) * (uint16_t)(ST_AREA_HEIGHT-2))/128; |
| 1738 | st_player_pos+=1; |
| 1739 | /* move all objects */ |
| 1740 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 1741 | st_Move(i); |
| 1742 | |
| 1743 | /* check for objects which left the play area */ |
| 1744 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 1745 | if ( st_objects[i].ot != 0 ) |
| 1746 | if ( st_IsOut(i) != 0 ) |
| 1747 | st_Disappear(i); |
| 1748 | |
| 1749 | /* missle and destruction handling */ |
| 1750 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 1751 | { |
| 1752 | missle_mask = st_GetMissleMask(i); |
| 1753 | if ( missle_mask != 0 ) /* should we apply missle handling? */ |
| 1754 | if ( st_CalcXY(st_objects+i) != 0 ) /* yes: calculate pixel reference point (st_px_x, st_px_y) */ |
| 1755 | for( j = 0; j < ST_OBJ_CNT; j++ ) /* has any other object been hit? */ |
| 1756 | if ( i != j ) /* except missle itself... */ |
| 1757 | if ( st_IsHit(j, st_px_x, st_px_y, missle_mask) != 0 ) /* let the member function decide */ |
| 1758 | { /* let the member function destroy the object if required */ |
| 1759 | st_Destroy(i); |
| 1760 | } |
| 1761 | } |
| 1762 | |
| 1763 | /* handle fire counter */ |
| 1764 | st_FireStep(is_auto_fire, is_fire); |
| 1765 | |
| 1766 | /* fire */ |
| 1767 | for( i = 0; i < ST_OBJ_CNT; i++ ) |
| 1768 | st_Fire(i); |
| 1769 | |
| 1770 | /* create new objects */ |
| 1771 | st_InitDelta(); |
| 1772 | |
| 1773 | /* increase difficulty */ |
| 1774 | |
| 1775 | st_to_diff_cnt++; |
| 1776 | if ( st_to_diff_cnt == (ST_DIFF_VIS_LEN<<ST_DIFF_FP) ) |
| 1777 | { |
| 1778 | st_to_diff_cnt = 0; |
| 1779 | st_difficulty++; |
| 1780 | st_player_points += ST_POINTS_PER_LEVEL; |
| 1781 | } |
| 1782 | |
| 1783 | /* update visible player points */ |
| 1784 | if ( st_player_points_delayed < st_player_points ) |
| 1785 | st_player_points_delayed++; |
| 1786 | } |
| 1787 | |
| 1788 | void st_Step(uint8_t player_pos, uint8_t is_auto_fire, uint8_t is_fire) |
| 1789 | { |
| 1790 | switch(st_state) |
| 1791 | { |
| 1792 | case ST_STATE_PREPARE: |
| 1793 | st_to_diff_cnt = st_u8g2->width-10; /* reuse st_to_diff_cnt */ |
| 1794 | st_state = ST_STATE_IPREPARE; |
| 1795 | break; |
| 1796 | case ST_STATE_IPREPARE: |
| 1797 | st_to_diff_cnt--; |
| 1798 | if ( st_to_diff_cnt == 0 ) |
| 1799 | { |
| 1800 | st_state = ST_STATE_GAME; |
| 1801 | st_SetupInGame(); |
| 1802 | } |
| 1803 | break; |
| 1804 | case ST_STATE_GAME: |
| 1805 | st_StepInGame(player_pos, is_auto_fire, is_fire); |
| 1806 | break; |
| 1807 | case ST_STATE_END: |
| 1808 | st_to_diff_cnt = st_u8g2->width-10; /* reuse st_to_diff_cnt */ |
| 1809 | if ( st_highscore < st_player_points) |
| 1810 | st_highscore = st_player_points; |
| 1811 | st_state = ST_STATE_IEND; |
| 1812 | break; |
| 1813 | case ST_STATE_IEND: |
| 1814 | st_to_diff_cnt--; |
| 1815 | if ( st_to_diff_cnt == 0 ) |
| 1816 | st_state = ST_STATE_PREPARE; |
| 1817 | break; |
| 1818 | } |
| 1819 | } |
| 1820 | |
| 1821 | |
| 1822 | |
| 1823 | void setup(void) { |
| 1824 | u8g2.begin(); |
| 1825 | } |
| 1826 | |
| 1827 | uint8_t a; |
| 1828 | uint8_t b; |
| 1829 | uint8_t y = 128; |
| 1830 | |
| 1831 | void loop(void) { |
| 1832 | |
| 1833 | u8g2.setFont(u8g2_font_6x10_tr); |
| 1834 | u8g2.setFontDirection(0); |
| 1835 | u8g2.setFontRefHeightAll(); |
| 1836 | |
| 1837 | st_Setup(u8g2.getU8g2()); |
| 1838 | for(;;) |
| 1839 | { |
| 1840 | st_Step(y, /* is_auto_fire */ 0, /* is_fire */ digitalRead(pin_fire)); |
| 1841 | u8g2.firstPage(); |
| 1842 | do |
| 1843 | { |
| 1844 | st_Draw(0); |
| 1845 | } while( u8g2.nextPage() ); |
| 1846 | |
| 1847 | if ( digitalRead(pin_down) ) { |
| 1848 | y++; |
| 1849 | } |
| 1850 | |
| 1851 | if ( digitalRead(pin_up) ) { |
| 1852 | y--; |
| 1853 | } |
| 1854 | } |
| 1855 | } |
| 1856 | |
| 1857 | |