Сдвиг изображения на светодиодной матрице

klark.charlz
Offline
Зарегистрирован: 07.10.2018
#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);
      }
    }
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Принято к сведению.

klark.charlz
Offline
Зарегистрирован: 07.10.2018

Извините, не знаю как тут редактировать сообщения. Помогите пожалуйста новчику.

Если применяю сдвиг вправо

shiftOut(DATA, CLOCK, LSBFIRST, ~column[i] >> shift);

То всё работает, и изображение корректно смещается вправо, вместо всех 1 подается низкий уровень сигнала, а вместо 0 высокий благодаря поразрядному НЕ,  но почему если поменять на сдвиг в лево, то вместо 0 возникающих при сдвиге подается 0, а не 1, ведь так же остается поразрядное НЕ. 

Тоесть при сдвиге вправо перемещается смайлик и всё, а при сдвиге влево, смайлик уходит влево и все светодиоды откуда он сместился ЗАГОРАЮТСЯ. 

Объясните пожалуйста почему.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Лево и право точно не перепутали? По идее проблемы должны возникать при движении вправо.

По любому, попробуйте в строке 41 перед "~column[i]" поставить "(byte)"