Управление скоростью коллекторного двигателя с помощью ИК пульта
- Войдите на сайт для отправки комментариев
Втр, 29/03/2016 - 20:10
Доброго времени всем!
Есть задача, регулировать пультом скорость коллекторного двигателя. Сам пока только познаю азы в понятиях Ардуино. Нашел в нете подходящий по-помему мнению скетч, с регулировкой светодиода, но при компиляции он выдает ошибку в строке 46. Подскажите, господа разбирающиеся, что здесь неправильно?
Заранее благодарен!
/* * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv * An IR detector/demodulator must be connected to the input RECV_PIN. * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff * http://arcfn.com */ #include <IRremote.h> int RECV_PIN = 11; int vall;//код кнопки int pin1;//яркость светодиода IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); pinMode(3, OUTPUT); vall=0; } void loop() { irrecv.enableIRIn(); if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value!=4294967295) { vall=results.value; } if (vall==-28561){ pin1=pin1+20; if (pin1>255){pin1=255;} } if (vall==-22441){ pin1=pin1-20; if (pin1<0){pin1=0;} Serial.print(pin1); } analogWrite(3,pinl) irrecv.resume(); // Receive the next value } }
Нет точки с запятой ;
Да, это не заметил, но увы - не полегчало. Выдает вот такую ошибку:
sketch_mar29e:46: error: 'pinl' was not declared in this scope
exit status 1
'pinl' was not declared in this scope
Нашел еще один скетч, он нормально заливается в плату, но ничего не работает. (коды пульта изменены на мои):
#include <IRremote.h> int RECEIVE_PIN = 2; int brightness = 0; int LED = 11; IRrecv irrecv(RECEIVE_PIN); decode_results results; void setup() { // Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0x1FF28D7: if(brightness < 255) { brightness+=15; Serial.println(brightness); } break; case 0x1FFE817: if(brightness > 0) { brightness-=15; Serial.println(brightness); } break; } analogWrite(LED, brightness); irrecv.resume(); } }Какой из них предпочтительнее и легче привести в рабочее состояние?
Потому что в строке 13 написано pin1, а в строке 46 написано pinl. Разницу видите?
Спасибо, уже увидел! А по второму скетчу навскидку ничего не видно проблематичного?
В первом: int RECV_PIN = 11;
Во втором: int RECEIVE_PIN = 2;
К какой ноге реально подключен датчик?
Датчик пульта перевешивал на нужную ногу. Скорее всего где-то контакта не было. Сейчас заработали оба скетча, первый оказался немного не такой как надо - регулировка одной кнопкой по кругу минимум-максимум. Во второй добавляю регулировку второго двидателя - опять какая-то засада.... Знаний мало, а хочется сделать что-то сразу. Вот переделанный скетч, посмотрите, ПОЖАЛУЙСТА, что я не так наковырял?
#include <IRremote.h> int RECEIVE_PIN = 2; // Вход приемника int brightness = 0; int LED_V = 9; // Выход верхнего мотора int LED_N = 10; // Выход нижнего мотора IRrecv irrecv(RECEIVE_PIN); decode_results results; void setup() { // Serial.begin(9600); irrecv.enableIRIn(); } void loop() { // Регулировка верхнего мотора if (irrecv.decode(&results)) { switch (results.value) { case 0x1FF807F: if(brightness < 255) { brightness+=20; Serial.println(brightness); } break; case 0x1FF20DF: if(brightness > 0) { brightness-=20; Serial.println(brightness); } break; } analogWrite(LED_V, brightness); irrecv.resume(); } // Регулировка нижнего мотора if (irrecv.decode(&results)) { switch (results.value) { case 0x1FFA05F: if(brightness < 255) { brightness+=20; Serial.println(brightness); } break; case 0x1FF7887: if(brightness > 0) { brightness-=20; Serial.println(brightness); } break; } analogWrite(LED_N, brightness); irrecv.resume(); } }А где в
voidsetup()pinMode(LED_V, OUTPUT);
pinMode(LED_N, OUTPUT);
?
В скетче для одного мотора этой строки не было, но работало. Добавил - не помогло. Нажимаешь на кнопку верхнего, загораются светодиоды сразу на обоих выходах, и дальше не регулируются никуда.
#include <IRremote.h> int RECEIVE_PIN = 2; // Вход приемника int brightness = 0; int LED_V = 9; // Выход верхнего мотора int LED_N = 10; // Выход нижнего мотора IRrecv irrecv(RECEIVE_PIN); decode_results results; void setup() { // Serial.begin(9600); irrecv.enableIRIn(); pinMode(LED_V, OUTPUT); pinMode(LED_N, OUTPUT); } void loop() { // Регулировка верхнего мотора if (irrecv.decode(&results)) { switch (results.value) { case 0x1FF807F: if(brightness < 255) { brightness+=20; Serial.println(brightness); } break; case 0x1FF20DF: if(brightness > 0) { brightness-=20; Serial.println(brightness); } break; } analogWrite(LED_V, brightness); irrecv.resume(); } // Регулировка нижнего мотора if (irrecv.decode(&results)) { switch (results.value) { case 0x1FFA05F: if(brightness < 255) { brightness+=20; Serial.println(brightness); } break; case 0x1FF7887: if(brightness > 0) { brightness-=20; Serial.println(brightness); } break; } analogWrite(LED_N, brightness); irrecv.resume(); } }Пробуй так, только коды пульта свои поставь.
#include <IRremote.h> int RECEIVE_PIN = 2; // Вход приемника int brightness1 = 0; int brightness2 = 0; int LED_V = 9; // Выход верхнего мотора int LED_N = 10; // Выход нижнего мотора IRrecv irrecv(RECEIVE_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(LED_V, OUTPUT); pinMode(LED_N, OUTPUT); } void loop() { // Регулировка верхнего мотора if (irrecv.decode(&results)) { switch (results.value) { case 0x90: if(brightness1 < 255) { brightness1+=20; Serial.println(brightness1); } break; case 0x890: if(brightness1 > 0) { brightness1-=20; Serial.println(brightness1); } break; } analogWrite(LED_V, brightness1); irrecv.resume(); } // Регулировка нижнего мотора if (irrecv.decode(&results)) { switch (results.value) { case 0x490: if(brightness2 < 255) { brightness2+=20; Serial.println(brightness2); } break; case 0xC90: if(brightness2 > 0) { brightness2-=20; Serial.println(brightness2); } break; } analogWrite(LED_N, brightness2); irrecv.resume(); } }Попробовал, ничего не изменилось... Сейчас нашел опечатку в кодировке нижнего мотора, теперь светодиоды загораются (одновременно) и от кнопки верхнего, и от нижнего мотора