Board logo

標題: Arduino POV (視覺暫留) 小玩具 (照舊, 有圖有 Code) [打印本頁]

作者: dulllou    時間: 2009-6-8 00:18     標題: Arduino POV (視覺暫留) 小玩具 (照舊, 有圖有 Code)

其實呢樣小玩具好多地方都有得賣, 而且亦一d 都唔貴, 只係幾粒 LED 晌高速搖擺時用視覺暫留的視覺效果. 整出來純粹 proof of concept.

下面的 Code 只可以  display  到 A-Z 26 個字母同 Space (空格), 不過如果有需要加o既其實都唔難, 你亦可以焊多幾粒 LED 來顯示中文甚至圖案

整的時候我建議條連接線整長少少, 揮起來比較就手
再唔係就索性連電池連 LED 連 arduino mount 起佢後裝上個電池批/磨機上轉轉轉 (不過要注意安全, 裝得平穩同平衡, 否則會出現飛天 Arduino 現象...)

效果如下, 我係用人手揮的, 所以d 字有d 變型....
DSCF4338.jpg
DSCF4344.jpg
DSCF4359.jpg

好簡單的設計, 五粒LED
DSCF4339.jpg

背面, 我懶到連熱膠槍都唔開, 就咁剪一小舊熱膠出來用火機燒一燒痴落去就算
DSCF4340.jpg

[ 本帖最後由 dulllou 於 2009-6-8 00:43 編輯 ]

圖片附件: DSCF4338.jpg (2009-6-8 00:18, 23.72 KB) / 下載次數 160
https://www.hkepc.com/forum/attachment.php?aid=866707&k=081118e4e03b8866aae10b53ea4ea7d1&t=1781509705&sid=z4lbIGQOlg



圖片附件: DSCF4339.jpg (2009-6-8 00:18, 134.86 KB) / 下載次數 171
https://www.hkepc.com/forum/attachment.php?aid=866709&k=510eaaccf9737ea4905703c79486108e&t=1781509705&sid=z4lbIGQOlg



圖片附件: DSCF4340.jpg (2009-6-8 00:18, 109.63 KB) / 下載次數 163
https://www.hkepc.com/forum/attachment.php?aid=866711&k=9c511315aa554f5489a01c7ef3ee9780&t=1781509705&sid=z4lbIGQOlg



圖片附件: DSCF4344.jpg (2009-6-8 00:22, 24.68 KB) / 下載次數 153
https://www.hkepc.com/forum/attachment.php?aid=866729&k=7246e3b9b46bef3e1c1fc3aab95df32b&t=1781509705&sid=z4lbIGQOlg



圖片附件: DSCF4359.jpg (2009-6-8 00:37, 31.72 KB) / 下載次數 144
https://www.hkepc.com/forum/attachment.php?aid=866737&k=6811743deef2e1a4a7e8580418282fcf&t=1781509705&sid=z4lbIGQOlg


作者: dulllou    時間: 2009-6-8 00:18

Code 亦都好簡單, 主要係 define 左每個字母點顯示就已經可以
如果有心機o既, 可以輕易 base on 呢個 code, 焊多幾粒 LED 就可以整中文字型玩
不過俾人催緊我訓, 所以就整住咁多先

