Ответы пользователя по тегу Arduino
  • Как Char разделить в массив по знаку в Arduino?

    Собираете из char`ов string:
    char inChar = (char)Serial.read();
    inputString += inChar;

    Когда ввод закончен, например при передаче символа конца строки или переноса строки
    if (inChar != '\n' or inChar != '\r'){

    Находим позицию пробела в строке:
    int i = inputString.indexOf(" ");

    Если позиция не 0, то пробел найден, берем подстроку до пробела и после:

    if (i > 0) {
    String command = inputString.substring(0, i);//Часть строки о пробела
    String paramString = inputString.substring(i + 1, inputString.length());//Это часть строки после пробела

    В моем примере вторая часть строки инт, перевожу ее в число типа инт:
    unsigned long param = paramString.toInt();

    Вам нужно перевести в инт первую часть и продолжить делить вторую до победного
    Ответ написан
    Комментировать
  • Ардуино Нано нестабильная загрузка скетча - что посоветуете знатоки?

    У меня однажды плата стала прошиваться нестабильно, решил пропайкой разьема микроюсб.
    Ответ написан
    3 комментария
  • Как повернуть асинхронный двигатель на определённый угол?

    Асинхронные двигатели не предназначены для поворота на определенный угол, скорость вращения их ротора может не соответствовать скорости вращения магнитного поля статора. Поэтому способ только один - считывание положения вала с помощью датчика и управление двигателем по этому датчику. В этом логика управления асинхронным двигателем не отличается от коллекторного, применяемого в модельных сервоприводах.
    Ответ написан
    Комментировать
  • Как сделать приём параметров Serial на ардуино?

    Я делал командную строку, синтаксис которой variable value
    spoiler
    int i = inputString.indexOf(" ");//Разделитель строки на подстроки
        if (i > 0) {
              String command = inputString.substring(0, i);
              String paramString = inputString.substring(i + 1, inputString.length());
              unsigned long param = paramString.toInt();
              Serial.print (command);
              Serial.print (" = ");
              Serial.println (param);
              //Здесь можно чтото сделать с переменными command и param, например, разобрать через switch-case
        }
        else Serial.println (F("Error: not value"));

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

    Вам нужны ардуино, датчик температуры, дисплей.
    Очень хороши, хотя и дороги, наборы от Амперки. Можно посмотреть их состав и купить в других местах по частям, так будет значительно дешевле.
    Ответ написан
    2 комментария
  • Как связать одну ардуино uno с множеством ардуино nano?

    Подключить можно. Если без проводов, значит нужны радиомодули. Можно самые дешевые на 433МГц, можно популярные nrf24l01, можно дальнобойные lora. В любом случае выбирается модуль по характеристикам, таким как скорость передачи, частота, дистанция, количество занимаемых ног контроллера и т.д. Далее смотри как работать с выбранным модулем.
    Ответ написан
    3 комментария
  • Можно ли с arduino nano сделать джойстик?

    Есть довольно старый проект MJoy на контроллере ATMega8, он пороще, чем 328, на котором нано сделана. Так что технически реально. Но надо понимать, что USB интерфейса у нано нет, есть USB-to-serial конвертер, а значит к компьютеру придется подключать через эмулятор юсб, со свободных пинов. Это ни разу не просто, да и паять придется.
    Так что да, можно, но проще и дешевле использовать Леонардо или про микро на atmega32u4.
    Ссылка на MJoy www.joysticks.ru/joysticks/handmade/mjoy.shtml
    MJoy написан не на Ардуино!
    Ответ написан
    Комментировать
  • Пара прием\передача на arduino?

    Вместе работать будут, но не на 1 км, а меньше. У первого усилитель не только на передачу, но и на прием.
    Ответ написан
    3 комментария
  • NodeMCU ESP 8266 с встроенным oled дисплеем. Как запустить?

    Этот дисплей на контроллере SSD1306. Ищи любую библиотеку для дисплеев на этом контроллере для ESP8266. Самая популярная от Адафрут, качать тут: https://github.com/adafruit/Adafruit_SSD1306, там же есть примеры использования.
    Ответ написан
    2 комментария
  • Как нарисовать график используя стандартные средства ssd1306?

    Делюсь своим кодом для ардуины с графиком влажности. Код даю как есть, со всеми его недостатками. График автоматически масштабируется, есть подписанные оси. Писался давно, библиотеки для датчика DHT22 с тех пор обновились и код не компилируется, но рисовка должна работать.
    Осторожно, сырой код!
    //Подключаем библиотеки
    #include <Wire.h>
    #include <OLED_I2C.h>
    #include "DHT.h"
    #include <BH1750.h>
    //Создаем объекты
    OLED  myOLED(SDA, SCL, 8);
    DHT dht;
    BH1750 lightMeter;
    //Подключаем шрифты
    extern uint8_t SmallFont[];
    extern uint8_t MediumNumbers[];
    //Объявляем переменные
    float humidity[100];
    int count = 0;
    
    void setup()
    {
      myOLED.begin();
      myOLED.setFont(SmallFont);
      dht.setup(4);
      lightMeter.begin();
    }
    
    void loop()
    {
      for (int i = 99; i > 0; i--)//Циклом сдвигаем массив на единицу
      { //делать кольцевой массив лень
        humidity[i] = humidity[i - 1];
      }
      humidity[0] = dht.getHumidity();//Меряем влажность
      if (count < 100) count++;       //Сколько атуальных значений в массиве
      //для исключения нулей при включении
    
      myOLED.clrScr();//Очистили буфер дисплея
      myOLED.setFont(MediumNumbers);//Выбради шрифт
      myOLED.printNumF(humidity[0], 1, RIGHT, 0, '.', 4);//Написали сверху справа влажность
      myOLED.printNumF(dht.getTemperature(), 1, LEFT,  0, '.', 4);//А слева температуру
      //Нарисовали рамочку графика
      myOLED.drawLine(0, 18, 127, 18);
      myOLED.drawLine(0, 18, 0, 63);
      myOLED.drawLine(127, 18, 127, 63);
      myOLED.drawLine(0, 63, 127, 63);
      //Нашли минимум и максимум на графике
      int minHum = humidity[0];
      int maxHum = humidity[0] + 1;
      for (int i = 1; i < count; i++)
      {
        minHum = min(minHum, humidity[i]);
        maxHum = max(maxHum, humidity[i] + 1);
      }
      //Написали их на шкале справа
      myOLED.setFont(SmallFont);
      myOLED.printNumI(lightMeter.readLightLevel(), CENTER, 0);
      myOLED.printNumI(maxHum, 107, 20, 3);
      myOLED.printNumI(minHum, 107, 55, 3);
      //Нарисовали саму шкалу
      myOLED.drawLine(103, 62, 103, 20);
      myOLED.drawLine(103, 61, 108, 61);
      myOLED.drawLine(103, 20, 108, 20);
      //И деления на ней
      int j = 10; //шаг делений 10%
      if (maxHum - minHum < 50) j = 5; //или 5% если размах графика меньше
      if (maxHum - minHum < 11) j = 1; //или 1% если совсем маленький
      for (int i = 0; i <= 100; i += j) //перебираем все возможные значения процентов
      {
        if (i > minHum && i < maxHum)   //но рисуем только если они в диапазоне графика
        {
          int y = map(i, minHum, maxHum, 61, 20); //определяем положение штриха по вертикали
          if (i % 10 == 0) myOLED.drawLine(103, y, 107, y); //если это штрих для десяткков, то длинный
          else myOLED.drawLine(103, y, 105, y);//иначе короткий
        }
      }
      //Нарисовали график
      for (int i = 0; i < count; i++)
      {
        int y = map(humidity[i] * 10, minHum * 10, maxHum * 10, 61, 20);
        myOLED.drawLine(101 - i, 62, 101 - i, y);
      }
      //Вывели данные из буфера на дисплей
      myOLED.update();
      //Ждем следующего измерения
      delay(dht.getMinimumSamplingPeriod());
      //delay(60000);
    }
    Ответ написан
    Комментировать
  • Как задать параметры подключения к Wi-Fi на ESP32?

    Поднять точку достуап с WEB-сервером, сохранить переменные в файловой системе.
    Есть проект у Марселича, на ютубе. Там можно прошивку скачать для ардуино и как пример использовать.
    Хотя это и не единственный вариант. Китайские WEB-камеры через микрофон принимали параметры подключения, или QR-код показывать нужно было.
    Ответ написан
    Комментировать
  • Что использовать для подсветки материала произвольной формы?

    Для начала стоит определиться с необходимой точностью. Если размер пикселя в 10мм устраивает, то проще всего применить светодиодную ленту на управляемых диодах WS2812, расположив ее по строкам разной длины.
    Ответ написан
    3 комментария
  • Что делать если ардуино выдаёт какие-то кракозябры?

    Скорость порта, задаваемая в строке Serial.begin(9600); должна быть такой же, как выбрана в теминале ардуино IDE
    Ответ написан
  • Как оживить Attiny85?

    https://www.radiokot.ru/circuit/digital/pcmod/72/
    Универсальный программатор, позволяет прошить авр контроллер с любыми настройками фьюзов.
    Ответ написан
    Комментировать
  • Как отправить буффер дисплея ssd1306 на html страницу в виде изображения?

    Возвращаемое значение буффера типа uint8_t*.

    Звездочка в типе обозначает указатель, т.е. фактически хранит адрес в памяти, где лежит переменная, а не само значение переменной. Далее, адафрут используют унифицированную графическую библиотеку Adafruit-GFX, в которой значение цвета пикселя хранятся как uint8_t, т.е. "беззнаковый инт", занимающий в памяти 2 байта. Вам нужно прочитать из оперативной памяти одномерный массив uint8_t, размер которого равен количеству пикселей дисплея. Что делать дальше уже ответил milssky.
    Ответ написан
  • Как узнать уровень заряда аккумулятора через ардуино нано?

    Для того, чтобы точно узнать заряд, нужно интегрировать мощность, отбираемую от аккумулятора при разрядке и сообщаемую ему при зарядке. Обычно для этого применяют специальные микросхемы.
    Если высокая точность не нужна, можно измерять только напряжение аккумулятора. При этом возможны нелинейности или измеряемый процент заряда может иногда плавать, но схемотехника и код значительно проще.
    Ответ написан
    2 комментария
  • Как печатать английским текстом?

    Только кодом ардуины никак. Код нажатой клавиши от раскладки не зависит, это программа определяет, какую букву Вы нажали. Поэтому можно сделать так: в настройках винды прописать ctrl+shift - русский язык, alt+shift - английский язык. Тогда если перед печатью слать нажатие ctrl+shift, язык станет русским и цель достигнута. На неподготовленном компе, думаю, невозможно.
    Ответ написан
    Комментировать
  • Как реализовать взаимодействия двух wifi модулей esp8266 на большом расстоянии?

    Здесь вопрос больше по сетям, а не ESP. Как можно управлять одной есп с другой, если они подключены к одному роутеру или одна - точка доступа, а другая - её клиент? Например, слать get запрос на ip-адрес. Но сделать это через интернет сложнее, так как ip адрес ЕСП маскируется натом роутера, а ip роутера - натом провайдера. Если провайдер позволит, то покупает белый ip адрес (избавляемся от ната провайдера, роутер смотрит в инет напрямую) и настраиваем проброс портов на роутере. Тогда вторая есп будет слать тот же get запрос на белый ip роутера, роутер передаст запрос первой есп, а она выполнит команду или ответит. Но если провайдер ни на одной точке не дает белый ip (мобильные обычно не дают), то Вам нужен сервер-ретранслятор в интернете. Этим сервером при использовании blynk является сервер разработчиков, но делать связь двух есп на нем я не пробовал. Если с blynk не получится, то или искать альтернативу (например, iocontrol, или смотреть в сторону протокола MQTT и бесплатного борокера в интернете), или поднимать собственный сервер и настраивать его с нуля.
    Ответ написан
    Комментировать
  • Arduino. Модуль HC-06 не реагирует на AT команды. Что я делаю не так?

    1. Проверьте монтаж.
    2. Проверьте ардуино и код. Для этого отключите блютуз модуль и соедините между собой выводы 10 и 11. Если код верный, все что Вы отправите в терминал, должно вернуться обратно.
    3. Проверьте блютуз модуль. Полключите по Вашей схеме, соединитесь с блютусом при помощи смартфона и на смарте откройте терминал. Если модуль исправен, данные с терминала компьютера пойдут на терминал смартфона и наоборот.
    4. Переведите модуль в режим АТ команд. Для этого отключите смартфон от модуля. НС-06 сам переходит в АТ режим при отсутствии подключения по блютуз.
    Ответ написан
    1 комментарий