Сдвиг изображения на светодиодной матрице
- Войдите на сайт для отправки комментариев
Чт, 30/05/2019 - 21:19
#define DATA 6 #define LATCH 8 #define CLOCK 10 byte column[] = { B01100110, B01100110, B00000000, B00011000, B10011001, B01000010, B00111100, B00000000 }; byte row[] = { B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000 }; void setup() { pinMode(LATCH, OUTPUT); pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); } void loop() { for (int shift = 0; shift < 9; shift++) { for (int hold = 0; hold < 25; hold++) { for (int i = 0; i < 8; i++) { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, LSBFIRST, ~column[i] >> shift); shiftOut(DATA, CLOCK, MSBFIRST, row[i]); digitalWrite(LATCH, HIGH); delay(1); } } } }
Принято к сведению.
Извините, не знаю как тут редактировать сообщения. Помогите пожалуйста новчику.
Если применяю сдвиг вправо
shiftOut(DATA, CLOCK, LSBFIRST, ~column[i] >> shift);
То всё работает, и изображение корректно смещается вправо, вместо всех 1 подается низкий уровень сигнала, а вместо 0 высокий благодаря поразрядному НЕ, но почему если поменять на сдвиг в лево, то вместо 0 возникающих при сдвиге подается 0, а не 1, ведь так же остается поразрядное НЕ.
Тоесть при сдвиге вправо перемещается смайлик и всё, а при сдвиге влево, смайлик уходит влево и все светодиоды откуда он сместился ЗАГОРАЮТСЯ.
Объясните пожалуйста почему.
Лево и право точно не перепутали? По идее проблемы должны возникать при движении вправо.
По любому, попробуйте в строке 41 перед "~column[i]" поставить "(byte)"