Поворот сервы

mantana977
Offline
Зарегистрирован: 24.01.2014

Помоги пожалуйста справиться с проблемой . Как должна выглядеть программа для того чтобы при нажатии(удержание) кнопки ,серва поворачивалась , а когда кнопку отпускали серва останавливалась . и так же в обраную сторону ,но уже с использованием другой кнопки . У меня в программе получаеться , что при нажати на кнопку серва поворачиваеться на определенный градус и все .

#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);  
} 

 

maksim
Offline
Зарегистрирован: 12.02.2012
#include <Servo.h>
#include <IRremote.h> 

#define RECV_PIN 11 //вход ИК приемника

IRrecv irrecv(RECV_PIN);
decode_results results;

unsigned long Value1 = 0xECE16110;
unsigned long Value2 = 0xB8FBED4A; 

Servo sg90;
int sg90pos = 0;

void setup() 
{
  irrecv.enableIRIn(); // включить приемник
  sg90.attach(3);
}

void loop() 
{
  if (irrecv.decode(&results)) 
  {
    if(results.value == Value1) sg90pos++;
    else if(results.value == Value2) sg90pos--;
    
    sg90pos = constrain(sg90pos, 0, 180);
    sg90.write(sg90pos);
    delay(20);
    
    irrecv.resume();
  }
}

 

mantana977
Offline
Зарегистрирован: 24.01.2014

Спасибо , но программа работает только при многократном нажатии а не на удержание кнопки , и серва поворачиваетьсяочень медленно

Клапауций
Offline
Зарегистрирован: 10.02.2013

mantana977 пишет:

Спасибо , но программа работает только при многократном нажатии а не на удержание кнопки , и серва поворачиваетьсяочень медленно

Максим, прекращай новичкам помогать.

maksim
Offline
Зарегистрирован: 12.02.2012

Значит ваш пульт при удержании кнопки выдает отличный код от первоначального.

mantana977
Offline
Зарегистрирован: 24.01.2014

Точно! Спасибо большое