W!o+ 的《小伶鼬工坊演義》︰ 一窺全豹之系統設計‧探索‧乙

甲骨文丙

柄

説文解字》:,位方,萬物成炳然。陰气初起,陽气將虧。从一入一者,陽也。丙承乙,象人肩。凡丙之屬皆从丙。

有人說甲骨文 甲骨文丙 『丙』是『柄』的原字,或許源於石器時代。之後用於『天干』,根據維基百科詞條上說︰

天干最晚在夏朝已經開始,明顯的證據是夏朝後期有帝王叫做孔甲 胤甲。但是正式將這十個符號命名為天干應該與地支有關:干為主幹,支為分支,兩個相對的命名應當是一起出現的。在商朝開始出現天干與地支配和用以紀日,使用干支紀年要更晚一些。

關於天干何來說法眾多,其中一種是古人根據事物十個狀態排序以定的,視為循環。其中植物的生長就是一例︰

  1. 甲就是「鎧甲」,指萬物破殼,植物破土萌芽;
  2. 乙就是「軋」,指萬物初出地面,呈彎曲狀;
  3. 丙指就「炳」,指萬物長勢旺盛;
  4. 丁就是「壯」,指萬物的長勢猶處於青春期,成長壯實;
  5. 戊就是「茂」,指萬物生長最茂盛的時期,是為最頂峰;
  6. 己就是「起」,指植物開始屈曲其形;
  7. 庚就是「更」,指植物枯萎衰亡,始入土中,與乙相反;
  8. 辛就是「新」,指萬物更新;
  9. 壬就是「姙」,指陽氣正潛地中,萬物被養育;
  10. 癸就是「揆」,指萬物閉藏於土,萬物萌芽。

現代研究的結論之一是天干源於原始人類以人體部位計數排序,下面列出《說文解字》中的釋義:

  1. 一曰人頭宐為甲,甲象人頭。
  2. 乙承甲,象人頸。
  3. 丙承乙,象人肩。
  4. 丁承丙,象人心。
  5. 戊承丁,象人肋。
  6. 己承戊,象人腹。
  7. 庚承己,象人齋。
  8. 辛承庚,象人股。
  9. 壬承辛,象人脛。脛,任體也。
  10. 癸承壬,象人足。

試想『石』穿了『孔』添了『柄』,就成了『石斧』,從『工具』的『創新』觀點來看,絕非敲擊的『石器』可以比擬!因為不只 是『敲擊力』的增加,而且更『好用』的吧!!或許中國以『農』立國久矣,有著《易經》說卦講的『乾』為『馬』,『坤』為『牛』之天地『做牛做馬』精神,因此喜歡效法『厚德載物』的『蓋亞』 ,產生『反芻消化』之『中道』『文化』的耶??所以『文化』中可以『彼此貫串』的理念就多,還有眾多的『口訣』,比方說︰

宋代朱熹在《周易本義》中寫了一首《八卦取象歌》幫助人記住八卦的卦象:

乾三連(☰),坤六斷(☷);
震仰盂(☳),艮覆碗(☶);
離中虛(☲),坎中滿(☵);
兌上缺(☱),巽下斷(☴)。

就是一種『學習』的小技巧,『記憶』的聯想法,容易朗朗上口。

─── 摘自《《派生》 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 python Python 2.7.9 (default, Mar  8 2015, 00:52:26)  [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import grovepi >>> addr = 0x05 >>> grovepi.debugEnable() >>> potentiometer = 0 >>> grovepi.pinMode(potentiometer,"INPUT") 1 >>> grovepi.analogRead(potentiometer) 0 [11, 2, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 702 >>> ultrasonic_ranger = 2 >>> grovepi.ultrasonicRead(ultrasonic_ranger) 0 [11, 0, 198, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 198 >>> grovepi.read_i2c_block(addr) [11, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] >>> grovepi.read_i2c_block(addr) [11, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] >>> grovepi.read_i2c_block(addr) [11, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] >>> grovepi.read_i2c_block(addr) [11, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] >>> grovepi.read_i2c_block(addr) [11, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] >>> relay=8 >>> grovepi.pinMode(relay,"OUTPUT") 1 >>> grovepi.digitalWrite(relay,1) 1 >>> grovepi.digitalWrite(relay,0) 1 >>> grovepi.ultrasonicRead(ultrasonic_ranger) 0 [11, 0, 198, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 198 >>> led=5 >>> grovepi.pinMode(led,"OUTPUT") 1 >>> grovepi.analogWrite(led,128) 1 >>> grovepi.analogWrite(led,8) 1 >>> grovepi.analogWrite(led,255) 1 >>> power=7 >>> grovepi.pinMode(power,"OUTPUT") 1 >>> grovepi.digitalWrite(power,1) 1 >>> grovepi.digitalWrite(power,0) 1 >>> grovepi.debugDisable() >>> grovepi.ultrasonicRead(ultrasonic_ranger) 0 [0, 0, 198, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 198 >>> grovepi.analogRead(potentiometer) 0 [0, 2, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 701 >>> grovepi.debugEnable() >>> grovepi.analogWrite(led,128) 1 >>> grovepi.analogWrite(led,8) 1 >>> grovepi.analogRead(potentiometer) 0 [11, 2, 190, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 702 >>>  </pre>   <pre class="lang:sh decode:true">pi@raspberrypi ~ 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

#