我应该用什么语言进行自动换档程序?

时间:2010-12-03 11:30:09

标签: c microcontroller

我正在考虑编写一个自动更换自行车装备的程序。它可能需要一个微处理器,所以我脑子里想到的问题是:编程微处理器有什么不同的语言,还是可以用c和c ++来完成?

另一件事是,关于程序,switch语句是否可以完成我的工作,还是需要指针或链表,因为齿轮可以上下两种方式工作?我对switch陈述事情感到有些困惑!

6 个答案:

答案 0 :(得分:23)

您不需要switch语句,只需使用shift运算符:

向上移动:

  

gear<< = 1;

向下移动:

  

gear>> = 1;

答案 1 :(得分:8)

我可能既不使用指针,也不使用链接列表或开关来写它很难。

你需要知道的第一件事是你有什么输入以及如何获得它们 然后你需要知道你可以发送什么输出以及如何发送。

假设您可以将rpm读作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 */

答案 2 :(得分:6)

除了一个非常糟糕的想法和一个可能非常危险的“实验”试图编程自己的微处理器来自动更换你的自行车上的齿轮,你可能会发现看看Arduino的东西很有用。

Arduino是一个“开源硬件”主板,可以用C,C ++或C#编程(取决于你购买的那个)。它通过USB直接插入您的计算机进行编程。您可以将任何您喜欢的东西连接到它 - 电机,伺服器,传感器等......

答案 3 :(得分:4)

这根本不需要任何数据结构(或任何数据);它是一个有限状态机。当然,使用简单的电子设备和没有计算机会更容易。

答案 4 :(得分:3)

  1. 一种专为原型设计和爱好应用而设计的解决方案是BASIC Stamp,它基于PIC单片机,但包括一个解释器。它是用BASIC而不是C / C ++编程的,如果你正在寻找它。请记住,那里的微控制器比你的微控制器“更差”;它们必须用汇编语言编程。

  2. 不需要指针或链接列表,这很好,因为微控制器通常具有严重受限的内存容量。 switch语句可以正常工作;只记得包含break语句以避免出现问题。也可以使用位移。是的,Curd的回答有一些道理:

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

    其中selectedGear从零开始,你的自行车有三种速度。只需编写一些代码来读取传感器输入并确定自行车应该使用的正确档位。为此,您可能会使用finite state machine

答案 5 :(得分:0)

@ pgm @ jeremy:这就是我认为同样的问题,在摩托车中通常换档在不同的转速下进行不同的档位,例如当转速为5.5时切换到2档,当转速为5.5时切换到3档。 6.2 ..这就是我的想法

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 强调文字