int _[] = {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};
int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1};
int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0};
int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1};
int D[] = {1,1,1,1,1, 1,0,0,0,1, 0,1,1,1,0};
int E[] = {1,1,1,1,1, 1,0,1,0,1, 1,0,1,0,1};
int F[] = {1,1,1,1,1, 1,0,1,0,0, 1,0,1,0,0};
int G[] = {0,1,1,1,0, 1,0,1,0,1, 0,0,1,1,0};
int H[] = {1,1,1,1,1, 0,0,1,0,0, 1,1,1,1,1};
int I[] = {0,0,0,0,1, 1,0,1,1,1, 0,0,0,0,1};
int J[] = {1,0,0,0,0, 1,0,0,0,1, 1,1,1,1,1};
int K[] = {1,1,1,1,1, 0,0,1,0,0, 0,1,0,1,1};
int L[] = {1,1,1,1,1, 0,0,0,0,1, 0,0,0,0,1};
int M[] = {1,1,1,1,1, 0,1,1,0,0, 0,1,1,1,1};
int N[] = {1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1};
int O[] = {0,1,1,1,0, 1,0,0,0,1, 0,1,1,1,0};
int P[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,0,0};
int Q[] = {0,1,1,1,1, 1,0,0,1,1, 0,1,1,1,1};
int R[] = {1,1,1,1,1, 1,0,1,0,0, 0,1,0,1,1};
int S[] = {0,1,0,0,1, 1,0,1,0,1, 1,0,0,1,0};
int T[] = {1,0,0,0,0, 1,1,1,1,1, 1,0,0,0,0};
int U[] = {1,1,1,1,1, 0,0,0,0,1, 1,1,1,1,1};
int V[] = {1,1,1,1,0, 0,0,0,0,1, 1,1,1,1,0};
int W[] = {1,1,1,1,0, 0,0,1,1,0, 1,1,1,1,0};
int X[] = {1,1,0,1,1, 0,0,1,0,0, 1,1,0,1,1};
int Y[] = {1,1,0,0,0, 0,0,1,0,0, 1,1,1,1,1};
int Z[] = {1,0,0,1,1, 1,0,1,0,1, 1,1,0,0,1};
int letterSpace;
int dotTime;
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);

letterSpace = 6;

dotTime = 3;
}
void printLetter(int letter[])
{
int y;

for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y]);
}
delay(dotTime);

for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y+5]);
}
delay(dotTime);

for (y=0; y<5; y++)
{

}
delay(dotTime);

for (y=0; y<5; y++)
{
digitalWrite(y+2, 0);
}
delay(letterSpace);
}
void loop()
{

printLetter(H);
printLetter(K);
printLetter(E);
printLetter(P);
printLetter(C);
printLetter(_);
}

[ 本帖最後由 dulllou 於 2009-6-8 01:35 編輯 ]
作者: dulllou    時間: 2009-6-8 00:46

晌整呢舊野o既時候, 忽然好想要一件 Arduino mini ...咁就可以唔駛有線駁住喇 :P

下星期會試下整件 RGB 同埋 LED 多d 的, 希望可以整到佢出到圖. 不過都要視乎我買唔買到 3mm 的 RGB 同74HC595...而家手上的 8MM 太大了 (所以用了 5mm 的 green)
作者: ray08    時間: 2009-6-8 00:54

提示: 作者被禁止或刪除 內容自動屏蔽
作者: dulllou    時間: 2009-6-8 00:56

原帖由 ray08 於 2009-6-8 00:54 發表
我一直都好想知佢咩原理...
而家...等我用BASIC STAMP整下先
真多謝


原理.. 你可以幻想成呢個係一個 5*無限的 dot matrix, 會易明d
作者: Motti_sir    時間: 2009-6-8 01:02

ching~ 如果你move佢慢d
d字會唔會窄埋一齊?
作者: dulllou    時間: 2009-6-8 01:03

即係咁, 用個 A 字來做例子
A 字晌 dot matrix 上會 display 成咁樣的
  1  2  3  4
a  ●●
b ●  ●
c ● ● ●  ●
d ●   ●
e ●   ●

你要做o既野只係不停用 LED 閃以下4 組LED bcde (出第1 行) ac(出第2行) ac(出第3行) bcde(出第四行)
當你揮動佢o既時候, 因為視覺暫留o既關系, 你就會見到一個 A 字
作者: dulllou    時間: 2009-6-8 01:04

原帖由 Motti_sir 於 2009-6-8 01:02 發表
ching~ 如果你move佢慢d
d字會唔會窄埋一齊?


會. 但同時其實 timing 可以晌個 code 度改, 你加返長個 timing個字就會變返闊
作者: 風之小文    時間: 2009-6-8 01:23

勁呀!
係咪用8051做架?
作者: dulllou    時間: 2009-6-8 01:26

原帖由 風之小文 於 2009-6-8 01:23 發表
勁呀!
係咪用8051做架?


Arduino 咋
我邊會識用 8051 呢D 咁複雜o既野
作者: rutellor    時間: 2009-6-8 01:33

