Разъяснение кода

Тема в разделе "Arduino & Shields", создана пользователем Ye11ow, 13 июн 2018.

  1. Ye11ow

    Ye11ow Нерд

    Доброго времени суток!
    Собрал схему работы семисегментного светодиодного индикатора с общим катодом через сдвиговый регистр. Принцип работы сл.: сначала индикатор отображает цифры от 0 до F, затем он отображает эти же цифры, только с точкой на индикаторе (DP).
    Я не понимаю, как он в первом цикле for отображал без точки, а во втором с точкой, хотя отличие только в том, что к массиву digits в shiftOut +1.
    Вот код:

    #define DATA 6 //к выводу 14 микросхемы 74
    #define LATCH 8 //К выводу 12 микросхемы 74
    #define CLOCK 10 //К выводу 11 микросхемы 74
    //Подготовить массив с комбинациями сегментов
    //для цифр 0-9 и букв A-F из матрицы
    int digits[]={252, 96, 218, 242,102,182,190,224,254,246,238,62,156,122,158,142};

    void setup() {
    pinMode(LATCH,OUTPUT);
    pinMode(CLOCK,OUTPUT);
    pinMode(DATA,OUTPUT);
    }

    void loop()
    {
    int i;
    for(i=0;i<16;i++)
    {
    digitalWrite(LATCH,LOW);
    shiftOut(DATA,CLOCK,LSBFIRST,digits);
    digitalWrite(LATCH,HIGH);
    delay(1000);
    }
    for(i=0;i<16;i++)
    {
    digitalWrite(LATCH,LOW);
    shiftOut(DATA,CLOCK,LSBFIRST,digits+1);//+1 чтобы вкл. точку
    digitalWrite (LATCH,HIGH);
    delay(1000);
    }
    }
     
  2. Ye11ow

    Ye11ow Нерд

    Поправка: в shiftOut , массив digits с квадратными скобками, в которые помещена i.
     
  3. DetSimen

    DetSimen Guest

    еще бы код научился вставлять правильно....
     
  4. Ye11ow

    Ye11ow Нерд

    С телефоне через вк вставлял, сорри(
     
  5. AlexU

    AlexU Гуру

    Если присмотреться, то можно заметить, что все числа в массиве digits чётные. Т.е. младший бит равен '0'. Прибавляя единицу во втором цикле, мы делаем числа нечётными -- младший бит равен '1', а остальные биты остаются прежними. Этот самый младший бит и отвечает за отображение точки.
     
    Sergey_BG и Ye11ow нравится это.
  6. Ye11ow

    Ye11ow Нерд

    Понял! Спасибо большое!