├── divergence_meter ├── tm6108.h ├── hc595.h ├── TM6108.cpp ├── nixie_tube.h ├── hc595.cpp ├── divergence_meter.ino └── nixie_tube.cpp ├── README.md └── LICENSE /divergence_meter/tm6108.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | class TM6108 { 5 | private: 6 | uint8_t sck_pin; 7 | uint8_t dat_pin; 8 | public: 9 | TM6108(uint8_t sck, uint8_t dat); 10 | auto read()->uint8_t; 11 | }; -------------------------------------------------------------------------------- /divergence_meter/hc595.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "Arduino.h" 3 | #include "inttypes.h" 4 | 5 | struct HC595Pins { 6 | uint8_t RCK; 7 | uint8_t SCK; 8 | uint8_t DAT; 9 | }; 10 | 11 | class HC595 { 12 | private: 13 | struct HC595Pins info; 14 | int ic_num; 15 | int pin_num; 16 | auto oneClock()->void; 17 | auto reset()->void; 18 | public: 19 | HC595(struct HC595Pins &pins, int ic_num); 20 | auto clear() -> void; 21 | auto write(byte (&data)[], int ic_num) -> void; 22 | auto send()->void; 23 | }; -------------------------------------------------------------------------------- /divergence_meter/TM6108.cpp: -------------------------------------------------------------------------------- 1 | #include "esp32-hal-gpio.h" 2 | #include "tm6108.h" 3 | 4 | 5 | 6 | TM6108::TM6108(uint8_t sck, uint8_t dat) { 7 | sck_pin = sck; 8 | dat_pin = dat; 9 | pinMode(sck_pin, OUTPUT_OPEN_DRAIN); 10 | pinMode(dat_pin, INPUT_PULLDOWN); 11 | digitalWrite(sck_pin, 1); 12 | } 13 | 14 | auto TM6108::read() -> uint8_t { 15 | if (digitalRead(dat_pin)) { 16 | return 0; 17 | } 18 | uint16_t buf = 0; 19 | for (int i = 0; i < 16; i++) { 20 | digitalWrite(sck_pin, 0); 21 | delayMicroseconds(30); 22 | digitalWrite(sck_pin, 1); 23 | delayMicroseconds(30); 24 | buf >>= 1; 25 | buf |= (digitalRead(dat_pin) << 15); 26 | } 27 | // if(buf / 0b1000000000000 == 0b1010) 28 | uint8_t *p = (uint8_t*)&buf; 29 | return p[0]; 30 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 世界线变动率探测仪 DivergenceMeter 2 | 3 | 目标: 还原原作 4 | 5 | 参考: 6 | 1. [想做个辉光管时钟 0 - 想法](https://zhuanlan.zhihu.com/p/37329082) 7 | 2. [世界线变动率探测仪制作(一)](https://zhuanlan.zhihu.com/p/28265652) 8 | 3. [如何自己制作一个 divergense meter(辉光管时钟)?](https://www.zhihu.com/question/34564116) 9 | 4. [用Arduino制作一个功能最基础的辉光钟](https://juejin.cn/post/6844903862793404430) 10 | 5. [世界线变动率探测仪 | Divergence Meter 项目首页 – Omnixie | 辉光钟](https://nixieclock.org/?p=649) 11 | 12 | # 供电 13 | 5v type-c 14 | 电池组 15 | 16 | # 硬件 17 | * 辉光管IN-14*8 18 | * ~ESP32-C3 或 ESP32-C6~ 19 | * ESP32-S3 20 | * ~RTC芯片~ 21 | * GPS时间校准(预留接口) 22 | * 光敏电阻 23 | * 温湿度传感器 24 | * 蜂鸣器 25 | * 电容触摸按键 26 | * 304不锈钢 激光切割 27 | * 顶板:CEM-1电路板 28 | * 内部普通PCB 29 | * ...... 30 | 31 | # 软件 32 | * 全部使用RUST开发 33 | * 显示时间 时分秒 示例: 2 1 . 0 5 . 4 8 34 | * 显示日期 年4-月2-日 示例: 2 0 2 2 0 7 1 6 35 | * 闹钟 36 | * 温湿度 37 | * 光照(自动关闭辉光管) 38 | * ?显示粉丝数 8位最大9999 9999 示例: 0 0 0 0 0 9 9 8 39 | * 网络连接 蓝牙连接 40 | * ntp时间同步 41 | * ?内嵌网页 42 | * 世界线变动率探测 43 | * type-C串口 44 | * 引出剩余的IO, 留出内部空间拓展硬件 45 | 46 | # 成本 47 | 外壳: ~1300 48 | 辉光管: ~1100 49 | 50 | 总成本: 2500~3000 51 | -------------------------------------------------------------------------------- /divergence_meter/nixie_tube.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "hc595.h" 3 | 4 | typedef enum { 5 | NixieTubeEnum_ZERO, 6 | NixieTubeEnum_ONE, 7 | NixieTubeEnum_TWO, 8 | NixieTubeEnum_THREE, 9 | NixieTubeEnum_FOUR, 10 | NixieTubeEnum_FIVE, 11 | NixieTubeEnum_SIX, 12 | NixieTubeEnum_SEVEN, 13 | NixieTubeEnum_EIGHT, 14 | NixieTubeEnum_NINE, 15 | NixieTubeEnum_LTDOT, 16 | NixieTubeEnum_RTDOT, 17 | NixieTubeEnum_NONE 18 | } NixieTubeEnum; 19 | 20 | 21 | 22 | class NixieTube { 23 | private: 24 | HC595 *hc595; 25 | static const int buf_size = 12; 26 | byte send_buf[buf_size]; 27 | 28 | auto setL1(NixieTubeEnum) -> void; 29 | auto setL2(NixieTubeEnum) -> void; 30 | auto setL3(NixieTubeEnum) -> void; 31 | auto setL4(NixieTubeEnum) -> void; 32 | auto setL5(NixieTubeEnum) -> void; 33 | auto setL6(NixieTubeEnum) -> void; 34 | auto setL7(NixieTubeEnum) -> void; 35 | auto setL8(NixieTubeEnum) -> void; 36 | 37 | auto sendBufSetOne(int index, int position) -> void; 38 | 39 | public: 40 | NixieTube(HC595 &hc595); 41 | auto close() -> void; 42 | auto show(NixieTubeEnum (&enums)[8]) -> void; 43 | }; -------------------------------------------------------------------------------- /divergence_meter/hc595.cpp: -------------------------------------------------------------------------------- 1 | #include "esp32-hal.h" 2 | #include "esp32-hal-gpio.h" 3 | #include "hc595.h" 4 | #include 5 | 6 | HC595::HC595(struct HC595Pins &pins, int ic_num) { 7 | this->info = pins; 8 | this->ic_num = ic_num; 9 | this->pin_num = ic_num * 8; 10 | pinMode(this->info.DAT, OUTPUT); 11 | pinMode(this->info.RCK, OUTPUT); 12 | pinMode(this->info.SCK, OUTPUT); 13 | reset(); 14 | } 15 | 16 | auto HC595::reset() -> void { 17 | digitalWrite(info.DAT, 0); 18 | digitalWrite(info.RCK, 0); 19 | digitalWrite(info.SCK, 0); 20 | } 21 | 22 | auto HC595::oneClock() -> void { 23 | digitalWrite(info.SCK, 0); 24 | delayMicroseconds(1); 25 | digitalWrite(info.SCK, 1); 26 | delayMicroseconds(1); 27 | } 28 | 29 | auto HC595::send() -> void { 30 | digitalWrite(info.RCK, 1); 31 | } 32 | 33 | auto HC595::clear() -> void { 34 | reset(); 35 | for (int i = 0; i < pin_num; i++) { 36 | oneClock(); 37 | } 38 | send(); 39 | } 40 | 41 | auto HC595::write(byte (&data)[], int ic_num) -> void { 42 | reset(); 43 | for (int i = ic_num; i >= 0; --i) { 44 | byte t = data[i]; 45 | for (int j = 0; j < 8; j++) { 46 | digitalWrite(info.DAT, t / 0b10000000); 47 | t <<= 1; 48 | oneClock(); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2022, ThinkCode 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /divergence_meter/divergence_meter.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include "nixie_tube.h" 9 | #include "tm6108.h" 10 | #include "hc595.h" 11 | using namespace std; 12 | 13 | #define DEBUG 14 | #ifdef DEBUG 15 | #define LOG(x) Serial.println(x) 16 | #define LOGF(x, ...) Serial.printf(x, __VA_ARGS__) 17 | #else 18 | #define LOG(x) 19 | #define LOGF(x, ...) 20 | #endif 21 | 22 | union u8buf { 23 | uint8_t u8; 24 | struct { 25 | uint8_t d0 : 1; 26 | uint8_t d1 : 1; 27 | uint8_t d2 : 1; 28 | uint8_t d3 : 1; 29 | uint8_t d4 : 1; 30 | uint8_t d5 : 1; 31 | uint8_t d6 : 1; 32 | uint8_t d7 : 1; 33 | } buf; 34 | }; 35 | 36 | const uint8_t t0_pin = 4; 37 | 38 | const uint8_t tc_pin = 5; 39 | const uint8_t td_pin = 6; 40 | 41 | const uint8_t hsck_pin = 7; 42 | const uint8_t hsda_pin = 8; 43 | 44 | const uint8_t sck_pin = 0; 45 | const uint8_t rck_pin = 1; 46 | const uint8_t data_pin = 2; 47 | 48 | const uint8_t bat_pin = 3; 49 | 50 | const uint8_t light_pin = 10; 51 | 52 | // WiFiUDP ntpUDP; 53 | // NTPClient timeClient(ntpUDP, "cn.ntp.org.cn", 60 * 60 * 8, 30 * 60 * 1000); 54 | 55 | struct HC595Pins hc595Pins = { 56 | .RCK = rck_pin, 57 | .SCK = sck_pin, 58 | .DAT = data_pin 59 | }; 60 | HC595 hc595(hc595Pins, 12); 61 | NixieTube nixie(hc595); 62 | TM6108 tm6108(tc_pin, td_pin); 63 | 64 | void setNixieTubeEnum(NixieTubeEnum *sendState, NixieTubeEnum state, int size) { 65 | for (int i = 0; i < size; i++) { 66 | sendState[i] = state; 67 | } 68 | } 69 | 70 | void setup() { 71 | WiFiManager wifiManager; 72 | 73 | Serial.begin(115200); 74 | pinMode(t0_pin, INPUT); 75 | pinMode(light_pin, INPUT); 76 | wifiManager.autoConnect("DivergenceMeter"); 77 | 78 | LOG(WiFi.softAPIP()); 79 | LOG(""); 80 | } 81 | 82 | void loop() { 83 | // union u8buf touch; 84 | // touch.u8 = tm6108.read(); 85 | // LOGF("%d\n", touch.u8); 86 | NixieTubeEnum sendState[8] = { NixieTubeEnum_ZERO }; 87 | // if (touch.buf.d0) { 88 | // setNixieTubeEnum(sendState, NixieTubeEnum_ZERO, 8); 89 | // } else if (touch.buf.d1) { 90 | // setNixieTubeEnum(sendState, NixieTubeEnum_ONE, 8); 91 | // } else if (touch.buf.d2) { 92 | // setNixieTubeEnum(sendState, NixieTubeEnum_TWO, 8); 93 | // } else if (touch.buf.d3) { 94 | // setNixieTubeEnum(sendState, NixieTubeEnum_THREE, 8); 95 | // } else if (touch.buf.d4) { 96 | // setNixieTubeEnum(sendState, NixieTubeEnum_FOUR, 8); 97 | // } else if (touch.buf.d5) { 98 | // setNixieTubeEnum(sendState, NixieTubeEnum_FIVE, 8); 99 | // } else if (touch.buf.d6) { 100 | // setNixieTubeEnum(sendState, NixieTubeEnum_SIX, 8); 101 | // } else if (touch.buf.d7) { 102 | // setNixieTubeEnum(sendState, NixieTubeEnum_SEVEN, 8); 103 | // } else { 104 | // setNixieTubeEnum(sendState, NixieTubeEnum_NONE, 8); 105 | // } 106 | 107 | static int count = 0; 108 | 109 | switch(count){ 110 | case 0: 111 | setNixieTubeEnum(sendState, NixieTubeEnum_ZERO, 8); 112 | break; 113 | case 1: 114 | setNixieTubeEnum(sendState, NixieTubeEnum_ONE, 8); 115 | break; 116 | case 2: 117 | setNixieTubeEnum(sendState, NixieTubeEnum_TWO, 8); 118 | break; 119 | case 3: 120 | setNixieTubeEnum(sendState, NixieTubeEnum_THREE, 8); 121 | break; 122 | case 4: 123 | setNixieTubeEnum(sendState, NixieTubeEnum_FOUR, 8); 124 | break; 125 | case 5: 126 | setNixieTubeEnum(sendState, NixieTubeEnum_FIVE, 8); 127 | break; 128 | case 6: 129 | setNixieTubeEnum(sendState, NixieTubeEnum_SIX, 8); 130 | break; 131 | case 7: 132 | setNixieTubeEnum(sendState, NixieTubeEnum_SEVEN, 8); 133 | break; 134 | case 8: 135 | setNixieTubeEnum(sendState, NixieTubeEnum_EIGHT, 8); 136 | break; 137 | case 9: 138 | setNixieTubeEnum(sendState, NixieTubeEnum_NINE, 8); 139 | break; 140 | case 10: 141 | setNixieTubeEnum(sendState, NixieTubeEnum_LTDOT, 8); 142 | break; 143 | case 12: 144 | setNixieTubeEnum(sendState, NixieTubeEnum_RTDOT, 8); 145 | break; 146 | } 147 | 148 | nixie.show(sendState); 149 | count++; 150 | count%=13; 151 | delay(100); 152 | } 153 | 154 | /*** 155 | T0 ->4 156 | TC ->5 157 | TD ->6 158 | HSCK ->7 159 | HSDA ->8 160 | SCK ->0 161 | RCK ->1 162 | DATA ->2 163 | BADC ->3 164 | DP ->19 165 | DN ->18 166 | TX 167 | RX 168 | LIGHT ->10 169 | ***/ -------------------------------------------------------------------------------- /divergence_meter/nixie_tube.cpp: -------------------------------------------------------------------------------- 1 | #include "nixie_tube.h" 2 | 3 | auto NixieTube::sendBufSetOne(int index, int position) -> void{ 4 | send_buf[index - 1] |= (1 << position); 5 | } 6 | 7 | NixieTube::NixieTube(HC595 &hc595) { 8 | this->hc595 = &hc595; 9 | this->close(); 10 | } 11 | 12 | auto NixieTube::close() -> void { 13 | hc595->clear(); 14 | } 15 | 16 | auto NixieTube::show(NixieTubeEnum (&enums)[8]) -> void { 17 | memset(send_buf, 0, buf_size); 18 | setL1(enums[0]); 19 | setL2(enums[1]); 20 | setL3(enums[2]); 21 | setL4(enums[3]); 22 | setL5(enums[4]); 23 | setL6(enums[5]); 24 | setL7(enums[6]); 25 | setL8(enums[7]); 26 | hc595->write(send_buf, buf_size); 27 | hc595->send(); 28 | } 29 | 30 | auto NixieTube::setL1(NixieTubeEnum state) -> void { 31 | switch (state) { 32 | case NixieTubeEnum_ZERO: 33 | sendBufSetOne(4, 6); 34 | break; 35 | case NixieTubeEnum_ONE: 36 | sendBufSetOne(3, 4); 37 | break; 38 | case NixieTubeEnum_TWO: 39 | sendBufSetOne(3, 3); 40 | break; 41 | case NixieTubeEnum_THREE: 42 | sendBufSetOne(3, 2); 43 | break; 44 | case NixieTubeEnum_FOUR: 45 | sendBufSetOne(3, 1); 46 | break; 47 | case NixieTubeEnum_FIVE: 48 | sendBufSetOne(4, 2); 49 | break; 50 | case NixieTubeEnum_SIX: 51 | sendBufSetOne(4, 1); 52 | break; 53 | case NixieTubeEnum_SEVEN: 54 | sendBufSetOne(4, 3); 55 | break; 56 | case NixieTubeEnum_EIGHT: 57 | sendBufSetOne(4, 4); 58 | break; 59 | case NixieTubeEnum_NINE: 60 | sendBufSetOne(4, 5); 61 | break; 62 | case NixieTubeEnum_LTDOT: 63 | sendBufSetOne(4, 7); 64 | break; 65 | case NixieTubeEnum_RTDOT: 66 | sendBufSetOne(4, 0); 67 | break; 68 | default: 69 | break; 70 | } 71 | } 72 | auto NixieTube::setL2(NixieTubeEnum state) -> void { 73 | switch (state) { 74 | case NixieTubeEnum_ZERO: 75 | sendBufSetOne(5, 7); 76 | break; 77 | case NixieTubeEnum_ONE: 78 | sendBufSetOne(5, 1); 79 | break; 80 | case NixieTubeEnum_TWO: 81 | sendBufSetOne(5, 0); 82 | break; 83 | case NixieTubeEnum_THREE: 84 | sendBufSetOne(3, 0); 85 | break; 86 | case NixieTubeEnum_FOUR: 87 | sendBufSetOne(3, 7); 88 | break; 89 | case NixieTubeEnum_FIVE: 90 | sendBufSetOne(3, 5); 91 | break; 92 | case NixieTubeEnum_SIX: 93 | sendBufSetOne(3, 6); 94 | break; 95 | case NixieTubeEnum_SEVEN: 96 | sendBufSetOne(5, 4); 97 | break; 98 | case NixieTubeEnum_EIGHT: 99 | sendBufSetOne(5, 5); 100 | break; 101 | case NixieTubeEnum_NINE: 102 | sendBufSetOne(5, 6); 103 | break; 104 | case NixieTubeEnum_LTDOT: 105 | sendBufSetOne(5, 2); 106 | break; 107 | case NixieTubeEnum_RTDOT: 108 | sendBufSetOne(5, 3); 109 | break; 110 | default: 111 | break; 112 | } 113 | } 114 | auto NixieTube::setL3(NixieTubeEnum state) -> void { 115 | switch (state) { 116 | case NixieTubeEnum_ZERO: 117 | sendBufSetOne(6, 4); 118 | break; 119 | case NixieTubeEnum_ONE: 120 | sendBufSetOne(6, 0); 121 | break; 122 | case NixieTubeEnum_TWO: 123 | sendBufSetOne(6, 1); 124 | break; 125 | case NixieTubeEnum_THREE: 126 | sendBufSetOne(2, 4); 127 | break; 128 | case NixieTubeEnum_FOUR: 129 | sendBufSetOne(2, 3); 130 | break; 131 | case NixieTubeEnum_FIVE: 132 | sendBufSetOne(2, 2); 133 | break; 134 | case NixieTubeEnum_SIX: 135 | sendBufSetOne(2, 1); 136 | break; 137 | case NixieTubeEnum_SEVEN: 138 | sendBufSetOne(6, 7); 139 | break; 140 | case NixieTubeEnum_EIGHT: 141 | sendBufSetOne(6, 6); 142 | break; 143 | case NixieTubeEnum_NINE: 144 | sendBufSetOne(6, 5); 145 | break; 146 | case NixieTubeEnum_LTDOT: 147 | sendBufSetOne(6, 2); 148 | break; 149 | case NixieTubeEnum_RTDOT: 150 | sendBufSetOne(6, 3); 151 | break; 152 | default: 153 | break; 154 | } 155 | } 156 | auto NixieTube::setL4(NixieTubeEnum state) -> void { 157 | switch (state) { 158 | case NixieTubeEnum_ZERO: 159 | sendBufSetOne(7, 5); 160 | break; 161 | case NixieTubeEnum_ONE: 162 | sendBufSetOne(7, 0); 163 | break; 164 | case NixieTubeEnum_TWO: 165 | sendBufSetOne(7, 1); 166 | break; 167 | case NixieTubeEnum_THREE: 168 | sendBufSetOne(7, 2); 169 | break; 170 | case NixieTubeEnum_FOUR: 171 | sendBufSetOne(2, 0); 172 | break; 173 | case NixieTubeEnum_FIVE: 174 | sendBufSetOne(2, 7); 175 | break; 176 | case NixieTubeEnum_SIX: 177 | sendBufSetOne(2, 6); 178 | break; 179 | case NixieTubeEnum_SEVEN: 180 | sendBufSetOne(2, 5); 181 | break; 182 | case NixieTubeEnum_EIGHT: 183 | sendBufSetOne(7, 7); 184 | break; 185 | case NixieTubeEnum_NINE: 186 | sendBufSetOne(7, 6); 187 | break; 188 | case NixieTubeEnum_LTDOT: 189 | sendBufSetOne(7, 3); 190 | break; 191 | case NixieTubeEnum_RTDOT: 192 | sendBufSetOne(7, 4); 193 | break; 194 | default: 195 | break; 196 | } 197 | } 198 | auto NixieTube::setL5(NixieTubeEnum state) -> void { 199 | switch (state) { 200 | case NixieTubeEnum_ZERO: 201 | sendBufSetOne(8, 6); 202 | break; 203 | case NixieTubeEnum_ONE: 204 | sendBufSetOne(8, 0); 205 | break; 206 | case NixieTubeEnum_TWO: 207 | sendBufSetOne(8, 1); 208 | break; 209 | case NixieTubeEnum_THREE: 210 | sendBufSetOne(8, 2); 211 | break; 212 | case NixieTubeEnum_FOUR: 213 | sendBufSetOne(1, 4); 214 | break; 215 | case NixieTubeEnum_FIVE: 216 | sendBufSetOne(1, 3); 217 | break; 218 | case NixieTubeEnum_SIX: 219 | sendBufSetOne(1, 2); 220 | break; 221 | case NixieTubeEnum_SEVEN: 222 | sendBufSetOne(1, 1); 223 | break; 224 | case NixieTubeEnum_EIGHT: 225 | sendBufSetOne(8, 7); 226 | break; 227 | case NixieTubeEnum_NINE: 228 | sendBufSetOne(8, 5); 229 | break; 230 | case NixieTubeEnum_LTDOT: 231 | sendBufSetOne(8, 3); 232 | break; 233 | case NixieTubeEnum_RTDOT: 234 | sendBufSetOne(8, 4); 235 | break; 236 | default: 237 | break; 238 | } 239 | } 240 | auto NixieTube::setL6(NixieTubeEnum state) -> void { 241 | switch (state) { 242 | case NixieTubeEnum_ZERO: 243 | sendBufSetOne(9, 5); 244 | break; 245 | case NixieTubeEnum_ONE: 246 | sendBufSetOne(9, 0); 247 | break; 248 | case NixieTubeEnum_TWO: 249 | sendBufSetOne(9, 1); 250 | break; 251 | case NixieTubeEnum_THREE: 252 | sendBufSetOne(9, 2); 253 | break; 254 | case NixieTubeEnum_FOUR: 255 | sendBufSetOne(1, 6); 256 | break; 257 | case NixieTubeEnum_FIVE: 258 | sendBufSetOne(1, 0); 259 | break; 260 | case NixieTubeEnum_SIX: 261 | sendBufSetOne(1, 7); 262 | break; 263 | case NixieTubeEnum_SEVEN: 264 | sendBufSetOne(1, 5); 265 | break; 266 | case NixieTubeEnum_EIGHT: 267 | sendBufSetOne(9, 7); 268 | break; 269 | case NixieTubeEnum_NINE: 270 | sendBufSetOne(9, 6); 271 | break; 272 | case NixieTubeEnum_LTDOT: 273 | sendBufSetOne(9, 3); 274 | break; 275 | case NixieTubeEnum_RTDOT: 276 | sendBufSetOne(9, 4); 277 | break; 278 | default: 279 | break; 280 | } 281 | } 282 | auto NixieTube::setL7(NixieTubeEnum state) -> void { 283 | switch (state) { 284 | case NixieTubeEnum_ZERO: 285 | sendBufSetOne(10, 2); 286 | break; 287 | case NixieTubeEnum_ONE: 288 | sendBufSetOne(11, 4); 289 | break; 290 | case NixieTubeEnum_TWO: 291 | sendBufSetOne(11, 5); 292 | break; 293 | case NixieTubeEnum_THREE: 294 | sendBufSetOne(10, 0); 295 | break; 296 | case NixieTubeEnum_FOUR: 297 | sendBufSetOne(10, 1); 298 | break; 299 | case NixieTubeEnum_FIVE: 300 | sendBufSetOne(10, 5); 301 | break; 302 | case NixieTubeEnum_SIX: 303 | sendBufSetOne(10, 6); 304 | break; 305 | case NixieTubeEnum_SEVEN: 306 | sendBufSetOne(10, 7); 307 | break; 308 | case NixieTubeEnum_EIGHT: 309 | sendBufSetOne(10, 4); 310 | break; 311 | case NixieTubeEnum_NINE: 312 | sendBufSetOne(10, 3); 313 | break; 314 | case NixieTubeEnum_LTDOT: 315 | sendBufSetOne(11, 6); 316 | break; 317 | case NixieTubeEnum_RTDOT: 318 | sendBufSetOne(11, 7); 319 | break; 320 | default: 321 | break; 322 | } 323 | } 324 | 325 | auto NixieTube::setL8(NixieTubeEnum state) -> void { 326 | switch (state) { 327 | case NixieTubeEnum_ZERO: 328 | sendBufSetOne(11, 0); 329 | break; 330 | case NixieTubeEnum_ONE: 331 | sendBufSetOne(12, 0); 332 | break; 333 | case NixieTubeEnum_TWO: 334 | sendBufSetOne(12, 1); 335 | break; 336 | case NixieTubeEnum_THREE: 337 | sendBufSetOne(12, 2); 338 | break; 339 | case NixieTubeEnum_FOUR: 340 | sendBufSetOne(12, 3); 341 | break; 342 | case NixieTubeEnum_FIVE: 343 | sendBufSetOne(12, 6); 344 | break; 345 | case NixieTubeEnum_SIX: 346 | sendBufSetOne(12, 7); 347 | break; 348 | case NixieTubeEnum_SEVEN: 349 | sendBufSetOne(11, 3); 350 | break; 351 | case NixieTubeEnum_EIGHT: 352 | sendBufSetOne(11, 2); 353 | break; 354 | case NixieTubeEnum_NINE: 355 | sendBufSetOne(11, 1); 356 | break; 357 | case NixieTubeEnum_LTDOT: 358 | sendBufSetOne(12, 4); 359 | break; 360 | case NixieTubeEnum_RTDOT: 361 | sendBufSetOne(12, 5); 362 | break; 363 | default: 364 | break; 365 | } 366 | } 367 | 368 | /*** 369 | U1: 370 | QA(0)->6-5 371 | QB(1)->5-7 372 | QC(2)->5-6 373 | QD(3)->5-5 374 | QE(4)->5-4 375 | QF(5)->6-7 376 | QG(6)->6-4 377 | QH(7)->6-6 378 | U2: 379 | QA(0)->4-4 380 | QB(1)->3-6 381 | QC(2)->3-5 382 | QD(3)->3-4 383 | QE(4)->3-3 384 | QF(5)->4-7 385 | QG(6)->4-6 386 | QH(7)->4-5 387 | U3: 388 | QA(0)->2-3 389 | QB(1)->1-4 390 | QC(2)->1-3 391 | QD(3)->1-2 392 | QE(4)->1-1 393 | QF(5)->2-5 394 | QG(6)->2-6 395 | QH(7)->2-4 396 | U4: 397 | QA(0)->1-R 398 | QB(1)->1-6 399 | QC(2)->1-5 400 | QD(3)->1-7 401 | QE(4)->1-8 402 | QF(5)->1-9 403 | QG(6)->1-0 404 | QH(7)->1-L 405 | U5: 406 | QA(0)->2-2 407 | QB(1)->2-1 408 | QC(2)->2-L 409 | QD(3)->2-R 410 | QE(4)->2-7 411 | QF(5)->2-8 412 | QG(6)->2-9 413 | QH(7)->2-0 414 | U6: 415 | QA(0)->3-1 416 | QB(1)->3-2 417 | QC(2)->3-L 418 | QD(3)->3-R 419 | QE(4)->3-0 420 | QF(5)->3-9 421 | QG(6)->3-8 422 | QH(7)->3-7 423 | U7: 424 | QA(0)->4-1 425 | QB(1)->4-2 426 | QC(2)->4-3 427 | QD(3)->4-L 428 | QE(4)->4-R 429 | QF(5)->4-0 430 | QG(6)->4-9 431 | QH(7)->4-8 432 | U8: 433 | QA(0)->5-1 434 | QB(1)->5-2 435 | QC(2)->5-3 436 | QD(3)->5-L 437 | QE(4)->5-R 438 | QF(5)->5-9 439 | QG(6)->5-0 440 | QH(7)->5-8 441 | U9: 442 | QA(0)->6-1 443 | QB(1)->6-2 444 | QC(2)->6-3 445 | QD(3)->6-L 446 | QE(4)->6-R 447 | QF(5)->6-0 448 | QG(6)->6-9 449 | QH(7)->6-8 450 | U10: 451 | QA(0)->7-3 452 | QB(1)->7-4 453 | QC(2)->7-0 454 | QD(3)->7-9 455 | QE(4)->7-8 456 | QF(5)->7-5 457 | QG(6)->7-6 458 | QH(7)->7-7 459 | U11: 460 | QA(0)->8-0 461 | QB(1)->8-9 462 | QC(2)->8-8 463 | QD(3)->8-7 464 | QE(4)->7-1 465 | QF(5)->7-2 466 | QG(6)->7-L 467 | QH(7)->7-R 468 | U12: 469 | QA(0)->8-1 470 | QB(1)->8-2 471 | QC(2)->8-3 472 | QD(3)->8-4 473 | QE(4)->8-L 474 | QF(5)->8-R 475 | QG(6)->8-5 476 | QH(7)->8-6 477 | ***/ 478 | --------------------------------------------------------------------------------