Как отправить байты в 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]).