我在想编写一个程序来自动改变我的自行车的齿轮。它可能需要一个微处理器,所以我脑海中的问题是:是否有任何不同的语言来编程微处理器,或者这可以使用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