2010-12-03 42 views
6

我在想編寫一個程序來自動改變我的自行車的齒輪。它可能需要一個微處理器,所以我腦海中的問題是:是否有任何不同的語言來編程微處理器,或者這可以使用c和C++來完成?我應該使用哪種語言進行自動換檔程序?

另一件事是,關於程序,可以通過switch聲明來完成我的工作,還是需要一個指針或鏈接列表,因爲齒輪可以雙向運行,上下運行?我有點困惑與switch聲明的事情!

+0

的可能重複[如何開始編程微控制器?(http://stackoverflow.com/questions/78744/how-to-start-programming-a-microcontroller) – 2010-12-03 11:36:24

+7

只是騎你的自行車,並開心:) – 2010-12-03 11:36:26

+12

與開關語句混淆,想要創建一個單片機更換自行車齒輪?你的大腦會在很多方面受到傷害... – Yehonatan 2010-12-03 11:45:56

回答

3
  1. 爲原型設計和業餘愛好應用設計的一種解決方案是基於PIC單片機的BASIC Stamp,但包括一個解釋器。它在BASIC中編程而不是C/C++編程,如果這正是您正在尋找的。請記住,那裏的微控制器比您所擁有的「更糟」;他們必須用匯編語言進行編程。

  2. 不需要指針或鏈表,這是很好的,因爲微控制器通常具有嚴格有限的存儲容量。 switch聲明將正常工作;只要記住包括突破語句以避免突破問題。也可以使用位移。是的,Curd的回答有一些道理:

    PORTA = PORTA & ~0x07 | (1 << selected_gear); 
    

    where selectedGear從零開始,你的自行車有三種速度。只需編寫一些代碼來讀取傳感器輸入,並確定自行車應該在的正確檔位。爲此,您可能會使用finite state machine

6

除了是一個非常糟糕的主意和潛在極其危險的「實驗」,試圖編寫您自己的微處理器自動改變你的自行車齒輪,你可能會發現,尋找到一些所謂的Arduino有用。

Arduino是一個「開源硬件」板,可在C,C++或C#編程(取決於你買哪一個)。它通過USB直接插入電腦進行編程。您可以連接幾乎任何你喜歡它 - 電機,伺服系統,傳感器等...

23

你不需要switch語句,只需使用移位運算符:

向上移位:

齒輪< < = 1;

向下移位:

齒輪>> = 1;

8

我可能不會使用指針,鏈接列表或開關來寫它很難。

你需要知道的第一件事是什麼輸入您以及如何獲得它們。
然後,你需要知道什麼輸出您可以發送和如何。

假設你可以閱讀轉速爲C變量,而另一個變量控制齒輪,這應該工作:

while (1) { 
    if (rpm <= 3) chggear(-1); 
    if (rpm >= 7.4) chggear(+1); 
} 

其中函數chggear將改變齒輪和等待的時間,方便量確保在返回到循環之前下一個齒輪已齧合。

int chggear(int direction) { 
    gear += direction; 
    sleep(10); /* wait for gear to engage */ 
    return gear; /* return currently engaged gear */ 
} 

編輯,你也可以直接不管什麼變速箱做更改爲特定的齒輪:

int jumptogear(int geartojump) { 
    gear = geartojump; 
} 

,並使用它像這樣

if (breaking) jumptogear(1); /* and possibly break gearbox */ 
4

這根本不需要任何數據結構(或任何數據)。這是一個有限狀態機。當然,使用簡單的電子設備和沒有電腦就可以簡單得多。

0

@ pgm @ jeremy:這裏是我想到的同樣的問題,在電動自行車中,通常換檔時發生在不同的轉速下,例如當轉速爲5.5時切換到第二檔,當轉速爲3時切換到3是6.2..so這裏就是我想

while(gear==1) //here gear value will deffer// 
{ 
    if(rpm>=5.5)  //**to check if it exceeded the rpm level**// 
    { 
     gear=gear+1;  //**increments the gear value**// 
     sleep(10);  //**PROVIDE TIME FOR CHANGE OF GEAR (it must be done after returning the value)**// 
     return gear;  //**returns value of gear**// 
    } 
    else if(rpm<3)  //**checks the lower level of rpm**// 
    { 
     gear=gear-;  //**decrementing**// 
     sleep(10); 
     eturn gear; 
    } 
    else (rpm>3&&<5.5) //checks whether it is in limit or not// 
    { 
     return gear; 
    } 
} 

這種代碼可以爲不同的齒輪被寫入但在這裏,我很困惑用的東西,我要如何改變機械齒輪提供休息(時間),應在返回齒輪值後完成。

  • 列表項enter code here強調文本
相關問題