我在想編寫一個程序來自動改變我的自行車的齒輪。它可能需要一個微處理器,所以我腦海中的問題是:是否有任何不同的語言來編程微處理器,或者這可以使用c和C++來完成?我應該使用哪種語言進行自動換檔程序?
另一件事是,關於程序,可以通過switch
聲明來完成我的工作,還是需要一個指針或鏈接列表,因爲齒輪可以雙向運行,上下運行?我有點困惑與switch
聲明的事情!
我在想編寫一個程序來自動改變我的自行車的齒輪。它可能需要一個微處理器,所以我腦海中的問題是:是否有任何不同的語言來編程微處理器,或者這可以使用c和C++來完成?我應該使用哪種語言進行自動換檔程序?
另一件事是,關於程序,可以通過switch
聲明來完成我的工作,還是需要一個指針或鏈接列表,因爲齒輪可以雙向運行,上下運行?我有點困惑與switch
聲明的事情!
爲原型設計和業餘愛好應用設計的一種解決方案是基於PIC單片機的BASIC Stamp,但包括一個解釋器。它在BASIC中編程而不是C/C++編程,如果這正是您正在尋找的。請記住,那裏的是微控制器比您所擁有的「更糟」;他們必須用匯編語言進行編程。
不需要指針或鏈表,這是很好的,因爲微控制器通常具有嚴格有限的存儲容量。 switch
聲明將正常工作;只要記住包括突破語句以避免突破問題。也可以使用位移。是的,Curd的回答有一些道理:
PORTA = PORTA & ~0x07 | (1 << selected_gear);
where selectedGear從零開始,你的自行車有三種速度。只需編寫一些代碼來讀取傳感器輸入,並確定自行車應該在的正確檔位。爲此,您可能會使用finite state machine。
除了是一個非常糟糕的主意和潛在極其危險的「實驗」,試圖編寫您自己的微處理器自動改變你的自行車齒輪,你可能會發現,尋找到一些所謂的Arduino有用。
Arduino是一個「開源硬件」板,可在C,C++或C#編程(取決於你買哪一個)。它通過USB直接插入電腦進行編程。您可以連接幾乎任何你喜歡它 - 電機,伺服系統,傳感器等...
你不需要switch語句,只需使用移位運算符:
向上移位:
齒輪< < = 1;
向下移位:
齒輪>> = 1;
我可能不會使用指針,鏈接列表或開關來寫它很難。
你需要知道的第一件事是什麼輸入您以及如何獲得它們。
然後,你需要知道什麼輸出您可以發送和如何。
假設你可以閱讀轉速爲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 */
這根本不需要任何數據結構(或任何數據)。這是一個有限狀態機。當然,使用簡單的電子設備和沒有電腦就可以簡單得多。
@ 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
強調文本
的可能重複[如何開始編程微控制器?(http://stackoverflow.com/questions/78744/how-to-start-programming-a-microcontroller) – 2010-12-03 11:36:24
只是騎你的自行車,並開心:) – 2010-12-03 11:36:26
與開關語句混淆,想要創建一個單片機更換自行車齒輪?你的大腦會在很多方面受到傷害... – Yehonatan 2010-12-03 11:45:56