Вопрос по кодерству

Тема в разделе "Arduino & Shields", создана пользователем Кот, 26 июн 2015.

  1. Кот

    Кот Нуб

    Есть идея управления светодиодными панелями в комнате с помощью сдвиговика 74НС595 и самодельного IR передатчика. Возникла проблема при формировании бита на вывод.
    Есть массив из 8 элементов

    Код (Text):
    boolean light[8]={false,false,false,false,false,false,false,false};
    а вводной бит в регистр имеет вид
    Код (Text):
    0b00000000
    формата byte
    Каким образом сделать конструктор этого бита, чтобы на основе значений массива light можно было забивать byte 0 или 1, чтобы не перечислять все возможные комбинации?
     
  2. DrProg

    DrProg Вечный нерд

    Используйте цикл и функции bitSet(). Или highByte() и lowByte().
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    А еще лучше не храните биты в массиве. Храните сразу в байте.
     
  4. DrProg

    DrProg Вечный нерд

    Опять же экономия памяти, что для масштаба Ардуины не последнее дело.
     
  5. Кот

    Кот Нуб

    я так по сайтам полазил, понял, что bitSet() устанавливает в 1, а как в 0 выставить?
     
    Последнее редактирование: 26 июн 2015
  6. DrProg

    DrProg Вечный нерд

    bitClear();
     
  7. Alex19

    Alex19 Гуру

    Рекомендую почитать данную статью http://chipenable.ru/index.php/prog...s-kak-rabotat-s-bitami-makroopredeleniya.html.

    Вот как это можно сделать, код взят из статьи выше.
    Добавляем новую вкладку в Arduino IDE, даем ей имя BitsMacros.h, вставляем данный код
    Код, примера работы
    Код (Text):
    #include "BitsMacros.h"

    void setup()
    {
      Serial.begin(9600);
    }

    void loop()
    {
      byte temp = 0;
      Serial.print("B - ");
      Serial.println(temp, BIN);
      MC_SET_BIT(temp, 3);

      if (MC_BIT_IS_SET(temp, 3))
      {
        Serial.print("N - ");
        Serial.println(temp, BIN);

        MC_CLEAR_BIT(temp, 3);
        Serial.print("N2 - ");
        Serial.println(temp, BIN);
      }
      delay(1000);
    }
     
    Последнее редактирование: 26 июн 2015
    Кот нравится это.
  8. DrProg

    DrProg Вечный нерд

    Да зачем такие сложности, если все делается одним циклом из пары строк? Чем проще тем лучше. Проще всего вообще использовать bitWrite ();
     
    Кот нравится это.
  9. Кот

    Кот Нуб

    Вот. bitWrite (); то, что искал. Благодарю
     
  10. Alex19

    Alex19 Гуру

    Да действительно, если честно, я про них уже забыл:).
     
  11. Кот

    Кот Нуб

    Хм... а чего интересно делать, если оно вообще никак не реагирует, хотя биты отсылаются?
    Код (Text):
    #include <LiquidCrystal.h>
    #define DATA 2
    #define LATCH 4
    #define CLOCK 3

    LiquidCrystal LCD(7, 6, 10, 11, 12, 13);

    int a=1;
    int b=2;
    int c=3;
    int d=4;

    byte x = 0b10101010;

    void setup() {
      LCD.begin(16, 2);
      pinMode(DATA,OUTPUT);
      pinMode(CLOCK,OUTPUT);
      pinMode(LATCH,OUTPUT);
    }

    void loop() {

      digitalWrite(LATCH,LOW);
      shiftOut(DATA,CLOCK,LSBFIRST,x);
      digitalWrite(LATCH,HIGH);
      LCD.setCursor(0,0);LCD.print(x,BIN);
    }

    [​IMG]И дело не в серой перемычке. Ибо что с ней, что без - не работает
     
  12. DrProg

    DrProg Вечный нерд

    Как минимум питание забыли на вторую слева ножку снизу если смотреть на фотку.
     
  13. Кот

    Кот Нуб

    и в + и в - тыкал. Перезагружал. Реакции нет
     
  14. Alex19

    Alex19 Гуру

    Сам пока еще плохо разбираюсь в электронике. Но когда мастерю сам, очень помогает в подобных ситуациях простая прозвонка с помощью мультиметра и сверка со схемой. А так же проверка по питанию с помощью того же мультиметра.
     
  15. Кот

    Кот Нуб

    питания на выходах нет. Все контакты целы.
    Есть шанс, что пробило схему и она сгорела?
     
  16. Alex19

    Alex19 Гуру

    Все возможно.

    Обычно, когда собираю схемы, делаю шаг за шагом, подключил сдвиговый регистр, проверил, все работает иду дальше и т.д. Как для меня в маленькой схеме проще разобраться и когда возникает проблема, точно знаю где накосячил. Может и Вам стоит попробовать такой подход.
     
  17. DrProg

    DrProg Вечный нерд

    Проверьте внимательно еще все подключение, а так же проводкии детали.
    [​IMG]
     
  18. Кот

    Кот Нуб

    Да 10 пин держал на -. Видать я его или спалил, или еще что. Куплю новый, проверю
     
  19. Faberge

    Faberge Administrator Администратор

    Когда я собирал схему с 595, там были конденсаторы рядом с микрухами. Возможно, все дело в них?
     
  20. Кот

    Кот Нуб

    я разобрался, у меня в макетной были две соседние дорожки замкнуты. Все норм.

    Теперь вот что.. Все знают про экран 16х2. Когда выводишь Byte на нем, то он выводит нули только после 1, а нули не выводит. То есть получается нечто типа ---10000 (вместо - должны выводиться нули). Как их выводить, чтоб без сложных If и кучи кода?