Мультируль SUBARU Помогите с программой для arduino
Добавлено: Ср ноя 30, 2016 10:46:16
Друг попросил подключить его мультируль в субару форестер к китайской магнитоле, я решил с помощью ардуины скопировать кнопки ИК пульта от данной магнитолы и отправлять от руля ИК команды на магнитолу но столкнулся с проблемой создания прошивки для ардуины помогите разобраться что я не так сделал уже неделю голову ломаю вот код программы что у мня получилось
#include <IRremote.h>
IRsend irsend;
// Коды имеющихся на руле кнопок
const int VOL_UP = 1;
const int VOL_DN = 2;
const int PREV_TR = 3;
const int NEXT_TR = 4;
const int MODE = 5;
const int MUTE = 6;
int wheelPin = A5; // аналоговый пин, на котором мы считываем сопротивление нажатой на руле кнопки
int i = 0;
int prevButton = 0;
//Serial.begin(9600);
int getR() { // Эта функция читает сопротивление с кнопок на руле и возвращает код нажатой кнопки, либо 0
// читаем сопротивление (на самом деле напряжение, конечно) на аналоговом пине
int r = analogRead(wheelPin);
// Ищем, какая кнопка соответствует этому сопротивлению.
// Данные значения сопротивлений подходят для Suzuki Swift, для других автомобилей числа будут другие.
if (r >= 9 && r <= 15) return (VOL_UP);
if (r >= 18 && r <= 26) return (VOL_DN);
if (r >= 120 && r <= 156) return (PREV_TR);
if (r >= 60 && r <= 80) return (NEXT_TR);
if (r >= 33 && r <= 47) return (MODE);
if (r >= 2 && r <= 6) return (MUTE);
// если ни одна из кнопок не нажата, возвращаем 0
return (0);
}
void loop()
{
int currButton = getR(); // заносим в переменную currButton код нажатой кнопки
if (currButton != prevButton) { // если значение поменялось с прошлого раза
delay(10);
currButton = getR(); // ждем 10ms и читаем еще раз, чтобы исключить "дребезг" кнопки
if (currButton != prevButton) { // если код кнопки точно поменялся с прошлого раза
//Serial.println(currButton);
prevButton = currButton; // сохраняем новое значение в переменную prevButton
// Выставляем сопротивление на потенциометре, тем самым посылаем команду на магнитолу.
// Значения сопротивлений даны для Pioneer, для магнитол других марок числа будут другие.
switch (currButton) {
case VOL_UP: irsend.sendSony(0xa91, 12); // Sony TV power code
case VOL_DN: irsend.sendSony(0xa92, 12); // Sony TV power code
case PREV_TR: irsend.sendSony(0xa93, 12); // Sony TV power code
case NEXT_TR: irsend.sendSony(0xa94, 12); // Sony TV power code
case MODE: irsend.sendSony(0xa95, 12); // Sony TV power code
case MUTE: irsend.sendSony(0xa96, 12); // Sony TV power code
default: irsend.sendSony(0xa97, 12); // Sony TV power code
}
}
}
delay(5);
}
а вот такую выдаёт ошибку
C:\Users\EGR\AppData\Local\Temp\build8794613471649354437.tmp/core.a(main.cpp.o): In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:40: undefined reference to `setup'
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.
#include <IRremote.h>
IRsend irsend;
// Коды имеющихся на руле кнопок
const int VOL_UP = 1;
const int VOL_DN = 2;
const int PREV_TR = 3;
const int NEXT_TR = 4;
const int MODE = 5;
const int MUTE = 6;
int wheelPin = A5; // аналоговый пин, на котором мы считываем сопротивление нажатой на руле кнопки
int i = 0;
int prevButton = 0;
//Serial.begin(9600);
int getR() { // Эта функция читает сопротивление с кнопок на руле и возвращает код нажатой кнопки, либо 0
// читаем сопротивление (на самом деле напряжение, конечно) на аналоговом пине
int r = analogRead(wheelPin);
// Ищем, какая кнопка соответствует этому сопротивлению.
// Данные значения сопротивлений подходят для Suzuki Swift, для других автомобилей числа будут другие.
if (r >= 9 && r <= 15) return (VOL_UP);
if (r >= 18 && r <= 26) return (VOL_DN);
if (r >= 120 && r <= 156) return (PREV_TR);
if (r >= 60 && r <= 80) return (NEXT_TR);
if (r >= 33 && r <= 47) return (MODE);
if (r >= 2 && r <= 6) return (MUTE);
// если ни одна из кнопок не нажата, возвращаем 0
return (0);
}
void loop()
{
int currButton = getR(); // заносим в переменную currButton код нажатой кнопки
if (currButton != prevButton) { // если значение поменялось с прошлого раза
delay(10);
currButton = getR(); // ждем 10ms и читаем еще раз, чтобы исключить "дребезг" кнопки
if (currButton != prevButton) { // если код кнопки точно поменялся с прошлого раза
//Serial.println(currButton);
prevButton = currButton; // сохраняем новое значение в переменную prevButton
// Выставляем сопротивление на потенциометре, тем самым посылаем команду на магнитолу.
// Значения сопротивлений даны для Pioneer, для магнитол других марок числа будут другие.
switch (currButton) {
case VOL_UP: irsend.sendSony(0xa91, 12); // Sony TV power code
case VOL_DN: irsend.sendSony(0xa92, 12); // Sony TV power code
case PREV_TR: irsend.sendSony(0xa93, 12); // Sony TV power code
case NEXT_TR: irsend.sendSony(0xa94, 12); // Sony TV power code
case MODE: irsend.sendSony(0xa95, 12); // Sony TV power code
case MUTE: irsend.sendSony(0xa96, 12); // Sony TV power code
default: irsend.sendSony(0xa97, 12); // Sony TV power code
}
}
}
delay(5);
}
а вот такую выдаёт ошибку
C:\Users\EGR\AppData\Local\Temp\build8794613471649354437.tmp/core.a(main.cpp.o): In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:40: undefined reference to `setup'
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.