Добрый день! Недавно понадобилось сделать на ардуинке небольшой проект, а именно электрофокусер с ик управлением. Так вот, возникла сложность с кодом... (В программирование я пока не очень силен, хотя и пытаюсь активно его учить.) Я хотел бы реализовать работу фокусера таким способом: чтоб я мог просто держать кнопку на пульте, и шаговик не переставая бы крутился, пока я не отпущу кнопку, как это можно сделать? Заранее спасибо) Код (C++): //Stepper with IR remote #include "Stepper.h" #include "IRremote.h" /*----- Variables, Pins -----*/ #define STEPS 32 // Number of steps per revolution of Internal shaft int Steps2Take; // 2048 = 1 Revolution int receiver = 6; // Signal Pin of IR receiver to Arduino Digital Pin 6 /*-----( Declare objects )-----*/ // Setup of proper sequencing for Motor Driver Pins // In1, In2, In3, In4 in the sequence 1-3-2-4 Stepper small_stepper(STEPS, 8, 10, 9, 11); IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' void setup() { irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) // have we received an IR signal? { switch(results.value) { case 0xFF629D: // UP button pressed small_stepper.setSpeed(500); //Max seems to be 700 Steps2Take = 20; // Rotate CW small_stepper.step(Steps2Take); delay(20); break; case 0xFFA857: // DOWN button pressed small_stepper.setSpeed(500); Steps2Take = -20; // Rotate CCW small_stepper.step(Steps2Take); delay(20); break; } irrecv.resume(); // receive the next value } }
Ик первым байтом посылает код кнопки, а потом повтор. Так что организовать режим вращаем, пока нажата кнопка сложно.
Так напиши челу программу. Я уже задолбался сначала писать прогу, а потом объяснять там,что и как. Тем более чел или нулевой, или ленивый, или "очень хитрый".
ТС, особых сложностей нет, да и пультик не глючный - это его нормальная штатная работа. Алгоритм примерно такой. Принимаете правильную рабочую команду и запоминаете ее код в переменной. Отрабатываете. Если кнопку на пульте не отпустить, то он отсылает команду повтора, причем обычно таких команд две и они чередуются между собой дабы приемная сторона поняла, что команда повторяется без ошибок. Поэтому получив на следующем опросе приемника команду повторения (любую из двух) - смотрим в переменную, где запомнили предыдущую рабочую команду и выполняем соответствующий ей код. И еще нужен контроль тайм-аута. Типа если не было никаких команд в течении определенного времени (0.5с например), то запомненная рабочая команда очищается дабы не было сработки на повтор без принятия новой рабочей команды.