Помоги пожалуйста справиться с проблемой . Как должна выглядеть программа для того чтобы при нажатии(удержание) кнопки ,серва поворачивалась , а когда кнопку отпускали серва останавливалась . и так же в обраную сторону ,но уже с использованием другой кнопки . У меня в программе получаеться , что при нажати на кнопку серва поворачиваеться на определенный градус и все . Код (Text): #include <Servo.h> #include <IRremote.h> unsigned long Value1 = 0xECE16110; unsigned long Value2 = 0xB8FBED4A; unsigned long Value3 = 0x32D390AC; unsigned long Value4 = 0x13D1970; unsigned long Value5 = 0x7EBDC4EA; unsigned long Value6 = 0x37E8B354; int RECV_PIN = 11; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; Servo sg90; Servo mg995_1; Servo mg995_2; int pos = 0; int var = 0; void setup() { irrecv.enableIRIn(); // включить приемник sg90.attach(3); // серво подключён на цифровой вход pin 10 mg995_1.attach(4); mg995_2.attach(5); } void loop() { if (irrecv.decode(&results)) { irrecv.resume(); } //для 1 сервы if(results.value == Value1){ sg90.attach(5); } else if(results.value == Value4){ sg90.write(5); //for(pos =180; pos>=1; pos-=1) } // { // sg90.write(pos); // delay(15); // } //для сервы 2 else if(results.value == Value2){ mg995_1.attach(10); } else if(results.value == Value5){ mg995_1.write(80); } //для сервы 3 else if(results.value == Value3){ mg995_2.attach(70); } else if(results.value == Value6){ mg995_2.write(160); } }while (var < 100); }
Код (Text): #include <Servo.h> #include <IRremote.h> typedef long int ir_cmd_t; const ir_cmd_t CMD_TURN_S1_LEFT = 0xECE16110; const ir_cmd_t CMD_TURN_S1_RIGHT = 0xB8FBED4A; const ir_cmd_t CMD_TURN_S2_LEFT = 0x32D390AC; const ir_cmd_t CMD_TURN_S2_RIGHT = 0x013D1970; const ir_cmd_t CMD_TURN_S3_LEFT = 0x7EBDC4EA; const ir_cmd_t CMD_TURN_S3_RIGHT = 0x37E8B354; const int PIN_IR_RECV = 11; //вход ИК приемника const int MIN_ANGLE = 0; const int MAX_ANGLE = 180; const int DEFAULT_ANGLE = 90; const int CTL_POLL_DELAY = 100; IRrecv irrecv(RECV_PIN); decode_results results; Servo sg90; Servo mg995_1; Servo mg995_2; int srv_pos_1 = 90; int srv_pos_1 = 90; int srv_pos_1 = 90; bool state_changed = false; void setup() { irrecv.enableIRIn(); // включить приемник sg90.attach(3); // серво подключён на цифровой вход pin 10 mg995_1.attach(4); mg995_2.attach(5); } void loop() { if (irrecv.decode(&results)) irrecv.resume(); else { delay(CTL_POLL_DELAY); return; } switch (results.value) { case CMD_TURN_S1_LEFT: { if (srv_pos_1 > MIN_ANGLE) srv_pos_1--; state_changed = true; break; } case CMD_TURN_S1_RIGHT: { if (srv_pos_1 < MAX_ANGLE) srv_pos_1++; state_changed = true; break; } case CMD_TURN_S2_LEFT: { if (srv_pos_2 > MIN_ANGLE) srv_pos_2--; state_changed = true; break; } case CMD_TURN_S2_RIGHT: { if (srv_pos_2 < MAX_ANGLE) srv_pos_2++; state_changed = true; break; } case CMD_TURN_S3_LEFT: { if (srv_pos_3 > MIN_ANGLE) srv_pos_3--; state_changed = true; break; } case CMD_TURN_S3_RIGHT: { if (srv_pos_3 < MAX_ANGLE) srv_pos_3++; state_changed = true; break; } } if (state_changed) { sg90.write(srv_pos_1); mg995_1.write(srv_pos_2); mg995_2.write(srv_pos_3) } delay(CTL_POLL_DELAY); }