数码之家

 找回密码
 立即注册
搜索
查看: 3793|回复: 28

[另类] 请版主帮忙删帖!

[复制链接]
发表于 2020-10-16 11:50:13 | 显示全部楼层 |阅读模式
本帖最后由 myseil 于 2020-10-16 20:49 编辑

此贴可以删了,需要制作的去看B站视频吧!有很多都是抄的这个项目。

该项目原始代码来之:https://github.com/schreibfaul1/ESP8266-LED-Matrix-Clock  发布于4年前
然后 https://mp.weixin.qq.com/s/CzFLiuspfYBcMXaWzcPgMA   发布于2020年10月 这个项目和上面GitHub的项目代码高度相识。

不确定是否同一个人。

如果是同一个作者,我表示道歉,我Fork了你的代码,而且没有通知你就做到我的项目当中。


原始作者:

2017年2月27日发布于YouTube!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2020-10-16 11:57:05 | 显示全部楼层
本帖最后由 myseil 于 2020-10-16 20:38 编辑

GitHub项目源码如下:https://github.com/schreibfaul1/ ... ter/MatrixClock.ino
  1. //*********************************************************************************************************
  2. //* ESP8266 MatrixClock *
  3. //*********************************************************************************************************
  4. //
  5. // first release on 26.02.2017
  6. // updated on 26.03.2019
  7. // Version 1.2.1
  8. //
  9. //
  10. // THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT.
  11. // FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  12. // WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR
  13. // OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  14. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
  15. //
  16. //

  17. #include <SPI.h>
  18. #include <Ticker.h>
  19. #include <ESP8266WiFi.h>
  20. #include <WiFiClient.h>
  21. #include <WiFiUdp.h>
  22. #include <Wire.h>
  23. #include <time.h>

  24. #define SDA 5 // Pin sda (I2C)
  25. #define SCL 4 // Pin scl (I2C)
  26. #define CS 15 // Pin cs (SPI)
  27. #define anzMAX 6 // Anzahl der kaskadierten Module

  28. char ssid[] = "********"; // your network SSID (name)
  29. char pass[] = "********"; // your network password


  30. // other displays -------------------------------------
  31. //#define REVERSE_HORIZONTAL // Parola, Generic and IC-Station
  32. //#define REVERSE_VERTICAL // IC-Station display
  33. //#define ROTATE_90 // Generic display
  34. /*
  35. p A B C D E F G 7 6 5 4 3 2 1 0 G F E D C B A p G F E D C B A p
  36. ------------------------ ------------------------ ------------------------ ------------------------
  37. 0 |o o o o o o o o| p |o o o o o o o o| 0 |o o o o o o o o| 7 |o o o o o o o o|
  38. 1 |o o o o o o o o| A |o o o o o o o o| 1 |o o o o o o o o| 6 |o o o o o o o o|
  39. 2 |o o o o o o o o| B |o o o o o o o o| 2 |o o o o o o o o| 5 |o o o o o o o o|
  40. 3 |o o o o| C |o o o o| 3 |o o o o| 4 |o o o o|
  41. 4 |o o FC-16 o o| D |o o Generic o o| 4 |o o Parola o o| 3 |o o IC-Station o o|
  42. 5 |o o o o| E |o o o o| 5 |o o o o| 2 |o o o o|
  43. 6 |o o o o o o o o| F |o o o o o o o o| 6 |o o o o o o o o| 1 |o o o o o o o o|
  44. 7 |o o o o o o o o| G |o o o o o o o o| 7 |o o o o o o o o| 0 |o o o o o o o o|
  45. ------------------------ ------------------------ ------------------------ ------------------------
  46. */



  47. unsigned short maxPosX = anzMAX * 8 - 1; //calculated maxposition
  48. unsigned short LEDarr[anzMAX][8]; //character matrix to display (40*8)
  49. unsigned short helpArrMAX[anzMAX * 8]; //helperarray for chardecoding
  50. unsigned short helpArrPos[anzMAX * 8]; //helperarray pos of chardecoding
  51. unsigned int z_PosX = 0; //xPosition im Display für Zeitanzeige
  52. unsigned int d_PosX = 0; //xPosition im Display f�r Datumanzeige
  53. bool f_tckr1s = false;
  54. bool f_tckr50ms = false;
  55. bool f_tckr24h = false;
  56. unsigned long epoch = 0;
  57. unsigned int localPort = 2390; // local port to listen for UDP packets
  58. const char* ntpServerName = "time.nist.gov";
  59. const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message
  60. byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
  61. IPAddress timeServerIP; // time.nist.gov NTP server address
  62. tm *tt, ttm;

  63. //Variablen für RTC DS3231
  64. const unsigned char DS3231_ADDRESS = 0x68;
  65. const unsigned char secondREG = 0x00;
  66. const unsigned char minuteREG = 0x01;
  67. const unsigned char hourREG = 0x02;
  68. const unsigned char WTREG = 0x03; //weekday
  69. const unsigned char dateREG = 0x04;
  70. const unsigned char monthREG = 0x05;
  71. const unsigned char yearREG = 0x06;
  72. const unsigned char alarm_min1secREG = 0x07;
  73. const unsigned char alarm_min1minREG = 0x08;
  74. const unsigned char alarm_min1hrREG = 0x09;
  75. const unsigned char alarm_min1dateREG = 0x0A;
  76. const unsigned char alarm_min2minREG = 0x0B;
  77. const unsigned char alarm_min2hrREG = 0x0C;
  78. const unsigned char alarm_min2dateREG = 0x0D;
  79. const unsigned char controlREG = 0x0E;
  80. const unsigned char statusREG = 0x0F;
  81. const unsigned char ageoffsetREG = 0x10;
  82. const unsigned char tempMSBREG = 0x11;
  83. const unsigned char tempLSBREG = 0x12;
  84. const unsigned char _24_hour_format = 0;
  85. const unsigned char _12_hour_format = 1;
  86. const unsigned char AM = 0;
  87. const unsigned char PM = 1;

  88. struct DateTime {
  89. unsigned short sek1, sek2, sek12, min1, min2, min12, std1, std2, std12;
  90. unsigned short tag1, tag2, tag12, mon1, mon2, mon12, jahr1, jahr2, jahr12, WT;
  91. } MEZ;


  92. // The object for the Ticker
  93. Ticker tckr;
  94. // A UDP instance to let us send and receive packets over UDP
  95. WiFiUDP udp;


  96. //months
  97. char M_arr[12][5] = { { '.', 'J', 'a', 'n', '.' }, { '.', 'F', 'e', 'b', '.' },
  98. { '.', 'M', 'a', 'r', '.' }, { '.', 'A', 'p', 'r', '.' }, { '.', 'M', 'a',
  99. 'y', ' ' }, { '.', 'J', 'u', 'n', 'e' }, { '.', 'J', 'u', 'l', 'y' }, {
  100. '.', 'A', 'u', 'g', '.' }, { '.', 'S', 'e', 'p', 't' }, { '.', 'O', 'c',
  101. 't', '.' }, { '.', 'N', 'o', 'v', '.' }, { '.', 'D', 'e', 'c', '.' } };
  102. //days
  103. char WT_arr[7][4] = { { 'S', 'u', 'n', ',' }, { 'M', 'o', 'n', ',' }, { 'T', 'u', 'e', ',' }, {
  104. 'W', 'e', 'd', ',' }, { 'T', 'h', 'u', ',' }, { 'F', 'r', 'i', ',' }, { 'S', 'a', 't', ',' } };

  105. // Zeichensatz 5x8 in einer 8x8 Matrix, 0,0 ist rechts oben
  106. unsigned short const font1[96][9] = { { 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
  107. 0x00, 0x00, 0x00 }, // 0x20, Space
  108. { 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x00 }, // 0x21, !
  109. { 0x07, 0x09, 0x09, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x22, "
  110. { 0x07, 0x0a, 0x0a, 0x1f, 0x0a, 0x1f, 0x0a, 0x0a, 0x00 }, // 0x23, #
  111. { 0x07, 0x04, 0x0f, 0x14, 0x0e, 0x05, 0x1e, 0x04, 0x00 }, // 0x24, $
  112. { 0x07, 0x19, 0x19, 0x02, 0x04, 0x08, 0x13, 0x13, 0x00 }, // 0x25, %
  113. { 0x07, 0x04, 0x0a, 0x0a, 0x0a, 0x15, 0x12, 0x0d, 0x00 }, // 0x26, &
  114. { 0x07, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x27, '
  115. { 0x07, 0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02, 0x00 }, // 0x28, (
  116. { 0x07, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00 }, // 0x29, )
  117. { 0x07, 0x04, 0x15, 0x0e, 0x1f, 0x0e, 0x15, 0x04, 0x00 }, // 0x2a, *
  118. { 0x07, 0x00, 0x04, 0x04, 0x1f, 0x04, 0x04, 0x00, 0x00 }, // 0x2b, +
  119. { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02 }, // 0x2c, ,
  120. { 0x07, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00 }, // 0x2d, -
  121. { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00 }, // 0x2e, .
  122. { 0x07, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00 }, // 0x2f, /
  123. { 0x07, 0x0e, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0e, 0x00 }, // 0x30, 0
  124. { 0x07, 0x04, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00 }, // 0x31, 1
  125. { 0x07, 0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f, 0x00 }, // 0x32, 2
  126. { 0x07, 0x0e, 0x11, 0x01, 0x06, 0x01, 0x11, 0x0e, 0x00 }, // 0x33, 3
  127. { 0x07, 0x02, 0x06, 0x0a, 0x12, 0x1f, 0x02, 0x02, 0x00 }, // 0x34, 4
  128. { 0x07, 0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e, 0x00 }, // 0x35, 5
  129. { 0x07, 0x06, 0x08, 0x10, 0x1e, 0x11, 0x11, 0x0e, 0x00 }, // 0x36, 6
  130. { 0x07, 0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08, 0x00 }, // 0x37, 7
  131. { 0x07, 0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e, 0x00 }, // 0x38, 8
  132. { 0x07, 0x0e, 0x11, 0x11, 0x0f, 0x01, 0x02, 0x0c, 0x00 }, // 0x39, 9
  133. { 0x04, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x00 }, // 0x3a, :
  134. { 0x07, 0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x04, 0x08, 0x00 }, // 0x3b, ;
  135. { 0x07, 0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02, 0x00 }, // 0x3c, <
  136. { 0x07, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00 }, // 0x3d, =
  137. { 0x07, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x00 }, // 0x3e, >
  138. { 0x07, 0x0e, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04, 0x00 }, // 0x3f, ?
  139. { 0x07, 0x0e, 0x11, 0x17, 0x15, 0x17, 0x10, 0x0f, 0x00 }, // 0x40, @
  140. { 0x07, 0x04, 0x0a, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x00 }, // 0x41, A
  141. { 0x07, 0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e, 0x00 }, // 0x42, B
  142. { 0x07, 0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e, 0x00 }, // 0x43, C
  143. { 0x07, 0x1e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x1e, 0x00 }, // 0x44, D
  144. { 0x07, 0x1f, 0x10, 0x10, 0x1c, 0x10, 0x10, 0x1f, 0x00 }, // 0x45, E
  145. { 0x07, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x00 }, // 0x46, F
  146. { 0x07, 0x0e, 0x11, 0x10, 0x10, 0x13, 0x11, 0x0f, 0x00 }, // 0x37, G
  147. { 0x07, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11, 0x00 }, // 0x48, H
  148. { 0x07, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00 }, // 0x49, I
  149. { 0x07, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x12, 0x0c, 0x00 }, // 0x4a, J
  150. { 0x07, 0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11, 0x00 }, // 0x4b, K
  151. { 0x07, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00 }, // 0x4c, L
  152. { 0x07, 0x11, 0x1b, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00 }, // 0x4d, M
  153. { 0x07, 0x11, 0x11, 0x19, 0x15, 0x13, 0x11, 0x11, 0x00 }, // 0x4e, N
  154. { 0x07, 0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00 }, // 0x4f, O
  155. { 0x07, 0x1e, 0x11, 0x11, 0x1e, 0x10, 0x10, 0x10, 0x00 }, // 0x50, P
  156. { 0x07, 0x0e, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0d, 0x00 }, // 0x51, Q
  157. { 0x07, 0x1e, 0x11, 0x11, 0x1e, 0x14, 0x12, 0x11, 0x00 }, // 0x52, R
  158. { 0x07, 0x0e, 0x11, 0x10, 0x0e, 0x01, 0x11, 0x0e, 0x00 }, // 0x53, S
  159. { 0x07, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00 }, // 0x54, T
  160. { 0x07, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00 }, // 0x55, U
  161. { 0x07, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0a, 0x04, 0x00 }, // 0x56, V
  162. { 0x07, 0x11, 0x11, 0x11, 0x15, 0x15, 0x1b, 0x11, 0x00 }, // 0x57, W
  163. { 0x07, 0x11, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x11, 0x00 }, // 0x58, X
  164. { 0x07, 0x11, 0x11, 0x0a, 0x04, 0x04, 0x04, 0x04, 0x00 }, // 0x59, Y
  165. { 0x07, 0x1f, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1f, 0x00 }, // 0x5a, Z
  166. { 0x07, 0x0e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0e, 0x00 }, // 0x5b, [
  167. { 0x07, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x00 }, // 0x5c, '\'
  168. { 0x07, 0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0e, 0x00 }, // 0x5d, ]
  169. { 0x07, 0x04, 0x0a, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x5e, ^
  170. { 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00 }, // 0x5f, _
  171. { 0x07, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x60, `
  172. { 0x07, 0x00, 0x0e, 0x01, 0x0d, 0x13, 0x13, 0x0d, 0x00 }, // 0x61, a
  173. { 0x07, 0x10, 0x10, 0x10, 0x1c, 0x12, 0x12, 0x1c, 0x00 }, // 0x62, b
  174. { 0x07, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x10, 0x0e, 0x00 }, // 0x63, c
  175. { 0x07, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09, 0x07, 0x00 }, // 0x64, d
  176. { 0x07, 0x00, 0x00, 0x0e, 0x11, 0x1f, 0x10, 0x0f, 0x00 }, // 0x65, e
  177. { 0x07, 0x06, 0x09, 0x08, 0x1c, 0x08, 0x08, 0x08, 0x00 }, // 0x66, f
  178. { 0x07, 0x00, 0x0e, 0x11, 0x13, 0x0d, 0x01, 0x01, 0x0e }, // 0x67, g
  179. { 0x07, 0x10, 0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x00 }, // 0x68, h
  180. { 0x05, 0x00, 0x02, 0x00, 0x06, 0x02, 0x02, 0x07, 0x00 }, // 0x69, i
  181. { 0x07, 0x00, 0x02, 0x00, 0x06, 0x02, 0x02, 0x12, 0x0c }, // 0x6a, j
  182. { 0x07, 0x10, 0x10, 0x12, 0x14, 0x18, 0x14, 0x12, 0x00 }, // 0x6b, k
  183. { 0x05, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00 }, // 0x6c, l
  184. { 0x07, 0x00, 0x00, 0x0a, 0x15, 0x15, 0x11, 0x11, 0x00 }, // 0x6d, m
  185. { 0x07, 0x00, 0x00, 0x16, 0x19, 0x11, 0x11, 0x11, 0x00 }, // 0x6e, n
  186. { 0x07, 0x00, 0x00, 0x0e, 0x11, 0x11, 0x11, 0x0e, 0x00 }, // 0x6f, o
  187. { 0x07, 0x00, 0x00, 0x1c, 0x12, 0x12, 0x1c, 0x10, 0x10 }, // 0x70, p
  188. { 0x07, 0x00, 0x00, 0x07, 0x09, 0x09, 0x07, 0x01, 0x01 }, // 0x71, q
  189. { 0x07, 0x00, 0x00, 0x16, 0x19, 0x10, 0x10, 0x10, 0x00 }, // 0x72, r
  190. { 0x07, 0x00, 0x00, 0x0f, 0x10, 0x0e, 0x01, 0x1e, 0x00 }, // 0x73, s
  191. { 0x07, 0x08, 0x08, 0x1c, 0x08, 0x08, 0x09, 0x06, 0x00 }, // 0x74, t
  192. { 0x07, 0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0d, 0x00 }, // 0x75, u
  193. { 0x07, 0x00, 0x00, 0x11, 0x11, 0x11, 0x0a, 0x04, 0x00 }, // 0x76, v
  194. { 0x07, 0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0a, 0x00 }, // 0x77, w
  195. { 0x07, 0x00, 0x00, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x00 }, // 0x78, x
  196. { 0x07, 0x00, 0x00, 0x11, 0x11, 0x0f, 0x01, 0x11, 0x0e }, // 0x79, y
  197. { 0x07, 0x00, 0x00, 0x1f, 0x02, 0x04, 0x08, 0x1f, 0x00 }, // 0x7a, z
  198. { 0x07, 0x06, 0x08, 0x08, 0x10, 0x08, 0x08, 0x06, 0x00 }, // 0x7b, {
  199. { 0x07, 0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04, 0x00 }, // 0x7c, |
  200. { 0x07, 0x0c, 0x02, 0x02, 0x01, 0x02, 0x02, 0x0c, 0x00 }, // 0x7d, }
  201. { 0x07, 0x08, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x7e, ~
  202. { 0x07, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00 } // 0x7f, DEL
  203. };
  204. //**************************************************************************************************
  205. void connect_to_WiFi() { // We start by connecting to a WiFi network
  206. Serial.println("");
  207. Serial.print("Connecting to ");
  208. Serial.println(ssid);

  209. WiFi.mode(WIFI_STA);
  210. WiFi.begin(ssid, pass);

  211. while (WiFi.status() != WL_CONNECTED) {
  212. delay(500);
  213. Serial.print(".");
  214. }
  215. Serial.println("");

  216. Serial.println("WiFi connected");
  217. Serial.print("IP address: ");
  218. Serial.println(String(WiFi.localIP()));
  219. Serial.println("Starting UDP");
  220. udp.begin(localPort);
  221. Serial.print("Local port: ");
  222. Serial.println(udp.localPort());
  223. }
  224. //**************************************************************************************************
  225. tm* connectNTP() { //if response from NTP was succesfull return *tm else return a nullpointer
  226. WiFi.hostByName(ntpServerName, timeServerIP);
  227. Serial.println(timeServerIP);
  228. Serial.println("sending NTP packet...");
  229. // set all bytes in the buffer to 0
  230. memset(packetBuffer, 0, NTP_PACKET_SIZE);
  231. // Initialize values needed to form NTP request
  232. // (see URL above for details on the packets)
  233. packetBuffer[0] = 0b11100011; // LI, Version, Mode
  234. packetBuffer[1] = 0; // Stratum, or type of clock
  235. packetBuffer[2] = 6; // Polling Interval
  236. packetBuffer[3] = 0xEC; // Peer Clock Precision
  237. // 8 bytes of zero for Root Delay & Root Dispersion
  238. packetBuffer[12] = 49;
  239. packetBuffer[13] = 0x4E;
  240. packetBuffer[14] = 49;
  241. packetBuffer[15] = 52;
  242. // all NTP fields have been given values, now
  243. // you can send a packet requesting a timestamp:
  244. udp.beginPacket(timeServerIP, 123); //NTP requests are to port 123
  245. udp.write(packetBuffer, NTP_PACKET_SIZE);
  246. udp.endPacket();
  247. delay(1000); // wait to see if a reply is available
  248. int cb = udp.parsePacket();
  249. udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
  250. //the timestamp starts at byte 40 of the received packet and is four bytes,
  251. // or two words, long. First, esxtract the two words:
  252. unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
  253. unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
  254. // combine the four bytes (two words) into a long integer
  255. // this is NTP time (seconds since Jan 1 1900):
  256. unsigned long secsSince1900 = highWord << 16 | lowWord;
  257. // now convert NTP time into everyday time:
  258. const unsigned long seventyYears = 2208988800UL;
  259. // subtract seventy years:
  260. epoch = secsSince1900 - seventyYears +2; //+2000ms Verarbeitungszeit
  261. //epoch=epoch-3600*6; // difference -6h = -6* 3600 sec)
  262. time_t t;
  263. t = epoch;
  264. tm* tt;
  265. tt = localtime(&t);
  266. if (cb == 48)
  267. return (tt);
  268. else
  269. return (NULL);
  270. }
  271. //**************************************************************************************************
  272. void rtc_init(unsigned char sda, unsigned char scl) {
  273. Wire.begin(sda, scl);
  274. rtc_Write(controlREG, 0x00);
  275. }
  276. //**************************************************************************************************
  277. // BCD Code
  278. //**************************************************************************************************
  279. unsigned char dec2bcd(unsigned char x) { //value 0...99
  280. unsigned char z, e, r;
  281. e = x % 10;
  282. z = x / 10;
  283. z = z << 4;
  284. r = e | z;
  285. return (r);
  286. }
  287. unsigned char bcd2dec(unsigned char x) { //value 0...99
  288. int z, e;
  289. e = x & 0x0F;
  290. z = x & 0xF0;
  291. z = z >> 4;
  292. z = z * 10;
  293. return (z + e);
  294. }
  295. //**************************************************************************************************
  296. // RTC I2C Code
  297. //**************************************************************************************************
  298. unsigned char rtc_Read(unsigned char regaddress) {
  299. Wire.beginTransmission(DS3231_ADDRESS);
  300. Wire.write(regaddress);
  301. Wire.endTransmission();
  302. Wire.requestFrom((unsigned char) DS3231_ADDRESS, (unsigned char) 1);
  303. return (Wire.read());
  304. }
  305. void rtc_Write(unsigned char regaddress, unsigned char value) {
  306. Wire.beginTransmission(DS3231_ADDRESS);
  307. Wire.write(regaddress);
  308. Wire.write(value);
  309. Wire.endTransmission();
  310. }
  311. //**************************************************************************************************
  312. unsigned char rtc_sekunde() {
  313. return (bcd2dec(rtc_Read(secondREG)));
  314. }
  315. unsigned char rtc_minute() {
  316. return (bcd2dec(rtc_Read(minuteREG)));
  317. }
  318. unsigned char rtc_stunde() {
  319. return (bcd2dec(rtc_Read(hourREG)));
  320. }
  321. unsigned char rtc_wochentag() {
  322. return (bcd2dec(rtc_Read(WTREG)));
  323. }
  324. unsigned char rtc_tag() {
  325. return (bcd2dec(rtc_Read(dateREG)));
  326. }
  327. unsigned char rtc_monat() {
  328. return (bcd2dec(rtc_Read(monthREG)));
  329. }
  330. unsigned char rtc_jahr() {
  331. return (bcd2dec(rtc_Read(yearREG)));
  332. }
  333. void rtc_sekunde(unsigned char sek) {
  334. rtc_Write(secondREG, (dec2bcd(sek)));
  335. }
  336. void rtc_minute(unsigned char min) {
  337. rtc_Write(minuteREG, (dec2bcd(min)));
  338. }
  339. void rtc_stunde(unsigned char std) {
  340. rtc_Write(hourREG, (dec2bcd(std)));
  341. }
  342. void rtc_wochentag(unsigned char wt) {
  343. rtc_Write(WTREG, (dec2bcd(wt)));
  344. }
  345. void rtc_tag(unsigned char tag) {
  346. rtc_Write(dateREG, (dec2bcd(tag)));
  347. }
  348. void rtc_monat(unsigned char mon) {
  349. rtc_Write(monthREG, (dec2bcd(mon)));
  350. }
  351. void rtc_jahr(unsigned char jahr) {
  352. rtc_Write(yearREG, (dec2bcd(jahr)));
  353. }
  354. //**************************************************************************************************
  355. void rtc_set(tm* tt) {
  356. rtc_sekunde((unsigned char) tt->tm_sec);
  357. rtc_minute((unsigned char) tt->tm_min);
  358. rtc_stunde((unsigned char) tt->tm_hour);
  359. rtc_tag((unsigned char) tt->tm_mday);
  360. rtc_monat((unsigned char) tt->tm_mon + 1);
  361. rtc_jahr((unsigned char) tt->tm_year - 100);
  362. rtc_wochentag((unsigned char) tt->tm_wday);
  363. }
  364. //**************************************************************************************************
  365. float rtc_temp() {
  366. float t = 0.0;
  367. unsigned char lowByte = 0;
  368. signed char highByte = 0;
  369. lowByte = rtc_Read(tempLSBREG);
  370. highByte = rtc_Read(tempMSBREG);
  371. lowByte >>= 6;
  372. lowByte &= 0x03;
  373. t = ((float) lowByte);
  374. t *= 0.25;
  375. t += highByte;
  376. return (t); // return temp value
  377. }
  378. //**************************************************************************************************
  379. void rtc2mez() {

  380. unsigned short JaZiff; //Jahresziffer
  381. unsigned short JhZiff = 6; //Jahrhundertziffer für 20.Jahrhundert
  382. unsigned short TaZiff; //Tagesziffer
  383. unsigned short WoTag; //Wochentag
  384. unsigned short SJK = 0; //Schaltjahreskorrektur
  385. unsigned short ZDiff; //Zeitdifferenz UTC MEZ/MESZ
  386. unsigned short MoZiff[12] = { 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; //Monatsziffer
  387. unsigned short Tage_Monat[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,
  388. 31 };
  389. unsigned short Jahr, Tag, Monat, Stunde, Minute, Sekunde;
  390. //RTC_setMonat(3);
  391. Jahr = rtc_jahr();
  392. if (Jahr > 99)
  393. Jahr = 0;
  394. Monat = rtc_monat();
  395. if (Monat > 12)
  396. Monat = 0;
  397. Tag = rtc_tag();
  398. if (Tag > 31)
  399. Tag = 0;
  400. Stunde = rtc_stunde();
  401. if (Stunde > 23)
  402. Stunde = 0;
  403. Minute = rtc_minute();
  404. if (Minute > 59)
  405. Minute = 0;
  406. Sekunde = rtc_sekunde();
  407. if (Sekunde > 59)
  408. Sekunde = 0;

  409. JaZiff = ((Jahr + Jahr / 4) % 7);
  410. TaZiff = (Tag % 7);
  411. if ((Jahr % 4) == 0) //Schaltjahr ?
  412. {
  413. Tage_Monat[1] = 29; //dann hat der Febr 29 Tage
  414. if (Monat < 3)
  415. SJK = 6;
  416. else
  417. SJK = 0;
  418. }
  419. WoTag = ((TaZiff + MoZiff[Monat - 1] + JhZiff + JaZiff + SJK) % 7);

  420. if (Monat < 3 || Monat > 10)
  421. ZDiff = 1; // keine Sommerzeit in Jan, Feb, Nov, Dez
  422. if (Monat > 3 && Monat < 10)
  423. ZDiff = 2; // Sommerz. in Apr, Mai, Jun, Jul, Aug, Sep
  424. if (Monat == 3) {
  425. ZDiff = 1;
  426. if (Tag > 24) //Sommerzeit ab letzten Sonntag des Monats
  427. {
  428. if (Tag == 25) {
  429. if ((Tag + WoTag) < 26)
  430. ZDiff = 2;
  431. }
  432. if (Tag == 26) {
  433. if ((Tag + WoTag) < 28)
  434. ZDiff = 2;
  435. }
  436. if (Tag == 27) {
  437. if ((Tag + WoTag) < 30)
  438. ZDiff = 2;
  439. }
  440. if (Tag == 28) {
  441. if ((Tag + WoTag) < 32)
  442. ZDiff = 2;
  443. }
  444. if (Tag == 29) {
  445. if ((Tag + WoTag) < 34)
  446. ZDiff = 2;
  447. }
  448. if (Tag == 30) {
  449. if ((Tag + WoTag) < 36)
  450. ZDiff = 2;
  451. }
  452. if (Tag == 31) {
  453. if ((Tag + WoTag) < 38)
  454. ZDiff = 2;
  455. }
  456. if ((ZDiff == 2) && (Stunde + 1 < 2) && (WoTag == 0))
  457. ZDiff = 1; //erst ab 02 Uhr
  458. }
  459. }
  460. if (Monat == 10) {
  461. ZDiff = 2;
  462. if (Tag > 24) //Sommerzeit ab letzten Sonntag des Monats
  463. {
  464. if (Tag == 25) {
  465. if ((Tag + WoTag) < 26)
  466. ZDiff = 1;
  467. }
  468. if (Tag == 26) {
  469. if ((Tag + WoTag) < 28)
  470. ZDiff = 1;
  471. }
  472. if (Tag == 27) {
  473. if ((Tag + WoTag) < 30)
  474. ZDiff = 1;
  475. }
  476. if (Tag == 28) {
  477. if ((Tag + WoTag) < 32)
  478. ZDiff = 1;
  479. }
  480. if (Tag == 29) {
  481. if ((Tag + WoTag) < 34)
  482. ZDiff = 1;
  483. }
  484. if (Tag == 30) {
  485. if ((Tag + WoTag) < 36)
  486. ZDiff = 1;
  487. }
  488. if (Tag == 31) {
  489. if ((Tag + WoTag) < 38)
  490. ZDiff = 1;
  491. }
  492. if ((ZDiff == 1) && (Stunde == 0) && (WoTag == 0))
  493. ZDiff = 2; //erst ab 02 Uhr
  494. }
  495. }
  496. Stunde = Stunde + ZDiff;
  497. if (Stunde > 23) //Tageskorrektur
  498. {
  499. Stunde = Stunde - 24; //kann 0 oder 1 sein
  500. Tag = Tag + 1;
  501. WoTag = WoTag + 1;
  502. if (Tag > Tage_Monat[Monat - 1]) {
  503. Tag = 1;
  504. Monat = Monat + 1;
  505. if (Monat > 12) {
  506. Monat = 1;
  507. Jahr = Jahr + 1;
  508. }
  509. }
  510. }
  511. MEZ.WT = WoTag; //So=0, Mo=1, Di=2 ...
  512. MEZ.sek1 = Sekunde % 10;
  513. MEZ.sek2 = Sekunde / 10;
  514. MEZ.sek12 = Sekunde;
  515. MEZ.min1 = Minute % 10;
  516. MEZ.min2 = Minute / 10;
  517. MEZ.min12 = Minute;
  518. MEZ.std1 = Stunde % 10;
  519. MEZ.std2 = Stunde / 10;
  520. MEZ.std12 = Stunde;
  521. MEZ.tag12 = Tag;
  522. MEZ.tag1 = Tag % 10;
  523. MEZ.tag2 = Tag / 10;
  524. MEZ.mon12 = Monat;
  525. MEZ.mon1 = Monat % 10;
  526. MEZ.mon2 = Monat / 10;
  527. MEZ.jahr12 = Jahr;
  528. MEZ.jahr1 = Jahr % 10;
  529. MEZ.jahr2 = Jahr / 10;
  530. }

  531. //*************************************************************************************************
  532. const unsigned short InitArr[7][2] = { { 0x0C, 0x00 }, // display off
  533. { 0x00, 0xFF }, // no LEDtest
  534. { 0x09, 0x00 }, // BCD off
  535. { 0x0F, 0x00 }, // normal operation
  536. { 0x0B, 0x07 }, // start display
  537. { 0x0A, 0x04 }, // brightness
  538. { 0x0C, 0x01 } // display on
  539. };
  540. //**************************************************************************************************
  541. void max7219_init() //all MAX7219 init
  542. {
  543. unsigned short i, j;
  544. for (i = 0; i < 7; i++) {
  545. digitalWrite(CS, LOW);
  546. delayMicroseconds(1);
  547. for (j = 0; j < anzMAX; j++) {
  548. SPI.write(InitArr[i][0]); //register
  549. SPI.write(InitArr[i][1]); //value
  550. }
  551. digitalWrite(CS, HIGH);
  552. }
  553. }
  554. //**************************************************************************************************
  555. void max7219_set_brightness(unsigned short br) //brightness MAX7219
  556. {
  557. unsigned short j;
  558. if (br < 16) {
  559. digitalWrite(CS, LOW);
  560. delayMicroseconds(1);
  561. for (j = 0; j < anzMAX; j++) {
  562. SPI.write(0x0A); //register
  563. SPI.write(br); //value
  564. }
  565. digitalWrite(CS, HIGH);
  566. }
  567. }
  568. //**************************************************************************************************
  569. void helpArr_init(void) //helperarray init
  570. {
  571. unsigned short i, j, k;
  572. j = 0;
  573. k = 0;
  574. for (i = 0; i < anzMAX * 8; i++) {
  575. helpArrPos[i] = (1 << j); //bitmask
  576. helpArrMAX[i] = k;
  577. j++;
  578. if (j > 7) {
  579. j = 0;
  580. k++;
  581. }
  582. }
  583. }
  584. //**************************************************************************************************
  585. void clear_Display() //clear all
  586. {
  587. unsigned short i, j;
  588. for (i = 0; i < 8; i++) //8 rows
  589. {
  590. digitalWrite(CS, LOW);
  591. delayMicroseconds(1);
  592. for (j = anzMAX; j > 0; j--) {
  593. LEDarr[j - 1][i] = 0; //LEDarr clear
  594. SPI.write(i + 1); //current row
  595. SPI.write(LEDarr[j - 1][i]);
  596. }
  597. digitalWrite(CS, HIGH);
  598. }
  599. }
  600. //*********************************************************************************************************
  601. void rotate_90() // for Generic displays
  602. {
  603. for (uint8_t k = anzMAX; k > 0; k--) {

  604. uint8_t i, j, m, imask, jmask;
  605. uint8_t tmp[8]={0,0,0,0,0,0,0,0};
  606. for ( i = 0, imask = 0x01; i < 8; i++, imask <<= 1) {
  607. for (j = 0, jmask = 0x01; j < 8; j++, jmask <<= 1) {
  608. if (LEDarr[k-1][i] & jmask) {
  609. tmp[j] |= imask;
  610. }
  611. }
  612. }
  613. for(m=0; m<8; m++){
  614. LEDarr[k-1][m]=tmp[m];
  615. }
  616. }
  617. }
  618. //**************************************************************************************************
  619. void refresh_display() //take info into LEDarr
  620. {
  621. unsigned short i, j;

  622. #ifdef ROTATE_90
  623. rotate_90();
  624. #endif

  625. for (i = 0; i < 8; i++) //8 rows
  626. {
  627. digitalWrite(CS, LOW);
  628. delayMicroseconds(1);
  629. for (j = anzMAX; j > 0; j--) {
  630. SPI.write(i + 1); //current row

  631. #ifdef REVERSE_HORIZONTAL
  632. SPI.setBitOrder(LSBFIRST); // bitorder for reverse columns
  633. #endif

  634. #ifdef REVERSE_VERTICAL
  635. SPI.write(LEDarr[j - 1][7-i]);
  636. #else
  637. SPI.write(LEDarr[j - 1][i]);
  638. #endif

  639. #ifdef REVERSE_HORIZONTAL
  640. SPI.setBitOrder(MSBFIRST); // reset bitorder
  641. #endif
  642. }
  643. digitalWrite(CS, HIGH);
  644. }
  645. }
  646. //**************************************************************************************************
  647. void char2Arr(unsigned short ch, int PosX, short PosY) { //characters into arr
  648. int i, j, k, l, m, o1, o2, o3, o4; //in LEDarr
  649. PosX++;
  650. k = ch - 32; //ASCII position in font
  651. if ((k >= 0) && (k < 96)) //character found in font?
  652. {
  653. o4 = font1[k][0]; //character width
  654. o3 = 1 << (o4 - 2);
  655. for (i = 0; i < o4; i++) {
  656. if (((PosX - i <= maxPosX) && (PosX - i >= 0))
  657. && ((PosY > -8) && (PosY < 8))) //within matrix?
  658. {
  659. o1 = helpArrPos[PosX - i];
  660. o2 = helpArrMAX[PosX - i];
  661. for (j = 0; j < 8; j++) {
  662. if (((PosY >= 0) && (PosY <= j)) || ((PosY < 0) && (j < PosY + 8))) //scroll vertical
  663. {
  664. l = font1[k][j + 1];
  665. m = (l & (o3 >> i)); //e.g. o4=7 0zzzzz0, o4=4 0zz0
  666. if (m > 0)
  667. LEDarr[o2][j - PosY] = LEDarr[o2][j - PosY] | (o1); //set point
  668. else
  669. LEDarr[o2][j - PosY] = LEDarr[o2][j - PosY] & (~o1); //clear point
  670. }
  671. }
  672. }
  673. }
  674. }
  675. }

  676. //**************************************************************************************************
  677. void timer50ms() {
  678. static unsigned int cnt50ms = 0;
  679. static unsigned int cnt1s = 0;
  680. static unsigned int cnt1h = 0;
  681. f_tckr50ms = true;
  682. cnt50ms++;
  683. if (cnt50ms == 20) {
  684. f_tckr1s = true; // 1 sec
  685. cnt1s++;
  686. cnt50ms = 0;
  687. }
  688. if (cnt1s == 3600) { // 1h
  689. cnt1h++;
  690. cnt1s = 0;
  691. }
  692. if (cnt1h == 24) { // 1d
  693. f_tckr24h = true;
  694. cnt1h = 0;
  695. }
  696. }
  697. //**************************************************************************************************
  698. //
  699. //The setup function is called once at startup of the sketch
  700. void setup() {
  701. // Add your initialization code here

  702. pinMode(CS, OUTPUT);
  703. digitalWrite(CS, HIGH);
  704. Serial.begin(115200);
  705. //rtc.init(SDA, SCL);
  706. SPI.begin();
  707. helpArr_init();
  708. max7219_init();
  709. rtc_init(SDA, SCL);
  710. clear_Display();
  711. tckr.attach(0.05, timer50ms); // every 50 msec
  712. connect_to_WiFi();
  713. tm* tt;
  714. tt = connectNTP();
  715. if (tt != NULL)
  716. rtc_set(tt);
  717. else
  718. Serial.println("no timepacket received");
  719. }
  720. //**************************************************************************************************
  721. // The loop function is called in an endless loop
  722. void loop() {
  723. //Add your repeated code here
  724. unsigned int sek1 = 0, sek2 = 0, min1 = 0, min2 = 0, std1 = 0, std2 = 0;
  725. unsigned int sek11 = 0, sek12 = 0, sek21 = 0, sek22 = 0;
  726. unsigned int min11 = 0, min12 = 0, min21 = 0, min22 = 0;
  727. unsigned int std11 = 0, std12 = 0, std21 = 0, std22 = 0;
  728. signed int x = 0; //x1,x2;
  729. signed int y = 0, y1 = 0, y2 = 0;
  730. bool updown = false;
  731. unsigned int sc1 = 0, sc2 = 0, sc3 = 0, sc4 = 0, sc5 = 0, sc6 = 0;
  732. bool f_scrollend_y = false;
  733. unsigned int f_scroll_x = false;

  734. z_PosX = maxPosX;
  735. d_PosX = -8;
  736. // x=0; x1=0; x2=0;

  737. refresh_display();
  738. updown = true;
  739. if (updown == false) {
  740. y2 = -9;
  741. y1 = 8;
  742. }
  743. if (updown == true) { //scroll up to down
  744. y2 = 8;
  745. y1 = -8;
  746. }
  747. while (true) {
  748. yield();
  749. if (f_tckr24h == true) { //syncronisize RTC every day
  750. f_tckr24h = false;
  751. tm* tt;
  752. tt = connectNTP();
  753. if (tt != NULL)
  754. rtc_set(tt);
  755. else
  756. Serial.println("no timepacket received");
  757. }
  758. if (f_tckr1s == true) // flag 1sek
  759. {
  760. rtc2mez();
  761. sek1 = MEZ.sek1;
  762. sek2 = MEZ.sek2;
  763. min1 = MEZ.min1;
  764. min2 = MEZ.min2;
  765. std1 = MEZ.std1;
  766. std2 = MEZ.std2;
  767. y = y2; //scroll updown
  768. sc1 = 1;
  769. sek1++;
  770. if (sek1 == 10) {
  771. sc2 = 1;
  772. sek2++;
  773. sek1 = 0;
  774. }
  775. if (sek2 == 6) {
  776. min1++;
  777. sek2 = 0;
  778. sc3 = 1;
  779. }
  780. if (min1 == 10) {
  781. min2++;
  782. min1 = 0;
  783. sc4 = 1;
  784. }
  785. if (min2 == 6) {
  786. std1++;
  787. min2 = 0;
  788. sc5 = 1;
  789. }
  790. if (std1 == 10) {
  791. std2++;
  792. std1 = 0;
  793. sc6 = 1;
  794. }
  795. if ((std2 == 2) && (std1 == 4)) {
  796. std1 = 0;
  797. std2 = 0;
  798. sc6 = 1;
  799. }

  800. sek11 = sek12;
  801. sek12 = sek1;
  802. sek21 = sek22;
  803. sek22 = sek2;
  804. min11 = min12;
  805. min12 = min1;
  806. min21 = min22;
  807. min22 = min2;
  808. std11 = std12;
  809. std12 = std1;
  810. std21 = std22;
  811. std22 = std2;
  812. f_tckr1s = false;
  813. if (MEZ.sek12 == 45)
  814. f_scroll_x = true;
  815. } // end 1s
  816. if (f_tckr50ms == true) {
  817. f_tckr50ms = false;
  818. if (f_scroll_x == true) {
  819. z_PosX++;
  820. d_PosX++;
  821. if (d_PosX == 101)
  822. z_PosX = 0;
  823. if (z_PosX == maxPosX) {
  824. f_scroll_x = false;
  825. d_PosX = -8;
  826. }
  827. }
  828. if (sc1 == 1) {
  829. if (updown == 1)
  830. y--;
  831. else
  832. y++;
  833. char2Arr(48 + sek12, z_PosX - 42, y);
  834. char2Arr(48 + sek11, z_PosX - 42, y + y1);
  835. if (y == 0) {
  836. sc1 = 0;
  837. f_scrollend_y = true;
  838. }
  839. }
  840. else
  841. char2Arr(48 + sek1, z_PosX - 42, 0);

  842. if (sc2 == 1) {
  843. char2Arr(48 + sek22, z_PosX - 36, y);
  844. char2Arr(48 + sek21, z_PosX - 36, y + y1);
  845. if (y == 0)
  846. sc2 = 0;
  847. }
  848. else
  849. char2Arr(48 + sek2, z_PosX - 36, 0);

  850. char2Arr(':', z_PosX - 32, 0);

  851. if (sc3 == 1) {
  852. char2Arr(48 + min12, z_PosX - 25, y);
  853. char2Arr(48 + min11, z_PosX - 25, y + y1);
  854. if (y == 0)
  855. sc3 = 0;
  856. }
  857. else
  858. char2Arr(48 + min1, z_PosX - 25, 0);

  859. if (sc4 == 1) {
  860. char2Arr(48 + min22, z_PosX - 19, y);
  861. char2Arr(48 + min21, z_PosX - 19, y + y1);
  862. if (y == 0)
  863. sc4 = 0;
  864. }
  865. else
  866. char2Arr(48 + min2, z_PosX - 19, 0);

  867. char2Arr(':', z_PosX - 15 + x, 0);

  868. if (sc5 == 1) {
  869. char2Arr(48 + std12, z_PosX - 8, y);
  870. char2Arr(48 + std11, z_PosX - 8, y + y1);
  871. if (y == 0)
  872. sc5 = 0;
  873. }
  874. else
  875. char2Arr(48 + std1, z_PosX - 8, 0);

  876. if (sc6 == 1) {
  877. char2Arr(48 + std22, z_PosX - 2, y);
  878. char2Arr(48 + std21, z_PosX - 2, y + y1);
  879. if (y == 0)
  880. sc6 = 0;
  881. }
  882. else
  883. char2Arr(48 + std2, z_PosX - 2, 0);

  884. char2Arr(WT_arr[MEZ.WT][0], d_PosX - 5, 0); //day of the week
  885. char2Arr(WT_arr[MEZ.WT][1], d_PosX - 11, 0);
  886. char2Arr(WT_arr[MEZ.WT][2], d_PosX - 17, 0);
  887. char2Arr(WT_arr[MEZ.WT][3], d_PosX - 23, 0);
  888. char2Arr(48 + MEZ.tag2, d_PosX - 27, 0); //day
  889. char2Arr(48 + MEZ.tag1, d_PosX - 33, 0);
  890. char2Arr(M_arr[MEZ.mon12 - 1][0], d_PosX - 39, 0); //month
  891. char2Arr(M_arr[MEZ.mon12 - 1][1], d_PosX - 43, 0);
  892. char2Arr(M_arr[MEZ.mon12 - 1][2], d_PosX - 49, 0);
  893. char2Arr(M_arr[MEZ.mon12 - 1][3], d_PosX - 55, 0);
  894. char2Arr(M_arr[MEZ.mon12 - 1][4], d_PosX - 61, 0);
  895. char2Arr('2', d_PosX - 68, 0); //year
  896. char2Arr('0', d_PosX - 74, 0);
  897. char2Arr(48 + MEZ.jahr2, d_PosX - 80, 0);
  898. char2Arr(48 + MEZ.jahr1, d_PosX - 86, 0);

  899. refresh_display(); //alle 50ms
  900. if (f_scrollend_y == true) {
  901. f_scrollend_y = false;
  902. }
  903. } //end 50ms
  904. if (y == 0) {
  905. // do something else
  906. }
  907. } //end while(true)
  908. //this section can not be reached
  909. }
复制代码


回复 支持 反对

使用道具 举报

发表于 2020-10-16 12:30:09 | 显示全部楼层
本帖最后由 电台迷小民 于 2020-10-16 12:35 编辑

这个项目本就是hack labs的开源项目,不知道的还以为你整出来的
https://www.bilibili.com/video/BV1s54y1R77t


回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-16 12:33:05 | 显示全部楼层
电台迷小民 发表于 2020-10-16 12:30
这个项目本就是hack labs的开源项目,不知道的还以为你整出来的

这个我是通过GitHub看到的项目,然后才知道B站有这个。所以我贴出了我参考的两个源码地址。
硬件我都是自己画的,可以查的哦!
回复 支持 反对

使用道具 举报

发表于 2020-10-16 12:37:29 | 显示全部楼层
本帖最后由 电台迷小民 于 2020-10-16 12:48 编辑
myseil 发表于 2020-10-16 12:33
这个我是通过GitHub看到的项目,然后才知道B站有这个。所以我贴出了我参考的两个源码地址。
硬件我都是自 ...

那个也是他的,他一年前就部分开源了。怎么github看的就不需要表明转载了??
我还专门去下载了他一年前的资料,怎么将kicad的内容在立创里头抄一遍,就成了你的了??

还拿来卖M币,原作者给的最初版本下载链接!http://gofile.me/6BBGD/9EverOBiZ
升级版链接!http://gofile.me/6BBGD/Nx8pS7jNj

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-16 12:47:57 | 显示全部楼层
电台迷小民 发表于 2020-10-16 12:37
那个也是他的,他一年前就部分开源了。怎么github看的就不需要表明转载了??
我还专门去下载了他一年前的 ...

我这个不是转载好不好,难道开源的别人就不能做了?
我原理图自己画的,PCB自己做的,布线自己布的,怎么就成转载了?

而且你说的hack labs 我不确定是不是B站的 【HACK实验室】这个,这个我参考的是 【HACK实验室】和GitHub上面的源码有错吗?

而且我说明了源码来源,也贴了连接地址,这个看不到吗?

然后,我想对你说的是,如果你看了我的PCB就知道我不可能抄的别人的,因为我的走线全部是自动布线,哈哈!!

源码你如果说抄的就是抄的吧,这个确实自己写不出来,能力有限!只能修改部分,然后适配到自己的共阳极LED点阵上面。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +20 收起 理由
aec + 20 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-16 12:49:07 | 显示全部楼层
电台迷小民 发表于 2020-10-16 12:37
那个也是他的,他一年前就部分开源了。怎么github看的就不需要表明转载了??
我还专门去下载了他一年前的 ...

而且,我从来没说这个项目是我的。我也是照着别人优秀的东西在做!
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-16 12:54:27 | 显示全部楼层
myseil 发表于 2020-10-16 12:47
我这个不是转载好不好,难道开源的别人就不能做了?
我原理图自己画的,PCB自己做的,布线自己布的,怎么 ...

你做了啥?顶多是pcb你重做了,还是自动布线的,项目不是你的,代码不是你的,电路图也不是你的,你这些说了吗?
回复 支持 反对

使用道具 举报

发表于 2020-10-16 12:55:52 | 显示全部楼层
myseil 发表于 2020-10-16 12:49
而且,我从来没说这个项目是我的。我也是照着别人优秀的东西在做!

你是没说项目是你的,论坛里头自己做项目的,谁说了是自己的???不都是转载或者仿制别人的开源项目才会申明
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-16 12:56:24 | 显示全部楼层
电台迷小民 发表于 2020-10-16 12:37
那个也是他的,他一年前就部分开源了。怎么github看的就不需要表明转载了??
我还专门去下载了他一年前的 ...

删帖了,大佬,满意了嘛?

给大佬端茶!大佬,请原谅!

不知道怎么得罪大佬了,别人完全照搬的可以评精华。而我修改别人的开源代码遭到大佬如此对待。
给大佬道歉,大佬请原谅我!   


惹不起,惹不起!
回复 支持 反对

使用道具 举报

发表于 2020-10-16 13:30:32 | 显示全部楼层
本帖最后由 ploestar 于 2020-10-16 13:32 编辑

要这么说,本论坛9成都是抄了,总有杠精不是说抄,就是你做这东西没卵用巴拉巴拉没看到主楼,二楼楼主来求助改动,明显就是说不是自己做的,三楼还能理解成这样,小学没毕业吧

打赏

参与人数 2家元 +30 收起 理由
aec + 20 熱心助人
myseil + 10 我很贊同

查看全部打赏

回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2020-10-16 13:49:04 | 显示全部楼层
ploestar 发表于 2020-10-16 13:30
要这么说,本论坛9成都是抄了,总有杠精不是说抄,就是你做这东西没卵用巴拉巴拉没看到主楼,二楼楼主来求助改 ...

大佬太多了,我也是菜鸟。
恨自己没用,做不出这么优秀的项目。还得努力学习深造!
回复 支持 反对

使用道具 举报

发表于 2020-10-16 16:09:30 | 显示全部楼层
myseil 发表于 2020-10-16 13:49
大佬太多了,我也是菜鸟。
恨自己没用,做不出这么优秀的项目。还得努力学习深造! ...

其实当时好像是有位坛友先提出要改成数字显示在4块模块上,我就开始了。
然后有人提过B站有例子,也去看了。还下载了PCB,但是不合适。

于是从原理开始,取模,电路,pcb  
我做的这个功能更强,还多了ws2812显示,当时很多人找我要源码;
因为考虑参考了b站up主的理念,就没有给。
静下心来,还是可以搞出来的。我这个是用micropython写的,耗时几个月。
楼主不要气馁,只要不涉及商业用途,无所谓抄袭。
自己努力,就会体会成功的喜悦。

















最终我做的成品,已经连续工作至今,很稳定。

https://www.mydigit.cn/forum.php?mod=viewthread&tid=137328





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +30 收起 理由
myseil + 30 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-16 16:18:46 | 显示全部楼层
lyy-cy 发表于 2020-10-16 16:09
其实当时好像是有位坛友先提出要改成数字显示在4块模块上,我就开始了。
然后有人提过B站有例子,也去看 ...

哇,这个就比较赞了!一看就是技术贴,想喷的人估计会先考虑自己的能力:lol:
回复 支持 反对

使用道具 举报

发表于 2020-10-16 16:36:32 | 显示全部楼层
本帖最后由 lyy-cy 于 2020-10-16 16:44 编辑
myseil 发表于 2020-10-16 16:18
哇,这个就比较赞了!一看就是技术贴,想喷的人估计会先考虑自己的能力 ...

看你以往的帖子,你会Python,用micropython驱动esp32 很容易;

理解了原理,慢慢来,只要花点时间,你也行的。

都是业余爱好,开心就好。有的事情不用纠结。
我13年玩arduino的时候,自己分享了  《自制最少零件的arduino 》  当时很多人都只认51
回复也很……   

当然现在论坛里面玩arduino的人多了,再也没人这么说了。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2020-10-16 17:57:48 来自手机浏览器 | 显示全部楼层
lyy-cy 发表于 2020-10-16 16:09
其实当时好像是有位坛友先提出要改成数字显示在4块模块上,我就开始了。
然后有人提过B站有例子,也去看 ...

说一句项目的原作者不难吧,你也是没看到他的原文,不说的话还真以为全是他弄出来的。人家作者也没说不让仿制,人一年前就给部分开源了,意思就是放开了敞开了让你仿制,让你改造。这一点看看论坛内那些做助听器的,不管你是仿制还是改造,没人说半个不字吧?为什么?说清楚了东西,从哪来的,自己又做了什么。我要不是去联系了hack实验室,我还以为这是hack实验室的账号呢,人up主意思清楚,反感不声明原作者,打一句“本项目原作者xxx,后经本人改造”,是键盘烫手吗
回复 支持 反对

使用道具 举报

发表于 2020-10-16 18:01:08 | 显示全部楼层
想得开的人长寿

打赏

参与人数 1家元 +10 收起 理由
myseil + 10 我很贊同

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-10-16 18:02:11 来自手机浏览器 | 显示全部楼层
ploestar 发表于 2020-10-16 13:30
要这么说,本论坛9成都是抄了,总有杠精不是说抄,就是你做这东西没卵用巴拉巴拉没看到主楼,二楼楼主来求助改 ...

您幼儿园几年级啊?主贴删了你就跟这评论的?让你看了主贴你也得觉得这就是他开头的项目,全是他弄的
回复 支持 反对

使用道具 举报

发表于 2020-10-16 18:04:03 来自手机浏览器 | 显示全部楼层
b站up主看到过主贴

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2020-10-16 19:13:37 | 显示全部楼层
电台迷小民 发表于 2020-10-16 18:02
您幼儿园几年级啊?主贴删了你就跟这评论的?让你看了主贴你也得觉得这就是他开头的项目,全是他弄的 ...

我只看到2楼,说要人帮忙改程序,你觉得完全自己做的不知道怎么修改?没提原作者或者说仿制可能有点不太好,可能......用不着上纲上线,也不是拿来获利

打赏

参与人数 1家元 +10 收起 理由
aec + 10 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-25 06:14 , Processed in 0.140400 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表