Не работает код для сдвигового регистра

Тема в разделе "Arduino & Shields", создана пользователем Secret Cipher, 25 июл 2017.

  1. ostrov

    ostrov Гуру

    Я с вас фигею! Передавать команды регистру через String! Если уж совсем плохо с логическими операторами (хотя для этой задачи надо знать всего парочку), пользуйтесь shiftOut, он быстрее и короче в сто раз чем методы String.

    И разберитесь с двоичной арифметикой, пригодиться многократно.
     
  2. railmisaka

    railmisaka Гик

    Вероятно, вы имели ввиду не логические, а побитовые?

    Мне кажется, что человеку, который не умеет писать код, рассуждения типа "быстрее и короче" совершенно непонятны. Ну и что, что медленно, если скорости хватает? Ну и что, что длинно, если понятно?
    Для Вас (да и для меня) использовать для этой цели String просто дико. Но это решение проще для понимания, чем маски и битовые сдвиги.
    Я не говорю, что это правильно/нормально. Просто мне кажется, что автор не собирается учиться писать код.

     
  3. ostrov

    ostrov Гуру

    Логические побитовые. Сдвиг, маска и прочее. Простой обычный байт о восьми битах разбить на биты и запихать по одному в пин. Пожалуй с такой задачки надо начинать изучение логики.

    Возможно у ТС скорость не критична, а если, например, нужно через регистры динамическую индикацию осуществлять? Представляете индикатор работающий через String? Впрочем, гвоздь можно забить и камнем и кирпичем.
     
  4. railmisaka

    railmisaka Гик

    Ну для начала можно сказать, что едва ли стоит писать аналог имеющейся функции, если не знаешь точно зачем это нужно и как это сделать=)

    Я просто отметил, что, возможно, ТС не будет ничего менять в своей программе. И нельзя наверняка сказать что это плохо. Где-то приемлемо гвозди забивать и камнем (а уж кирпичом, так еще проще xD )

    А вот это уже более или менее тянет на направление для движения.
     
  5. Secret Cipher

    Secret Cipher Нуб

    Я собираюсь учиться. Я в этом году закончил 7-ой класс, Последней темой урока, насколько я помню, был поиск наименьшего и наибольшего из 3 чисел в Паскале. К счастью у меня была возможность заниматься этим языком внеурочно.
    Ардуино я купил лишь в этом месяце. С C++ я пытался работать. Попробовал через Visual Studio, но компиляция не работает. Видимо нужен Windows SDK, а он весит 2 Гб. Мой интернет такое не скачает. (VS качал не дома) Другие IDE мне как-то не нравятся. Мне бы для начала удобную и простую среду (желательно на русском и с подсказками по командам). Если вы такую знаете, пожалуйста напишите.
     
  6. Secret Cipher

    Secret Cipher Нуб

    Когда я работал с shiftOut, у меня не получилось работать с двумя регисторами. Но я тут подумал, что возможно надо было делать не одну команду с 16 битами, а 2 по 8.
     
  7. Secret Cipher

    Secret Cipher Нуб

    Я попытался работать с байтами как с массивами или забивать массив boolean нулями и единицами без пробелов и запятых, но не получилось.
     
  8. akl

    akl Гуру

    я например тупо вот так сделал:
    сначала запихивается байт дальнего регистра, затем ближнего.
    digitalWrite(LATCH_PIN, LOW);
    shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[nn]);
    shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[n]);
    digitalWrite(LATCH_PIN, HIGH);}
     
  9. railmisaka

    railmisaka Гик

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

    если заранее известно, что записать в массив
    Код (C++):
    boolean a[] = {true, false, false};
    char c[] = {'1', '0', '1'};
    byte b[] = {1, 0, 1, 0};
    потом можно изменять в цикле как то так:
    Код (C++):
    for(int i=0; i<N; ++i)
    {
      b[i] = 1;
    }
    но вместо N надо подставить длину массива (вычислить не выйдет)

    По идее mvs должна работать "из коробки". Если вы опишете в чем у вас проблема, возможно я смогу вам помочь (думаю, лучше лс)
     
  10. ostrov

    ostrov Гуру

    Главное развиваться и совершенствоваться. Сделали запись в регистр через строковую переменную - честь и хвала! А потом надо попытаться разобраться и сделать правильно. Может быть и не сразу.
     
  11. DetSimen

    DetSimen Guest

    1. Нужно при установке VS включить галочку C++, по умолчанию она выключена
    2. Установить Arduino IDE
    3. Установить для VS плагин Visual Micro
    4. наслаждацца.