《説文解字》:丙,位南方,萬物成,炳然。陰气初起,陽气將虧。从一入冂。一者,陽也。丙承乙,象人肩。凡丙之屬皆从丙。
有人說甲骨文 『丙』是『柄』的原字,或許源於石器時代。之後用於『天干』,根據維基百科詞條上說︰
天干最晚在夏朝已經開始,明顯的證據是夏朝後期有帝王叫做孔甲 、胤甲。但是正式將這十個符號命名為天干應該與地支有關:干為主幹,支為分支,兩個相對的命名應當是一起出現的。在商朝開始出現天干與地支配和用以紀日,使用干支紀年要更晚一些。
關於天干何來說法眾多,其中一種是古人根據事物十個狀態排序以定的,視為循環。其中植物的生長就是一例︰
- 甲就是「鎧甲」,指萬物破殼,植物破土萌芽;
- 乙就是「軋」,指萬物初出地面,呈彎曲狀;
- 丙指就「炳」,指萬物長勢旺盛;
- 丁就是「壯」,指萬物的長勢猶處於青春期,成長壯實;
- 戊就是「茂」,指萬物生長最茂盛的時期,是為最頂峰;
- 己就是「起」,指植物開始屈曲其形;
- 庚就是「更」,指植物枯萎衰亡,始入土中,與乙相反;
- 辛就是「新」,指萬物更新;
- 壬就是「姙」,指陽氣正潛地中,萬物被養育;
- 癸就是「揆」,指萬物閉藏於土,萬物萌芽。
現代研究的結論之一是天干源於原始人類以人體部位計數、排序,下面列出《說文解字》中的釋義:
- 一曰人頭宐為甲,甲象人頭。
- 乙承甲,象人頸。
- 丙承乙,象人肩。
- 丁承丙,象人心。
- 戊承丁,象人肋。
- 己承戊,象人腹。
- 庚承己,象人齋。
- 辛承庚,象人股。
- 壬承辛,象人脛。脛,任體也。
- 癸承壬,象人足。
試想『石』穿了『孔』添了『柄』,就成了『石斧』,從『工具』的『創新』觀點來看,絕非敲擊的『石器』可以比擬!因為不只 是『敲擊力』的增加,而且更『好用』的吧!!或許中國以『農』立國久矣,有著《易經》說卦講的『乾』為『馬』,『坤』為『牛』之天地『做牛做馬』精神,因此喜歡效法『厚德載物』的『蓋亞』 ,產生『反芻消化』之『中道』『文化』的耶??所以『文化』中可以『彼此貫串』的理念就多,還有眾多的『口訣』,比方說︰
宋代朱熹在《周易本義》中寫了一首《八卦取象歌》幫助人記住八卦的卦象:
乾三連(☰),坤六斷(☷);
震仰盂(☳),艮覆碗(☶);
離中虛(☲),坎中滿(☵);
兌上缺(☱),巽下斷(☴)。
就是一種『學習』的小技巧,『記憶』的聯想法,容易朗朗上口。
─── 摘自《《派生》 Python 作坊【丙】園林景觀》
既然欲覽 GrovePi 之園林景觀,又已知其韌體
void receiveData(int byteCount)
有『越界』的事實。豈應不先修繕,就隨意斧鑿開墾的耶!因此在繼續探索前, 略作一點『補丁』,同時制定『除錯』啟閉『指令』 ,這也算未來增刪『感測器』時,先將寫程式之章法預演一下。
【 grove_pi_v1_2_5.ino 補丁】
# grove_pi_v1_2_5.ino 第三十三行。 int cmd[5]; int index=0; int flag=0; int i; byte val=0,b[21],float_array[4],dht_b[21]; unsigned char dta[21]; int length; int aRead=0; byte accFlag=0,clkFlag=0; int8_t accv[3]; byte rgb[] = { 0, 0, 0 }; int run_once; # 增加 debug int debug = 0; # 第五百八十九行 else if(cmd[0]==flow_dis_cmd) { flow_run_bk=0; detachInterrupt(0); cmd[0]=0; } # 增加啟閉指令 # 開啟 else if(cmd[0]==254) debug=1; # 關閉 else if(cmd[0]==255) debug=0; } # 第六百五十六行 cmd[index++] = Wire.read(); } # 出 while 迴圈後,檢查 index //cmd buffer index check if(index==5) index=0; # 是否要 debug if(debug==1) { Serial.print("CMD = "); Serial.print(cmd[0]); Serial.print(", "); Serial.print("index = "); Serial.println(index); } # 第六百九十一行 if(cmd[0]==flow_read_cmd) { Wire.write(flow_val,3); flow_val[0]=0; cmd[0]=0; } # 是否要 debug if(debug==1) { Serial.print("DATA = "); Serial.print(b[0]); Serial.print(", "); Serial.print(b[1]); Serial.print(", "); Serial.println(b[2]); } }
【 grovepi.py 補丁】
# 第一百五十二行 flow_read_cmd=[12] flow_disable_cmd=[13] flow_en_cmd=[18] # 增加啟閉 debug 指令 en_debug=[254] dis_debug=[255] # 第五百五十八行 def flowRead(): write_i2c_block(address, flow_read_cmd + [unused, unused, unused]) time.sleep(.2) data_back= bus.read_i2c_block_data(address, 1)[0:3] #print data_back if data_back[0]!=255: return [data_back[0],data_back[2]*256+data_back[1]] else: return [-1,-1] # 增加開啟除錯 def debugEnable(): write_i2c_block(address, en_debug + [unused, unused, unused]) time.sleep(.2) # 增加關閉除錯 def debugDisable(): write_i2c_block(address, dis_debug + [unused, unused, unused]) time.sleep(.2) #
【補丁測試】
※精簡將不再註釋,若有不熟悉者,請閱讀先前文本。
pi@raspberrypi ~/example stty -F /dev/ttyUSB0 115200 pi@raspberrypi ~ $ cat /dev/ttyUSB0 CMD = 5, index = 4 CMD = 3, index = 4 DATA = 0, 2, 190 CMD = 3, index = 0 CMD = 7, index = 4 DATA = 0, 0, 198 CMD = 7, index = 0 CMD = 1, index = 1 CMD = 1, index = 2 CMD = 1, index = 3 CMD = 1, index = 4 CMD = 1, index = 0 CMD = 5, index = 4 CMD = 2, index = 4 CMD = 2, index = 4 CMD = 7, index = 4 DATA = 0, 0, 198 CMD = 7, index = 0 CMD = 5, index = 4 CMD = 4, index = 4 CMD = 4, index = 4 CMD = 4, index = 4 CMD = 5, index = 4 CMD = 2, index = 4 CMD = 2, index = 4 CMD = 255, index = 4 CMD = 4, index = 4 CMD = 4, index = 4 CMD = 3, index = 4 DATA = 0, 2, 190 CMD = 3, index = 0 #