Едновременно изпълнение на код

Коментари ( 15 )

проста държавна машина + система за съобщения + таймер.

и въпроса е малко странен, защото при работещи двигатели процесора не е зает с нищо - нищо не му пречи да дава команди на серво, да разпитва далекомери и т.н.

вероятно злоупотребявате с функцията за забавяне - не си струва, по-добре е да свържете всички събития към брояч на време и да съхранявате текущото състояние на двигатели, серво и други периферни устройства поне в отделни променливи.

void loop() move_forward(); закъснение (1000); move_right() закъснение(1000); move_backward() закъснение (1000); стоп(); >

пишете поне така #define STOP 0 #define FORWARD 1 #define LEFT 2 #define RIGHT 3 #define BACKWARD 4 int STATE = STOP; void loop() if ( 0 == STATE && millis() > 0 ) move_forward(); СЪСТОЯНИЕ = НАПРЕД; > if ( FORWARD == STATE && millis() > 1000 ) move_left(); СЪСТОЯНИЕ = НАЛЯВО; > if ( LEFT == STATE && millis() > 2000 ) move_backward(); СЪСТОЯНИЕ = НАЗАД; > if ( BACKWARD == STATE && millis() > 3000 ) stop(); СЪСТОЯНИЕ = СПРИ; > >

Погрешно сте посъветвани да използвате millis(). Стойността винаги само ще се увеличава, което означава, че в този пример, след последното сравнение (millis() > 3000) е извършено, винаги ще бъде millis() > 3000.

За да използвате таймера, трябва да декларирате променливи от тип long, да речем long proshloevremy;//Тези две променливи дефинират времето long tekusheevremy;//За да бъдем по-точни, разликата между тях int ZNACHENIEms=3000;//Това е стойността, с която да сравните

tekusheevremy=millis();//присвояване на изминалото време към текущата времева променлива if (НАЗАД == STATE && (tekusheevremy-proshloevremy)>ZNACHENIEms) proshloevremy=tekusheevremy;//това, което е било текущо, сега е в миналото //необходимите команди се изпълняват след stop(); СЪСТОЯНИЕ = СПРИ; >

Въпреки че не виждам нужда от таймер или забавяне. Не знам какъв вид далекомер, да кажем най-примитивния детектор на препятствия на LED + фотодиод (отражението удари фотодиода - има препятствие, стойността е ВИСОКА) Можете да приложите нещо подобно: