Новичек, не могу разобраться и сервами и ИК пультом

uuuux
Offline
Зарегистрирован: 27.01.2015

Новичек!

Решил освоить управление сервами через ИК пульт. По отдельности скетчи IRremote и Servo компилируются и грузятся.  Но при попытке их совместить возникает вот такая ошибка

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows XP), Board: "Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328"
servo_ir:3: error: 'RECV_PIN' was not declared in this scope
servo_ir:5: error: redefinition of 'IRrecv irrecv'
servo_ir:3: error: 'IRrecv irrecv' previously declared here

 Решил проблему меняя место положения фразы IRrecv irrecv(RECV_PIN);. Но, все равно не понятно почему так происходит!

В ходе мучений получился вот такой скетч

 

#include <IRremote.h>
#include <Servo.h>

int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определнного порта
decode_results results; //Переменная, хранящая результат

int red = 13; //Создал светодиод
Servo s_1;   // Создал серву
int pos = 90; //Переменная для хранения сервомашинки
int a =0; //переменная
int val_1;//переменная

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Начинаем прием
  pinMode(red, OUTPUT); // пин работает на выход
  s_1.attach(9); // включил серву
}

void loop() {
  val_1 = a;
  val_1 = map(val_1, 0, 30000, 10, 170); //масштабировать его для использования с сервоприводом (val_1ue между 10 и 170)
  s_1.write(val_1); // установить серву в val
  if (irrecv.decode(&results)) // если получил сигнал
  {
    Serial.println(results.value); //…выводим его значение в последовательный порт
   if (results.value == 0x20DF8877){a=a+1;}// если код 20DF8877 к переменной добавляю 1 значение
   if (a==1)&&(a<=170){s_1.write(val_1); digitalWrite(13, HIGH); delay(15); digitalWrite(13, LOW);}
      //если переменная <180, то серву устанавливаю в позицию +1, светодиод включаю, жду 15мс, светодиод выключаю.
   
    irrecv.resume(); // Получаем следующее значение
  }
}

В итоге выходит ошибка

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows XP), Board: "Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328"
servo_ir.ino: In function 'void loop()':
servo_ir:33: error: expected identifier before '(' token
servo_ir:33: error: expected `;' before '(' token

 

Укажите где я ошибся!

И еще. если можно, то как перед управлением пультом поставить серву поставить в центральное положение?

Araris
Offline
Зарегистрирован: 09.11.2012

Скобочек маловато.

  if ( (a==1)&&(a<=170) ) {s_1.write(val_1); digitalWrite(13, HIGH); delay(15); digitalWrite(13, LOW);}

Странное условие, вместо (a==1)&&(a<=170), кстати, достаточно просто (a==1), либо (a<=170). В зависимости от того, что имеется в виду.

uuuux
Offline
Зарегистрирован: 27.01.2015

Спасибо! Заработало! Сейчс проверю что получилось. 

Серва сразу провернулась и зависла! надо вторую кнопку писать!