原帖由 dulllou 於 2009-6-8 01:03 發表
即係咁, 用個 A 字來做例子
A 字晌 dot matrix 上會 display 成咁樣的
  1  2  3  4
a  ●●
b ●  ●
c ● ● ●  ●
d ●   ●
e ●   ●

你要做o既野只係不停用 ...

有無一個program可以將要的字轉做code?
作者: Motti_sir    時間: 2009-6-8 01:37

原帖由 dulllou 於 2009-6-8 01:04 發表


會. 但同時其實 timing 可以晌個 code 度改, 你加返長個 timing個字就會變返闊

同我估計o既一樣
唔記得係咪ching o既diy, o係youtube到見到o既片黎
佢整左個系統, 用cd-rom 個底盤黎到轉動幾粒led
o係固定位置, 佢會出指定文字
我估佢係get position 黎到control d led 幾時著邊粒,
轉快轉慢唔會令到隻字窄左
所以o係上面咁問ching
作者: dulllou    時間: 2009-6-8 01:38

冇架. 最簡單o既做法係搵d bitmap fonts (即係唔係 True type fonts o個d) zoom 到佢大大隻來睇住打, 唔係好難的
作者: dulllou    時間: 2009-6-8 01:41

原帖由 Motti_sir 於 2009-6-8 01:37 發表

同我估計o既一樣
唔記得係咪ching o既diy, o係youtube到見到o既片黎
佢整左個系統, 用cd-rom 個底盤黎到轉動幾粒led
o係固定位置, 佢會出指定文字
我估佢係get position 黎到control d led 幾時著邊粒,
轉快轉慢唔會令到隻字窄左
所以o係上面咁問ching


其實有好多人整 POV, 網上亦有好多 code 可以抄考
問題係佢o地多數都加 microswitch  甚至accelerometer 來計返個 postision, 所以快慢唔會影響到字型 (太慢最多d 字斷開一截截, 但都唔會變型)

我呢個簡陋好多, 單純係靠 try and error, 見d 字窄/闊左一係就 fing 返慢/快 d, 一係就改 code
作者: 風之小文    時間: 2009-6-8 01:44

原帖由 dulllou 於 2009-6-8 01:26 發表


Arduino
我邊會識用 8051 呢D 咁複雜o既野


咩黎架?

未聽過.......
可唔可以教我?
點燒program?
係別好似8051咁架?
作者: 風之小文    時間: 2009-6-8 01:46

有冇線路圖?
我想學做.........
作者: dulllou    時間: 2009-6-8 02:04

原帖由 風之小文 於 2009-6-8 01:44 發表


咩黎架?

未聽過.......
可唔可以教我?
點燒program?
係別好似8051咁架?


Arduino 的基本介紹
http://www.hkepc.com/forum/viewthread.php?tid=1229160

我用 Arduino 做過的小玩意s
http://www.hkepc.com/forum/viewt ... &extra=page%3D1

中毒的板友們在攪的團購
http://www.hkepc.com/forum/viewt ... page%3D1&page=1

Arduino 官網
http://arduino.cc
作者: dulllou    時間: 2009-6-8 02:07

原帖由 風之小文 於 2009-6-8 01:46 發表
有冇線路圖?
我想學做.........


唔駛線路圖的, 你睇返我份 code, 就知道只需要將 5 粒 LED o既正極分別駁去 Arduino o既 2, 3, 4, 5, 6 號插位 (記得加電阻), 再將全部 LED o既負極駁晒入 ground 就做到
作者: 風之小文    時間: 2009-6-8 03:04

我想問個人o係香港
o係陶寶買野點比錢?
作者: jackli    時間: 2009-6-8 07:19

原帖由 風之小文 於 2009-6-8 03:04 發表
我想問個人o係香港
o係陶寶買野點比錢?


http://service.taobao.com/support/help.htm
買家入門
作者: jackli    時間: 2009-6-8 07:20

原帖由 dulllou 於 2009-6-8 00:46 發表
晌整呢舊野o既時候, 忽然好想要一件 Arduino mini ...咁就可以唔駛有線駁住喇 :P

