Сдвиг изображения на светодиодной матрице
- Войдите на сайт для отправки комментариев
Чт, 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)"