2015-10-05 1 views
0

У меня есть экран BLE + Arduino UNO, который подключен и работает с моим устройством IOS. Все, что я хочу сделать, это показать состояние подключенного экрана с помощью светодиода RGB.RGB LED не работает при чтении с помощью экрана BLE

Я использую следующий код, но каким-то образом, даже когда функции вызываются, я не вижу изменений цвета.

int redPin = 13; 
int greenPin = 12; 
int bluePin = 11; 
void setup() 
{ 
    pinMode(redPin, OUTPUT); 
    pinMode(greenPin, OUTPUT); 
    pinMode(bluePin, OUTPUT); 

    // Init. and start BLE library. 
    ble_begin(); 

    // Enable serial debug 
    Serial.begin(57600); 
} 

void loop() 
{ 

    Serial.println("Inside loop"); 
    if (ble_connected()) 
    { 
     setColor(200, 200, 200); 
     int sensorValue = analogRead(A0); 
     //Some code to write stuffs 
    } 



    ble_do_events(); 
delay(2000); 
} 

void setColor(int red, int green, int blue) 
{ 
    #ifdef COMMON_ANODE 
    red = 255 - red; 
    green = 255 - green; 
    blue = 255 - blue; 
    #endif 
    Serial.println("Inside setcolor"); 
    analogWrite(redPin, red); 
    analogWrite(greenPin, green); 
    analogWrite(bluePin, blue); 
} 

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

int redPin = 13; 
int greenPin = 12; 
int bluePin = 11; 

void setup() 
{ 
pinMode(redPin, OUTPUT); 
    pinMode(greenPin, OUTPUT); 
    pinMode(bluePin, OUTPUT); 
} 

void loop() 
{ 
setColor(20, 20, 20); 
delay(2000); 
} 

void setColor(int red, int green, int blue) 
{ 
    #ifdef COMMON_ANODE 
    red = 255 - red; 
    green = 255 - green; 
    blue = 255 - blue; 
    #endif 
    analogWrite(redPin, red); 
    analogWrite(greenPin, green); 
    analogWrite(bluePin, blue); 
} 

В чем причина? Нужно ли что-то делать с AnalogRead и AnalogWrite? TIA

+0

Является ли 'delay (2000)' правильным? Разве это не слишком много? Для такого рода задержек я бы подражал подходу «blink without delay example» (используя 'millis') ... И возвращает ли' ble_connected' true? Вы можете проверить это с помощью некоторого 'Serial.println' и проверить, где он висит – frarugi87

+0

Вышеприведенный код выполняется, даже функция setColor вызывается. Аналоговые входы также показывают данные. Все работает, за исключением того, что огни не будут светиться. Свет будет светиться на 2-й функции. Заставляет меня думать в arduino, могу ли я сделать analogRead и писать вместе или есть ограничение? –

+0

Хорошо, я тестировал его в симуляторе, и есть хотя бы одна проблема: контакты 12 и 13 НЕ МОГУТ использовать PWM. Как указано на [этой странице] (https://www.arduino.cc/en/Reference/AnalogWrite) «На большинстве плат Arduino (с ATmega168 или ATmega328) эта функция работает на контактах 3, 5, 6, 9 , 10 и 11 ". Поэтому попробуйте изменить контакты, а затем посмотрите, что произойдет. И .. Нет, analogRead не имеет ничего общего с analogWrite, поэтому они не могут помешать – frarugi87

ответ

0

Как запросил ОП, вот ответ.

Проблема заключалась в том, что Arduino UNO не имеет PWM на контактах 12 и 13, поэтому analogWrite на этих контактах ничего не делает.

Согласно документации Arduino (here), «на большинстве плат Arduino (с ATmega168 или ATmega328) эта функция работает на контактах 3, 5, 6, 9, 10 и 11". Следовательно, изменение связей R и G фиксировало проблему.

Смежные вопросы