下星期會試下整件 RGB 同埋 LED 多d 的, 希望可以整到佢出到圖. 不過都要視乎我買唔買到 3mm 的 RGB 同74HC595...而家手上的 8MM 太大了 (所以用了 5mm 的 green)


快D入返件mini 啦
你可以試用4pin 的變色led 黎整依個

D code 都成18xx 個字喇喎,.,.,,
用16K的168好似做唔到

[ 本帖最後由 jackli 於 2009-6-8 09:02 編輯 ]
作者: dulllou    時間: 2009-6-8 09:39

原帖由 jackli 於 2009-6-8 07:20 發表


快D入返件mini 啦
你可以試用4pin 的變色led 黎整依個

D code 都成18xx 個字喇喎,.,.,,
用16K的168好似做唔到


already ordered nano and mega lu
will receive them before u guys start the buying group :p

and the code can surly fit in 168 (i'm uing 168), 18xx char =1.8k only

[ 本帖最後由 dulllou 於 2009-6-8 09:41 編輯 ]
作者: jackli    時間: 2009-6-8 09:50

原帖由 dulllou 於 2009-6-8 09:39 發表


already ordered nano and mega lu
will receive them before u guys start the buying group :p

and the code can surly fit in 168 (i'm uing 168), 18xx char =1.8k only


係喎...,睇錯.,,.,..,,.
唔係18,000K
作者: VR2VDT    時間: 2009-6-8 10:42

原帖由 dulllou 於 2009-6-8 00:46 發表
晌整呢舊野o既時候, 忽然好想要一件 Arduino mini ...咁就可以唔駛有線駁住喇 :P

下星期會試下整件 RGB 同埋 LED 多d 的, 希望可以整到佢出到圖. 不過都要視乎我買唔買到 3mm 的 RGB 同74HC595...而家手上的 8MM 太大了 (所以用了 5mm 的 green)


用TLC5940可以有PWM輸岀,可以參考這個
http://www.arduino.cc/playground/Learning/TLC5940
http://students.washington.edu/acleone/codes/tlc5940arduino/
作者: 風之小文    時間: 2009-6-9 00:03

原帖由 VR2VDT 於 2009-6-8 10:42 發表


用TLC5940可以有PWM輸岀,可以參考這個
http://www.arduino.cc/playground/Learning/TLC5940
http://students.washington.edu/acleone/codes/tlc5940arduino/

what is "PWM"???
作者: qazwsxedcrfv000    時間: 2009-6-9 00:04

POV真係經典
作者: VR2VDT    時間: 2009-6-9 00:23

what is "PWM"???


PWM - Pulse-Width Modulation
http://en.wikipedia.org/wiki/Pulse-width_modulation
作者: dulllou    時間: 2009-6-9 00:27

原帖由 風之小文 於 2009-6-9 00:03 發表

what is "PWM"???


簡單d 講, 即係用高速cut 電開電 cut 電開電來用 digital 訊號扮 analog 訊號
arduino 原本只有  0v (LOW) 同 5v (HIGH) 2 種output, PWM 就係用唔同長短o既去開關令個平均o既電壓高於 0V 又低於 5V
作者: 風之小文    時間: 2009-6-9 00:35

原帖由 dulllou 於 2009-6-9 00:27 發表


簡單d 講, 即係用高速cut 電開電 cut 電開電來用 digital 訊號扮 analog 訊號
arduino 原本只有  0v (LOW) 同 5v (HIGH) 2 種output, PWM 就係用唔同長短o既去開關令個平均o既電壓高於 0V 又低於 5V

哦~~~~~~即係做個pulse 出黎,用黎做個clock.......
Arduino唔可以用粒crystal 個pulse黎做咩?
好似8051咁...........
作者: 風之小文    時間: 2009-6-9 00:46

可唔可以講解下..........

void printLetter(int letter[])
{
int y;

for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y]);
}
delay(dotTime);

for (y=0; y<5; y++)
{
digitalWrite(y+2, letter[y+5]);
}
delay(dotTime);

for (y=0; y<5; y++)
{

}
delay(dotTime);

