Robofun 機器人論壇

標題: 請問程式該如何寫才對呢? [打印本頁]

作者: vurilate    時間: 2013-12-15 19:11
標題: 請問程式該如何寫才對呢?
板上各位好:  我剛接觸程式不算久,遇到一點問題,不知該如何寫才對?
                 麻煩懂程式的前輩們指點, 謝謝

我有一個500個點的序列(data_serial),只有高電位(500)和低電位(1),
time 1 是第一次低電位變高電位的時間點,
time 2 是第二次低電位變高電位的時間點(如下圖)

  time 1 =>   _____      time 2 =>  ______
                   |        |                      |         |
                   |        |                      |         |                  ..........
                   |        |                      |         |
__________ |        |____________|         |__________

     for(i=0;i<500;i++) {
       data_serial[i] = data_serial[i+1]-data_serial[i];
       if(data_serial[i]==499) {
           time 1= millis();            
       }
     }
  上面是我的程式,我要同時抓出來兩個時間點算長度
  我可以抓出time 1的時間點,
  但time 2的時間點不知該如何寫才對??   
  我知道問題很基本但是真的想了好久不知該寫?
加在同一個迴圈裡,time 1跟time 2的值會一樣                  

               希望各位專家達人同好們 可以指點我一下  謝謝
作者: mzw2008    時間: 2013-12-15 23:44
改這樣
    int  p=1;
     for(i=0;i<500;i++) {
       data_serial[i] = data_serial[i+1]-data_serial[i];
       if(data_serial[i]==499) {
         if (p==1)
             {  time 1= millis();   p=2;}
         else if (p==2)
           { time 2= millis(); break;}
       }
     }
作者: omegaCD    時間: 2013-12-16 08:12
板上各位好:  我剛接觸程式不算久,遇到一點問題,不知該如何寫才對?
                 麻煩懂程式的前輩們指 ...  time 1 =>   _____      time 2 =>  ______
                   |        |                      |         |
                   |        |                      |         |                  ..........
                   |        |                      |         |
__________ |        |____________|         |__________

     for(i=0;i<500;i++) {
       data_serial = data_serial[i+1]-data_serial;
       if(data_serial==499) {
           time 1= millis();            
       }
     }
vurilate 發表於 2013-12-15 19:11


i的範圍跑到後面似乎會超過喔,for下面第一段data_serial = data_serial[i+1]-data_serial; 的上面到for的}的上面需要加判斷式: if(i<499){...}
作者: vurilate    時間: 2013-12-16 09:26
回復 2# mzw2008


    非常感謝~  程式寫法讓我獲益不少    謝謝
作者: vurilate    時間: 2013-12-16 09:27
i的範圍跑到後面似乎會超過喔,for下面第一段data_serial = data_serial-data_serial; 的上面到for的}的 ...
omegaCD 發表於 2013-12-16 08:12



    謝謝  我會注意的  我在仔細檢查一下   謝謝提醒
作者: mzw2008    時間: 2013-12-16 12:57
最後一個怕會超過陣列邊界的問題
可以考慮改
for(i=0;i<500;i++)  >> for(i=0;i<499;i++)

這樣寫有個問題, 就是剛好第500個變HIGH
作者: omegaCD    時間: 2013-12-16 23:10
i=499的Special Case看是要寫再迴圈內還是外...如果有需要的話還是建議LOOP到結束...0 0
作者: HelloEdward    時間: 2013-12-18 23:00
沒有標準時鐘機解這問題還真棘手
建議您用TMR中斷做一時鐘吧!
分別記錄兩個狀態變化的時間值
再將兩個時間值相減即可




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2