Управление скоростью коллекторного двигателя с помощью ИК пульта

blik
Offline
Зарегистрирован: 07.02.2016

Доброго времени всем!

Есть задача, регулировать пультом скорость коллекторного двигателя. Сам пока только познаю азы в понятиях Ардуино. Нашел в нете подходящий по-помему мнению скетч, с регулировкой светодиода, но при компиляции он выдает ошибку в строке 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
}

}

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Нет точки с запятой ;

blik
Offline
Зарегистрирован: 07.02.2016

Да, это не заметил, но увы - не полегчало.  Выдает вот такую ошибку:

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

Какой из них предпочтительнее и легче привести в рабочее состояние?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Потому что в строке 13 написано pin1, а в строке 46 написано pinl. Разницу видите?

blik
Offline
Зарегистрирован: 07.02.2016

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

 

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

В первом: int RECV_PIN = 11;

Во втором: int RECEIVE_PIN = 2;

К какой ноге реально подключен датчик?

blik
Offline
Зарегистрирован: 07.02.2016

Датчик пульта перевешивал на нужную ногу. Скорее всего где-то контакта не было. Сейчас заработали оба скетча, первый оказался немного не такой как надо - регулировка одной кнопкой по кругу минимум-максимум. Во второй добавляю регулировку второго двидателя - опять какая-то засада.... Знаний мало, а хочется сделать что-то сразу. Вот переделанный скетч, посмотрите, ПОЖАЛУЙСТА, что я не так наковырял?

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

 

Raptirius
Offline
Зарегистрирован: 20.03.2016

А где в 

void setup()

pinMode(LED_V, OUTPUT);

pinMode(LED_N, OUTPUT);

?

blik
Offline
Зарегистрирован: 07.02.2016

В скетче для одного мотора этой строки не было, но работало. Добавил - не помогло. Нажимаешь на кнопку верхнего, загораются светодиоды сразу на обоих выходах, и дальше не регулируются никуда.

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

 

Raptirius
Offline
Зарегистрирован: 20.03.2016

Пробуй так, только коды пульта свои поставь.

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

 

blik
Offline
Зарегистрирован: 07.02.2016

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