for (y=0; y<5; y++)
{
digitalWrite(y+2, 0);
}
delay(letterSpace);
}
作者: dulllou    時間: 2009-6-9 00:46

原帖由 風之小文 於 2009-6-9 00:35 發表

哦~~~~~~即係做個pulse 出黎,用黎做個clock.......
Arduino唔可以用粒crystal 個pulse黎做咩?
好似8051咁...........


唔係. PWM 唔係用來做 clock 的. PWM 係用來模擬 analog output.
舉個例, 你 set  左 output pin  做 high, 咁接住 output pin o個粒 LED 就會俾 arduino o既 5V 整著啦. 但問題係有時你想用 arduino 控制粒 LED 暗 D, 但 arduino 只有 0 同 5v 輸出, 於是就用 PWM 喇. 比如話 30% pwm, 就晌一個 10 次開關o既 cycle 入便有 70% 時間 0V, 30% 時間 5V. 咁個輸出o既平均值就變左 1.5v, 同時粒 LED 亦都暗左喇

另外你提到 oscillator, Arduino係用 atmega 內置的oscillator 做timing 的
外面再加o個粒 16mhz crystal 係用來做 synchronize 的
作者: dulllou    時間: 2009-6-9 00:47

原帖由 風之小文 於 2009-6-9 00:46 發表
可唔可以講解下..........

