Я пытаюсь реализовать функцию сдвига анимации, которая позволит мне сместить все (LAYERS * BYTES) светодиоды на 32 бита с перекрытием. Я мог бы сделать это только с помощью сдвига байтов, но это не то, что мне нужно.
Чтобы лучше понять идею, изображение приведено ниже:
Я вытянул его, где C - это бит переноса, который перемещается в начало следующего байта, а последний элемент из 4 байтов назначается первому элементу первого байта.
Возможно, есть лучший способ реализовать это. Я благодарен за любую помощь заранее.
Дополнительная информация:
void Shift_Right_Byte(void){
for (int row = 0; row < LAYERS; row++) {
for (int col = 0; col < BYTES; col++) {
LED_Buffer[row][col] = LED_Buffer[row][(col + 1) % BYTES];
}
}
delay(1000);
}
Новая функция:
void layer_rotate_right(void)
{
for (int row = 0; row < LAYERS; row++) {
unsigned char carry = LED_Buffer[row][BYTES - 1] << 7 ;
for( int i = 0; i < BYTES; i++ )
{
unsigned char next_carry = LED_Buffer[row][i] << 7 ;
LED_Buffer[row][i] = (LED_Buffer[row][i] >> 1) | carry ;
carry = next_carry ;
}
}
}