Ответы пользователя по тегу Программирование
  • Абсурдное выполнение условных операторов 3 раза в Arduino nanov3, как исправить?

    void loop() {
      analogWrite(col, xCol);
      xBaza = Serial.read();
      if(xBaza != xBaza0) {
        xBaza0 = xBaza;
        analogWrite(baza, xBaza);
        writes();
      }
    }

    1. Попадаете в условие, выполняете действия. После чего идете на второй круг. в переменной сидит, например 50, которое вы присваиваете.
    2. Снова читаете, но уже чтение порта возвращает вам -1, если не ошибаюсь, если не прочитано ни одного символа.
    Сравниваем: -1 не равно 50 и вы опять в условии. Выполняется вывод и присваивание переменной значения -1.
    После этого обе переменные становятся -1 и вы не попадаете в условие. Т.к. при попытке чтения порта результат -1 и в переменной тоже -1.

    И читаете Вы не цифру, а ее ASCII код.

    Возможно поможет if(xBaza != xBaza0 && xBaza != -1) {
    Ответ написан
    Комментировать
  • Подключение мк АВР к питанию?

    Резистор нафиг не нужен. Или Вы из секты тех, кто видит на источнике напряжения 2А и думает что источник их всегда вливает в потребителей?

    Между VСС и GND, между AVCC и GND керамические конденсаторы. Не забудь вывести ноги для программирования и сделать RESET с кнопкой. (ищи типовые схемы)

    По распиновке см. даташиты на оф. сайтах: ww1.microchip.com/downloads/en/DeviceDoc/ATmega328...
    Ответ написан
  • Stm32 libopencm3 STK_LOAD undefined?

    В systick.h записано вот так:
    /* --- SYSTICK registers --------------------------------------------------- */
    
    /* Control and status register (STK_CTRL) */
    #define STK_CSR				MMIO32(SYS_TICK_BASE + 0x00)
    
    /* reload value register (STK_LOAD) */
    #define STK_RVR				MMIO32(SYS_TICK_BASE + 0x04)
    
    /* current value register (STK_VAL) */
    #define STK_CVR				MMIO32(SYS_TICK_BASE + 0x08)
    
    /* calibration value register (STK_CALIB) */
    #define STK_CALIB			MMIO32(SYS_TICK_BASE + 0x0C)

    Может попробовать вместо STK_LOAD сунуть ему STK_RVR ?
    Ответ написан
  • Как подключить к 5v логике, мотор на 36v?

    Реверс ннада? Если надо то H-мост на транзисторах: два драйвера верхнего и нижнего ключа, 4 транзистора, контроллер.
    Что-то похожее на это, на IR2104, например:
    DC-Motor-IR2104-H-BRIDGE.png

    Если только вкл-выкл/ШИМ управление с вращением только в одну сторону, то выдрать полевой транзистор откуда-нибудь n-типа(в материнке можно поискать, они на низкое напряжение, огромные токи и дружат с низковольтовой логикой) и сделать примерно так:
    %D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%
    Vin - твои 36В
    Затвор транзистора - с контроллера ШИМ
    GND обоих устройств должны быть соединены.

    Хотя все же лучше гоянть транзисторы драйверами.
    Ответ написан
    Комментировать
  • Как называется кран для воды, управляемый через ардуину?

    Моторизованный шаровой кран?)
    Цены только сильно Вас разочаруют, скорее всего.
    Ответ написан
    Комментировать
  • Подойдут ли различные детали из радиомагазина для Arduino?

    Всё, что совместимо с 5В логикой или, то что Вы сможете согласовать по логическим уровням, совместимо с ардуино.
    При наличии библиотек, конечно, либо умению сделать свои.

    Разницы, где купить нет, но в Китае обычно в разы дешевле. Более того, можно чего-то понавытаскивать из ненужных железяк и спокойно использовать. (индикаторы, диоды, шаговики, транзисторы, двигатели постоянного тока, некоторые микросхемы и т.д.). Это всего лишь микроконтроллер и он будет работать со всем, что вы сможете к нему подключить.
    Ответ написан
    Комментировать
  • Нужна совместить работу фоторезистора и потенциометра. Кто поможет?

    Как насчет варианта, когда значение потенциометра меньше, скажем 5 (т.е. напряжение поступающее от потенциометра близко к нулю) читаем фоторезистор, если на потенциометре от 5 до 1023 на АЦП приходит, то преобразуем данное значение в угол angle = map(potPin, 5, 1023, 0, 180)
    Ответ написан
    Комментировать
  • Arduino. Как сделать мелодию для двух и более пьезоизлучателей?

    "Воспроизводиться одновременно может только один сигнал. Если сигнал уже воспроизводится на одном порту, то вызов Tone() с номером другого порта в качестве параметра ни к чему не приведет, если же Tone() будет вызвана с тем же номером порта, то будет установлена новая частота сигнала."

    Походу средствами Arduino никак.

    "Генерирует на порту вход/выхода сигнал — прямоугольную "волну", заданной частоты и с 50% рабочим циклом. Длительность может быть задана параметром, в противном случае сигнал генерируется пока не будет вызвана функция noTone(). К порту вход/выхода может быть подключен к пьезо или другой динамик для воспроизведения сигнала.
    Использование функции Tone() помешает использовать ШИМ на портах вход/выхода 3 и 11 (кроме платы Arduino Mega)."

    Из этого следует, что реализован он на таймере.
    А таймеров на Уне 3шт, на меге 4шт, если не ошибаюсь. Нулевой затронет задержку (delay), его лучше не трогать.

    Так что вам надо идти к тем, кто программирует Atmel'ы, а не ардуины и спросить, как сделать меандр на x Герц на Си/Ассемблере на несколько пинов с разной частотой.

    Либо если функционал минимален, попробовать просто включать выключать порт с задержками в миллисекунды, впихнуть в это функцию и радоваться жизни. Но это будет сильно нагружать МК, если делать в лоб.

    Ну или найти что-то, что будет генерировать меандр заданной частоты и управляться от МК.
    Ответ написан
    31 комментарий
  • Програмирования arduino (RF пульт, RF приёмник, LED ленты, RCSwitch). Почему медленно переключается с циклов?

    А что происходит при отсутствии сигнала?

    Как вариант примерно следующее:
    Добавить внутрь цикла проверку условия. Алгоритм примерно такой:
    Перед запуском цикла фиксируем код, по которому попали на условие.
    В цикле периодически читаем код с приемника (например каждые 10 проходов цикла).
    Если новый считанный код отличен от того, по которому попали в цикл (а также от того, что возвращается при отсутствии сигнала), то делаем break для досрочного выхода из цикла.
    Ответ написан
    4 комментария
  • Как сделать управляемый usb-хаб при помощи Arduino?

    По идее можно влепить реле/оптроны вместо кнопок и рулить ими ардуиной/чем-то еще.
    Но надо будет немного паять

    Переключение: Ethernet-модули, GSM-модули(смсить), по времени циклически и т.д.

    Есть еще супер-костыль: взять старый мобильник (с активной симкой), с его динамика завести сигнал на контроллер, при наличии сигнала переключить порт на следующий.
    Минусы: рекламная рассылка или идиоты могут спровоцировать непредвиденное переключение и нет обратной связи с устройством. Если от смс еще можно защитится измеряя длительность прозвона, то от любителей позвонить и втюхать вам кредит/миллион и т.д. уже сложнее.
    Плюсы: очень просто и дешево.
    Ответ написан
    Комментировать
  • Как добавить "префикс" к аргументу argv[1] в С?

    библиотека string.h для С

    функция strlen( const char * string );
    вернет количество символов в строке

    функция strcat для дозаписи в строку
    char * strcat( char * destptr, const char * srcptr );
    т.е.
    char buf*="my ";
    strcat(buf,argv[1]);
    argv[1]=buf;
    Ответ написан
    Комментировать
  • Почему digitalRead рандомно возвращает HIGH?

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

    стягивающий:
    %D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%
    Есть нажатие: Vout = Vcc
    Нет нажатия: Vout = 0

    подтягивающие:
    %D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%
    Есть нажатие: Vout = 0
    Нет нажатия: Vout = Vcc
    Ответ написан
    Комментировать
  • Сколько в переменной хранится значение?

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

    "До выхода из приложения?" - Да, после выхода, по хорошему, всё, что создала в памяти программа высвобождается. Если хотите сохранять значения, то записывайте их в файлы.
    Ответ написан