Новичек, не могу разобраться и сервами и ИК пультом
- Войдите на сайт для отправки комментариев
Новичек!
Решил освоить управление сервами через ИК пульт. По отдельности скетчи 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
Укажите где я ошибся!
И еще. если можно, то как перед управлением пультом поставить серву поставить в центральное положение?
Скобочек маловато.
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). В зависимости от того, что имеется в виду.
Спасибо! Заработало! Сейчс проверю что получилось.
Серва сразу провернулась и зависла! надо вторую кнопку писать!