Ответить
  • TotCambIKoka Senior Member
    офлайн
    TotCambIKoka Senior Member

    828

    10 лет на сайте
    пользователь #825562

    Профиль
    Написать сообщение

    828
    # 11 апреля 2019 14:24

    Подтяжка резисторами выходов осуществлена?

    #define DIS !ACT

    Что за восклицательный знак? в чем проблемя написать HIGH?
    boolean kst[KEYS] = {0}; у вас в коде в 0 будет только 3 ключ - но это не точно, компилятора под рукой нет, лучше инициализируйте явно.
    ну так у вас при поднесенных ключах не войдет в If на 38 строке, и прога пропустит и пойдет дальше без ифа

    46 String request;
    47 for (int i = 0; i < 3; i++) {
    48 Serial.println (request);
    49 }

    А это что за мусорная строка и зачем ее 3 раза выводить?

    [Паяльник & Отвертка TEAM] Кулыбин ищет хлам для творчества. Все замотаю синей изолентой
  • zverjuga Senior Member
    офлайн
    zverjuga Senior Member

    5030

    13 лет на сайте
    пользователь #346019

    Профиль
    Написать сообщение

    5030
    # 11 апреля 2019 15:52
    TotCambIKoka:

    boolean kst[KEYS] = {0}; у вас в коде в 0 будет только 3 ключ - но это не точно, компилятора под рукой нет, лучше инициализируйте явно.

    такая запись обнуляет весь массив. написано корректно.

    проклятый антисутенерский закон!
  • RepoMan Senior Member
    офлайн
    RepoMan Senior Member

    925

    13 лет на сайте
    пользователь #295041

    Профиль
    Написать сообщение

    925
    # 11 апреля 2019 16:14
    zverjuga:

    такая запись обнуляет весь массив

    нет, только первый элемент

  • zverjuga Senior Member
    офлайн
    zverjuga Senior Member

    5030

    13 лет на сайте
    пользователь #346019

    Профиль
    Написать сообщение

    5030
    # 11 апреля 2019 18:09 Редактировалось zverjuga, 2 раз(а).

    это стандартный способ обнуления куска памяти, будь то структура или массив. данная запись инициализирует нулем первый элемент, а остальные компилятор автоматически забивает нулями. можно еще проще написать

    boolean kst[KEYS] = {} - это тоже обнуляет массив на стеке

    ссылка на стандарт
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf

    страница 188 пункт 7

    If there are fewer initializer-clause s in the list than there are members in the aggregate, then each member not explicitly
    initialized shall be value-initialized (8.5). [ Example:
    struct S { int a; char* b; int c; };
    S ss = { 1, "asdf" };
    initializes ss.a with 1, ss.b with "asdf", and ss.c with the value of an expression of the form int(), that is, 0.
    — end example ]

    страница 189, пункт 8.10

    When initializing a multi-dimensional array, the initializer-clause s initialize the elements with the last (rightmost) index
    of the array varying the fastest (8.3.4). [ Example:
    int x[2][2] = { 3, 1, 4, 2 };
    initializes x[0][0] to 3, x[0][1] to 1, x[1][0] to 4, and x[1][1] to 2. On the other hand,
    float y[4][3] = {
    { 1 }, { 2 }, { 3 }, { 4 }
    };
    initializes the first column of y (regarded as a two-dimensional array) and leaves the rest zero. — end example ]

    проклятый антисутенерский закон!
  • RepoMan Senior Member
    офлайн
    RepoMan Senior Member

    925

    13 лет на сайте
    пользователь #295041

    Профиль
    Написать сообщение

    925
    # 11 апреля 2019 20:14

    zverjuga, стандарт - это, конечно, хорошо, но все ли компиляторы его соблюдают? вот так сейчас и не вспомню, на какой платформе в таком массиве был мусор, но с тех пор в критичных местах всегда принудительно обнуляю, например memset'ом

  • TotCambIKoka Senior Member
    офлайн
    TotCambIKoka Senior Member

    828

    10 лет на сайте
    пользователь #825562

    Профиль
    Написать сообщение

    828
    # 14 апреля 2019 13:38

    протестировал тестовым скетчем c различными модификациями код,примерный скетч:

    код выделить все
    #define ACT LOW // Состояние входа при активации
    #define DIS !ACT
    #define KEYS 3 // Кол-во ключей
    //boolean kst[KEYS] = {0};
    //boolean kst[KEYS];
    bool kst[KEYS] = {1, 1, 1};
    void setup() {
    Serial.begin(9600);
    kst[KEYS] = {0};
    delay(100);
    for (int i = 0; i < KEYS; i++)
    {
    Serial.println(kst[i]);
    }
    }
    void loop() {
    }

    Выводы:

    • boolean kst[KEYS] = {0}; // инициализирует масив нулями, но так же делает и boolean kst[KEYS];
    • boolean kst[KEYS] = {1}; // первый элемент 1, а остольные нули
    • в коде kst[KEYS] = {0}; // не трогает массив, т.к. меняется элемент за выходом его размеров, компилятор не ругается?а это значит что обнулять массив надо циклом, и быстро так не получится.
    [Паяльник & Отвертка TEAM] Кулыбин ищет хлам для творчества. Все замотаю синей изолентой
  • zverjuga Senior Member
    офлайн
    zverjuga Senior Member

    5030

    13 лет на сайте
    пользователь #346019

    Профиль
    Написать сообщение

    5030
    # 14 апреля 2019 15:32
    TotCambIKoka:

    а это значит что обнулять массив надо циклом, и быстро так не получится.

    чтобы было быстро, используй не цикл, а memset. он по итогу компилируется в одну-две ассемблерные команды и работает очень быстро.

    проклятый антисутенерский закон!
  • DVK Senior Member
    офлайн
    DVK Senior Member

    20325

    21 год на сайте
    пользователь #8520

    Профиль
    Написать сообщение

    20325
    # 3 мая 2019 20:53

    Господа, подскажите, какой микроконтроллер выбрать для следующей задачи:
    есть NAS (Netgear ReadyNAS Duo V2 если что);
    есть 12 VDC UPS, который кормит всё хозяйство. Абсолютно безмозглый! Т.е. просто блок питания с релюшкой, отключающей АКБ при её разряде.
    Надо сделать девайс, который будет включаться в USB порт NASа и изображать из себя UPS. В примитиве смотреть напряжение на АКБ и если оно больше 13В, то говорить что питание от сети, меньше 13В - питаемся от батареи, меньше 11.5В - говорить low battery (чтобы NAS шатдаунился). Как максимум - уметь говорить вычисленный процент заряда батареи.
    Вот нашёл, человек делал, но не доделал. Готовых таких решеньиц не нашёл. Видать, придётся самому...а я в этих микроконтроллерных платах ни в зуб ногой.

    I'm a man with a plan. (C) Korpiklaani
  • SIO Паяльник & Отвертка TEAM
    офлайн
    SIO Паяльник & Отвертка TEAM

    4105

    17 лет на сайте
    пользователь #68847

    Профиль
    Написать сообщение

    4105
    # 3 мая 2019 21:06

    DVK, Берете любую ардуину, например нано, измеряете ей напряжение и отправляете по уарт в nas, а там надо программку которая будет понимать принятые данные, либо писать скетч под конкретную программу.

    Паяльник & Отвертка TEAM, MikroPascal for AVR http://forum.onliner.by/viewtopic.php?t=637523
  • DVK Senior Member
    офлайн
    DVK Senior Member

    20325

    21 год на сайте
    пользователь #8520

    Профиль
    Написать сообщение

    20325
    # 3 мая 2019 21:43

    SIO, не хочется всяких нестандартностей. В NASe уже есть программка. К тому же вместо NASа может оказаться видеорегистратор или миникомпьютер. Поэтому хочется чтобы платка эмулировала обыкновенный USB-HID UPS. Чтобы и жук, и жаба её видели как UPS.

    I'm a man with a plan. (C) Korpiklaani
  • SIO Паяльник & Отвертка TEAM
    офлайн
    SIO Паяльник & Отвертка TEAM

    4105

    17 лет на сайте
    пользователь #68847

    Профиль
    Написать сообщение

    4105
    # 3 мая 2019 22:01
    DVK:

    Поэтому хочется чтобы платка эмулировала обыкновенный USB-HID UPS

    Для USB HID есть библиотеки, можно и программно сделать на Атмега8, но я не делал ни разу с USB прошивки, не знаю что к чему.

    Паяльник & Отвертка TEAM, MikroPascal for AVR http://forum.onliner.by/viewtopic.php?t=637523
  • RepoMan Senior Member
    офлайн
    RepoMan Senior Member

    925

    13 лет на сайте
    пользователь #295041

    Профиль
    Написать сообщение

    925
    # 4 мая 2019 01:23 Редактировалось RepoMan, 1 раз.
    DVK:

    Вот нашёл, человек делал, но не доделал.

    ну почему же не доделал? он даже написал демо для симулирования различных состояний UPSа

    код выделить все
    switch (counter++) {
    case 0: ups_online(1); ups_batterystatus(1); break;
    case 30: ups_online(0); break;
    case 40: ups_online(1); break;
    case 50: ups_online(0); break;
    case 60: ups_batterystatus(0); break;
    }

    всё что остается, это дописать чтение АЦП и отдавать нужный результат.

  • DVK Senior Member
    офлайн
    DVK Senior Member

    20325

    21 год на сайте
    пользователь #8520

    Профиль
    Написать сообщение

    20325
    # 4 мая 2019 06:00
    RepoMan:

    всё что остается, это дописать чтение АЦП и отдавать нужный результат.

    Именно. Я, правда, хочу чуть большего, процент заряда батарей чтобы отдавался. Так на какую плату мне лучше ориентироваться? Чтобы сразу с USB, с бутлоадером? MC-HCK, на которой это всё делалось, так и не пошла, а самому рисовать-травить-паять - не моё это...

    I'm a man with a plan. (C) Korpiklaani
  • RepoMan Senior Member
    офлайн
    RepoMan Senior Member

    925

    13 лет на сайте
    пользователь #295041

    Профиль
    Написать сообщение

    925
    # 4 мая 2019 07:00

    DVK, как насчет Teensy 3.x? Примерно в таком же форм-факторе, на таком же мк (хотя бы код можно будет использовать готовый), только цена 20$

  • DVK Senior Member
    офлайн
    DVK Senior Member

    20325

    21 год на сайте
    пользователь #8520

    Профиль
    Написать сообщение

    20325
    # 4 мая 2019 09:17
    RepoMan:

    DVK, как насчет Teensy 3.x? Примерно в таком же форм-факторе, на таком же мк (хотя бы код можно будет использовать готовый), только цена 20$

    Так ведь код на С от МК не зависит, разве что низкоуровневые функции могут отличаться. Но $20 как-то жырновато. А та же Teensy 2.0 за $7 не покатит? Или digspark какой-нибудь? Я просто не вникал в эти МК, кто что может и умеет...

    I'm a man with a plan. (C) Korpiklaani
  • RepoMan Senior Member
    офлайн
    RepoMan Senior Member

    925

    13 лет на сайте
    пользователь #295041

    Профиль
    Написать сообщение

    925
    # 4 мая 2019 09:43

    DVK, далеко не все МК умеют в USB - это раз. Даже если и умеют, то не факт, что там легко настроить этот HID UPS - это два. Ну и в третьих, нужно еще чтобы была готовая плата в компактном виде на таком МК. И нет, конкретно этот С код нельзя запустить на любом МК, он написан под конкретный тулчейн.
    Teensy 2.0 это по сути та же ардуино леонардо. На них можно эмулировать как минимум мышку и клаву как простые HID устройства, поэтому теоретически можно сделать и UPS. Но на сколько там можно спуститься вниз практически - хз, возможно всё завернуто в библиотеки без исходников.

    Добавлено спустя 14 минут 39 секунд

    Вот вроде для teensy 2.0 пример. Выглядит подходяще, только кто будет писать код?

  • DVK Senior Member
    офлайн
    DVK Senior Member

    20325

    21 год на сайте
    пользователь #8520

    Профиль
    Написать сообщение

    20325
    # 4 мая 2019 10:14

    RepoMan, кто-кто, я конечно. Не думаю, что с моим бюджетом проекта в $20-30 кто-то возьмётся писать.

    I'm a man with a plan. (C) Korpiklaani
  • zverjuga Senior Member
    офлайн
    zverjuga Senior Member

    5030

    13 лет на сайте
    пользователь #346019

    Профиль
    Написать сообщение

    5030
    # 4 мая 2019 20:54 Редактировалось zverjuga, 1 раз.

    по мотивам этого поста
    https://forum.onliner.by/viewtopic.php?t=4683606&p=103285782#p103285782

    продолжение

    испытания приемника кодграббера
    http://files.rsdn.org/42509/grabber.mp4

    сначала брал такой

    на нем тестировал скетч. оказался говном, куча помех, миллион ложных срабатываний и нет в комплетке антенны. по итогу на алиэкспрессе заказал такой набор, вместе с антеннами

    приемник ловит сигнал просто супер. с другого конца квартиры через три стенки ловит на раз-два. к сожалению тупанул с платой расширения и посадил передатчик на 5 вольт. потом только заметил, что новый передатчик работает от 3.3 вольт, так что временно поставил передатчик из старого набора, так как он работает от 5 вольт. если передатчик сможет поднять шлагбаум, то останется чуток переделать плату расширения и кодграббер будет полностью готов.

    проклятый антисутенерский закон!
  • grmaster Senior Member
    офлайн
    grmaster Senior Member

    1387

    14 лет на сайте
    пользователь #176893

    Профиль
    Написать сообщение

    1387
    # 9 мая 2019 14:39 Редактировалось grmaster, 3 раз(а).

    Всем привет. Почти год назад обращался в эту тему. Возникли новые вопросы.
    Есть Arduino Uno, шаговый двигатель (который нужно вращать на определенной скорости) и такие вот кнопки.
    Есть так же:

    int IN1 = 5;
    int IN2 = 4;
    int IN3 = 3;
    int IN4 = 2;

    int time_del = 11715;

    void setup() {
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    }

    void loop() {

    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    delayMicroseconds(time_del);

    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    delayMicroseconds(time_del);

    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    delayMicroseconds(time_del);

    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    delayMicroseconds(time_del);

    }

    int IN1 = 5;
    int IN2 = 4;
    int IN3 = 3;
    int IN4 = 2;

    int time_del = 16385;

    void setup() {
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    }

    void loop() {

    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    delayMicroseconds(time_del);

    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    delayMicroseconds(time_del);

    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    delayMicroseconds(time_del);

    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    delayMicroseconds(time_del);

    }

    Нужно чтобы:
    1. красная кнопка включала/выключала питание ардуино (она под номером 4)
    2. зеленая кнопка запускала скетч №1 (кнопка 3)
    3. желтая кнопка запускала скетч № 2 (кнопка 2)
    4. синяя кнопка "стоп" останавливает запущенный скетч (кнопка 1)
    Подскажите пожалуйста как подключить кнопки и как объеденить эти скетчи в один под данные задачи. В ардуино я ноль, если можно, сразу схему и скетч. Кнопки хотелось бы подключить сразу в ардуино без дополнительных плат.

  • Protez1999 Senior MemberАвтор темы
    офлайн
    Protez1999 Senior Member Автор темы

    9977

    16 лет на сайте
    пользователь #113845

    Профиль
    Написать сообщение

    9977
    # 9 мая 2019 14:56

    Если вам нужно отрубать питание и кнопка не фиксируемая то вам придется ее поменять на фиксируемую. А так только в режим похожий на сон вы сможете вогнать.