Как выполнить вычисления с шестнадцатеричными и двоичными значениями на пи и быстрого вывода на gpio - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь использовать Pi для управления светодиодной матрицей. Я уже сделал то же самое на Arduino Uno. Я новичок в Python и мне нужна помощь с преобразованием следующего кода Arduino для работы с Python:

byte RGB = 0b00000000;
uint64_t  rowR[16]
uint64_t  temp;
uint8_t   i;
int row   = 0;

void setup(){
temp     = 0x0000000000000001;
rowR[0] = 0XFA24D2241F701070;
rowR[1] = 0X122472271070DF70;
rowR[2] = 0X1324000010480000;
rowR[3] = 0X13240000104C0000;
rowR[4] = 0X12A400001E440000;
rowR[5] = 0X12A4000010440000;
rowR[6] = 0X12640000104C0000;
rowR[7] = 0X9264000010480000;
rowR[8] = 0XFA24D2241F701070;
rowR[9] = 0X122472271070DF70;
rowR[10] = 0X1324000010480000;
rowR[11] = 0X13240000104C0000;
rowR[12] = 0X12A400001E440000;
rowR[13] = 0X12A4000010440000;
rowR[14] = 0X12640000104C0000;
rowR[15] = 0X9264000010480000;
}

void loop(){
for (row = 0; row < 8; row++)
{

for (i = 0; i < 64; i++)
{
RGB     = ((!!(rowR[row] & (temp << (63 - i)))) << (2)) /*pin2*/
        | ((!!(rowG[row] & (temp << (63 - i)))) << (3)) /*pin3*/
        | ((!!(rowB[row] & (temp << (63 - i)))) << (4)) /*pin4*/
        | ((!!(rowR[row + 8] & (temp << (63 - i)))) << (5)) /*pin5*/
        | ((!!(rowG[row + 8] & (temp << (63 - i)))) << (6)) /*pin6*/
        | ((!!(rowB[row + 8] & (temp << (63 - i)))) << (7)); /*pin7*/

PORTD = RGB; //writing to pins 0-7
}
}

Это, очевидно, не полный код, но это область, в которой я запутался. Я пытаюсь преобразовать эту систему для работы на пи с ее выводами GPIO в основном для максимально возможной частоты обновления светодиодной матрицы.

Редактировать: Также есть более быстрый способ манипулирования выводами GPIO Raspberry Pi, чем с помощью "GPIO.output ()"

...