2010-12-03 44 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强调文本
相关问题