Какой язык мне использовать для программы автоматического переключения передач? - PullRequest
6 голосов
/ 03 декабря 2010

Я думал о написании программы для автоматического переключения передач моего велосипеда. Для этого может потребоваться микропроцессор, поэтому у меня возник вопрос: есть ли другой язык для программирования микропроцессора или это можно сделать с помощью c и c ++?

Еще одна вещь, касающаяся программы, может ли оператор switch выполнять мою работу или мне нужен указатель или связанный список, потому что механизм работает в обоих направлениях, вверх и вниз? Я был немного смущен с switch заявлением вещь!

Ответы [ 6 ]

23 голосов
/ 03 декабря 2010

Вам не нужен оператор switch, просто используйте оператор shift:

Shift up:

gear << = 1; </p>

Переключение вниз:

передача >> = 1;

8 голосов
/ 03 декабря 2010

Я бы, вероятно, не использовал ни указатель, ни список ссылок, ни переключатель, чтобы написать это жестко.

Первое, что вам нужно знать, это то, что у вас есть и как их получить.
Тогда вам нужно знать, какие выводы вы можете отправить и как.

Предположим, что вы можете считать обороты как переменную 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 */
6 голосов
/ 03 декабря 2010

Кроме того, что вы действительно плохая идея и потенциально чрезвычайно опасный «эксперимент» по попытке запрограммировать свой собственный микропроцессор на автоматическое переключение передач на своем байке, вам может оказаться полезным взглянуть на что-то под названием Arduino.

Arduino - это аппаратная плата с «открытым исходным кодом», которая может быть запрограммирована на C, C ++ или C # (в зависимости от того, какую вы покупаете).Он подключается непосредственно к вашему компьютеру через USB для программирования.Вы можете подключить к нему практически все, что угодно - двигатели, сервоприводы, датчики и т. Д. *

4 голосов
/ 03 декабря 2010

Для этого вообще не нужны никакие структуры данных (или какие-либо данные);это конечный автомат.Конечно, это было бы намного проще сделать с простой электроникой и без компьютера.

3 голосов
/ 03 декабря 2010
  1. Одним из решений, разработанных для создания прототипов и хобби, является BASIC Stamp, основанный на микроконтроллере PIC, но с переводчиком.Он запрограммирован на BASIC, а не на C / C ++, если это то, что вы ищете.Имейте в виду, что являются микроконтроллерами, которые "хуже", чем тот, который у вас есть;они должны быть запрограммированы на языке ассемблера.

  2. Указатели или связанные списки не требуются, что хорошо, поскольку микроконтроллеры обычно имеют сильно ограниченный объем памяти.Оператор switch будет работать нормально;просто не забудьте включить операторы break, чтобы избежать проблем с ошибками.Также возможно использовать сдвиг битов.Да, в ответе Творда есть доля правды:

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

    , где selectedGear начинается с нуля, а ваш велосипед имеет три скорости.Просто напишите некоторый код, чтобы прочитать входные данные датчика и определить правильную передачу, на которой должен быть велосипед. Для этого вы, вероятно, использовали бы конечный автомат .

0 голосов
/ 03 декабря 2010

@ pgm @ jeremy: вот что я думал об одном и том же вопросе: в мотоциклах переключение передач обычно происходит при разных оборотах для разных передач, например, переключается на 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 выделенный текст
...