Как отправить байты в AVR и использовать его на ШИМ

Я пытаюсь отправить целые числа от 0 до 255 на мой AVR Atmega8L, использую это значение в качестве ШИМ и загораюсь светодиодом для каждого контакта (3 контакта)...

Я делаю это на Java (Android) для отправки данных на мой AVR через USART:

byte toSend[] = {(byte)intA, (byte)intB, (byte)intC};

bleService.writeMLDP(toSend); //sends data to AVR (byte[] or String, it's working fine)

В моем коде AVR у меня есть следующее:

int i = 0, filled_all = 0;
char bytes[3];

//ISR is called everytime data is received
ISR( USART_RXC_vect ) {
    bytes[i] = UDR; //UDR is the data received
    i++;
    if(i == 3) filled_all = 1;
    if(filled_all == 1) {
        OCR1A = bytes[0]; //sets 1st PWM
        OCR1B = bytes[1]; //sets 2nd PWM
        OCR2 = bytes[2];  //sets 3rd PWM
        i = 0;
        filled_all = 0;
    }
}

Есть много проблем:

  • Все светодиоды включаются на полную мощность (он не инвертируется, и я устанавливаю его на 0x00 в начале моей функции main());
  • Я должен отправить данные дважды, чтобы изменить мощность светодиодов;
  • 1-й и 2-й контакты инвертированы (как будто данные отправляются как toSend[1] -> toSend[0] -> toSend[2]).

0 ответов

Другие вопросы по тегам