void printLetter(int letter[])
{
int y;

for (y=0; y


我建議你都係由淺入深, 先試下睇 Arduino IDE 入便的 example ( comment 好晒, 好易睇的), 了解多少少先返轉頭睇呢個略為複雜o既 code 啦
作者: 風之小文    時間: 2009-6-9 00:53

原帖由 dulllou 於 2009-6-9 00:46 發表


唔係. PWM 唔係用來做 clock 的. PWM 係用來模擬 analog output.
舉個例, 你 set  左 output pin  做 high, 咁接住 output pin o個粒 LED 就會俾 arduino o既 5V 整著啦. 但問題係有時你想用 arduino 控制粒 LED  ...


點control 個PWM出幾多v???


原帖由 dulllou 於 2009-6-9 00:47 發表


我建議你都係由淺入深, 先試下睇 Arduino IDE 入便的 example ( comment 好晒, 好易睇的), 了解多少少先返轉頭睇呢個略為複雜o既 code 啦


Arduino IDE  o係邊?
作者: dulllou    時間: 2009-6-9 01:04

原帖由 風之小文 於 2009-6-9 00:53 發表


點control 個PWM出幾多v???




Arduino IDE  o係邊?


1. 改變 output LOW/HIGH 的時間. 一個 cycle 入便多  d high 少 D low 個平均 voltage 咪高D, 少d high 多d low 個平均 voltage  咪低 D

2. 去 http://arduino.cc download
作者: 風之小文    時間: 2009-6-9 01:11

Arduino IDE係乜?

sorry,咁多蠢問題...............
作者: dulllou    時間: 2009-6-9 01:19

原帖由 風之小文 於 2009-6-9 01:11 發表
Arduino IDE係乜?

sorry,咁多蠢問題...............


Arduino IDE (Integrated development environment, 綜合開發環境....怪中文...) 係俾你晌上便寫 program o既地方, 寫好左佢會同你 debug, compile 同 flash 入 arduino
作者: wingyat92    時間: 2009-6-9 01:42

呢D有美觀
上次見人係黃金申左隻手埋把呢種有字GA風扇度
作者: 風之小文    時間: 2009-6-9 02:20

原帖由 wingyat92 於 2009-6-9 01:42 發表
呢D有美觀
上次見人係黃金申左隻手埋把呢種有字GA風扇度

咁咪斬手指戒賭.......:funk: :funk: :funk: :funk:
作者: 風之小文    時間: 2009-6-9 02:23

原帖由 dulllou 於 2009-6-9 01:19 發表


Arduino IDE (Integrated development environment, 綜合開發環境....怪中文...) 係俾你晌上便寫 program o既地方, 寫好左佢會同你 debug, compile 同 flash 入 arduino


即係設計平台(可以咁講吧......)
未有Arduino 都用到?
作者: 3kiu    時間: 2009-6-9 02:27

原帖由 風之小文 於 2009-6-9 00:46 發表
可唔可以講解下..........
void printLetter(int letter[])
{
int y;
for (y=0; y


等小弟試下解釋- -(其實係睇下自己理解得岩唔岩)

for (y=0; y<5; y++)
//整第一行(每一個字set左有三行)既字出黎,y<5因為有5粒led,loop 5次,
{digitalWrite(y+2, letter[y]);}
//y+2係控制第幾粒led(pin位),letter[y]係睇返個字著唔著
/*eg: 當y=0,會控制0+2=2,睇返
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
係第1粒既,
letter[0],姐係H[0],再睇返int H[] = {1,1,1,1,1, 0,0,1,0,0, 1,1,1,1,1};,H[0]=1,姐係著既.
*/
delay(dotTime);
//利用delay時間整一個行與行之間的空隙(?)

有錯請指點
作者: jackli    時間: 2009-6-9 07:39

原帖由 風之小文 於 2009-6-9 02:23 發表


即係設計平台(可以咁講吧......)
未有Arduino 都用到?


無arduino, compile左都無用,., 無得FLASH ROM,.,.無得玩
作者: dulllou    時間: 2009-6-9 20:12

原帖由 風之小文 於 2009-6-9 02:23 發表


即係設計平台(可以咁講吧......)
未有Arduino 都用到?


開出來, 睇下人d code 都好的
作者: Sora    時間: 2009-7-15 22:25

dulllou兄,我整左個有16個led ge同款玩具,
唔知你有無工具可以將bmp轉做hex code比佢用呢
作者: dulllou    時間: 2009-7-15 22:52

原帖由 Sora 於 2009-7-15 22:25 發表
dulllou兄,我整左個有16個led ge同款玩具,
唔知你有無工具可以將bmp轉做hex code比佢用呢


google 一下, 超級多啊
如呢個 : http://www.freewarepalm.com/utilities/bmp2hex.shtml
作者: minglo04    時間: 2009-7-15 22:54

有無諗過成套野放轉台上面?
我之前都整左個... 想上轉台
不過唔知點搞好
作者: 燕飛    時間: 2009-7-15 22:55

dullou 兄 我諗你個PWM 概念有d 問題
PWM係only 控制Duty cycle
Voltage 都係咁多

[ 本帖最後由 燕飛 於 2009-7-15 22:55 編輯 ]
作者: Sora    時間: 2009-7-15 23:02

原帖由 dulllou 於 2009-7-15 22:52 發表


google 一下, 超級多啊
如呢個 : http://www.freewarepalm.com/utilities/bmp2hex.shtml


其實我有google,只係同想要ge野有出入……
可能要自己寫>0<
但我又未學GUI

作者: dulllou    時間: 2009-7-15 23:17

原帖由 燕飛 於 2009-7-15 22:55 發表
dullou 兄 我諗你個PWM 概念有d 問題
PWM係only 控制Duty cycle
Voltage 都係咁多


我都係講 "平均電壓" o者
不過都多謝提醒~
作者: dulllou    時間: 2009-7-15 23:19

原帖由 minglo04 於 2009-7-15 22:54 發表
有無諗過成套野放轉台上面?
我之前都整左個... 想上轉台
不過唔知點搞好


最難係平衡. 唔平衡的話, 一邊輕一邊重, 轉起上來會好震甚至陷包散
一係就要個轉轉平台重過晒電池+mcu+led+電線 (如裝晌車轆/單車轆上)
作者: minglo04    時間: 2009-7-16 08:17

原帖由 dulllou 於 2009-7-15 23:19 發表


最難係平衡. 唔平衡的話, 一邊輕一邊重, 轉起上來會好震甚至陷包散
一係就要個轉轉平台重過晒電池+mcu+led+電線 (如裝晌車轆/單車轆上)


我兩邊都有LED黎做平衡
加多兩粒 NPN 做控制

最難電池點放
打算放風扇上面
成個平台勁重好難轉





歡迎光臨 電腦領域 HKEPC Hardware (https://www.hkepc.com/forum/) Powered by Discuz! 7.2