1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

Arduino и AVR (Atmel) микроконтроллеры

Тема в разделе "Наши другие увлечения", создана пользователем raefa, 9 мар 2016.

Реклама. Купить это место.
  1. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Последнее редактирование: 19 окт 2017
  2. vekler

    vekler Абитуриент

    Регистрация:
    23 сен 2017
    Сообщения:
    11
    Город:
    Пермь
    Имя:
    Александр
    Вот как раз мой случай! 6 пинов в ряд с подписями, но вот буквенные обозначения не совпадают с буквенными обозначениями на ISP и количество контактов разное, кабель не удастся подключить, упрётся.
    Спасибо большое за схему, буду пробовать припаяться проводами.
     
  3. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Вы же хотели эстетики. Неужели нет поблизости таких проводов? А запаять штыри.
     
  4. vekler

    vekler Абитуриент

    Регистрация:
    23 сен 2017
    Сообщения:
    11
    Город:
    Пермь
    Имя:
    Александр
    Я хотел не эстетики, а выход "поинтеллигентней" :) К примеру - обновиться "по воздуху", через Вай-Фай :)
    Нашлись у меня и штыри, и провода. Сделал всё по инструкции из шапки темы по подвесу. Сначала написало "файлед", потом взял другой Xloader, что-то в контроллер записалось. Теперь ГУИ мне выдаёт о несовпадении версий. Цитирую:
    GUI vs board version mismatch. Firmware version: 10.4 b9, GUI version: 2.2 b2.
    You should run matching GUI version, or upgrade firmware.
    Теперь мне надо узнать, как мне подружить контроллер с ГУИ. Либо ГУИ найти версию 10.4 b9, либо в плату залить версию 2.2 b2 :) Помогите, пожалуйста!
     
  5. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
  6. vekler

    vekler Абитуриент

    Регистрация:
    23 сен 2017
    Сообщения:
    11
    Город:
    Пермь
    Имя:
    Александр
    Спасибо большое за подсказку, а то я уже запутался в куче скачанных версиях, не увидел совпадение имени ГУИ и уже залитой мною же прошивки SimpleBGC_2_40b8.hex. Всё наконец-то совпало, ГУИ с контроллером законнектилась, следующий этап - настройка подвеса, буду задавать вопросы в другой теме. Спасибо!
     
  7. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Не могу залить скеч в ардуинку, что это значит?
     
  8. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    А скетч заливаете через avrdude? Не через родной bootloader?
    --- Сообщения объединены, 10 ноя 2017 ---
    А, пардон, погуглил - он и через родной bootloader заливает через avrdude.
    Другой ардуинки под рукой нет? На TX/RX пинах ничего не висит внешнего? Эта ардуинка вообще работала?
     
  9. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    1. Проверить тип платы, установленной в АрдуиноИДЕ, ком-порт, тип программатора. Если всё правильно, то
    2. Проверить бутлоадер, залить родной.
     
  10. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Да точно плату не ту выбрал.
    An_private разъясните мне как организован вывод информации в вашем тестере.
    только мне по деревенски если можно.

    Создали масиф как я понял под количество знаков
    char line1[40] = "U=12.0V I=1.5A ";
    char line2[40] = "PWM=1000 STOP";
    тут я 4х20 экран пользую.
    а потом с помощью той функции что меня научили выводите напряжение
    dtostrf(realU, 4, 1, line1 + 2);
    line1[6] = 'V';
    что означает line1 + 2
    --- Сообщения объединены, 10 ноя 2017 ---
    резервирование 2 знаков под V и пробел перед током?
     
  11. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Да. То есть line1 соответствует первой строке индикатора, line2 - второй строке. Если у вас строк больше, то делайте больше массивов :)
    В языке си использование идентификатора массива без индекса обозначает адрес нулевого элемента массива. Это эквивалентно использованию конструкции &line1[0] (получить адрес нулевого элемента массива).
    dtostrf преобразует число в строку и "кладёт" эту строку по указанному адресу. То есть в нашем случае - в массив line1 начиная с третьего знакоместа (первое знакоместо имеет индекс 0).
    вместо line1 + 2 можно использовать конструкцию &line1[2] - результат будет тот же (так как размер элемента равен одному байту).
    Нет, это я оставляю два знакоместа нетронутых: U=
     
  12. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Во а от куда он берет U=
    Можно в массив сразу прописать определенные символы и он будет их выводить?
    а с помощью &line1[2] подставлять в нужные места значения из переменных?

    В моем экране 4 строки по 20 символов, но как я понял внутрене он организован как экран 2 строки по 40 символов. потому и обозначил 2 массива по 40 знакомест. или же все таки 4 масива делать на каждую строчку???
    --- Сообщения объединены, 10 ноя 2017 ---
    Не получается вывести значения в 3 и 4 строчки с помощью Line.


    А вот так все работает.
    char myStr[6]; // текстовый массив для текста
    dtostrf(real_w, 3, 0, myStr); //Подготовка 3 знакомест
    lcd.setCursor(35, 0); //Переводим курсор
    lcd.print(myStr); //выводим значение ватт
     
  13. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    char line1[40] = "U=12.0V I=1.5A Weig=2000g ";
    char line2[40] = "PWM=1000 STOP";

    dtostrf(realU, 4, 1, line1 + 2); //выводим значение напряжения
    line1[6] = 'V';
    dtostrf(realI, 4, 1, line1 + 10); //выводим значение тока
    line1[14] = 'A';
    dtostrf(real_weight, 4, 0, line1 + 26);
    line1[31] = 'g';

    почему то перестали показываться теперь напряжения. и ток. светит толлько Engine
    что не так то ???
     
  14. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    char line1[40] = "U=12.0V I=1.5A ";
    вот отсюда и берёт.
    Так и сделано.
    Не знаю. Всё зависит от библиотеки. Если она поддерживает 4-х строчные индикаторы - то можно использовать 4 массива по 20 символов.

    конструкция вида line1[14] = 'A' используется у меня чтобы забить нолик, который dtostrf добавляет в конец своего вывода. Поэтому длина вывода dtostrf (в нашем случае 4) + индекс начала вывода (в нашем случае 26) в сумме должны давать индекс нулевого байта (в нашем случае 30). А вы пишете 'g' в 31ый.
    А фих его знает. Полный код давайте :)
     
  15. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
  16. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Не понял.
    lcd.begin(16, 2); // инициализировать lcd
    У вас тут прямо написано - LCD 2 строки по 16 символов.

    Немного погуглил - вроде 4-х строчные дисплеи нормально поддерживает вот эта библиотека:
    https://github.com/marcoschwartz/LiquidCrystal_I2C
     
  17. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    эта инициализация не влияет, если принудительно выводить через код который закоментирован то 3 и 4 строчки работают. но если через масив то уже нет, хоть с инициализацией 16 : 2 хоть 20: 4 .
    Щас попробую новую библиотеку.
    --- Сообщения объединены, 10 ноя 2017 ---
    а вот этот код тогда выкинуть?
    Wire.begin();
    Wire.beginTransmission(0x3F);
    error = Wire.endTransmission();

    так как инициализация вот так проходит

    LiquidCrystal_I2C lcd(0x3F,20,4); // установите для ЖК-дисплея 0x27 0x3F для 16-ти символов и 2-строчного дисплея
     
  18. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Не работает через line.
    Зато работает вот так.

    dtostrf(real_weight, 4, 0, myStr); //Подготовка 5 знакомест
    lcd.setCursor(25, 0); //Переводим курсор
    lcd.print(myStr); //выводим значение вольт
    dtostrf(real_w, 3, 0, myStr); //Подготовка 5 знакомест
    lcd.setCursor(35, 0); //Переводим курсор
    lcd.print(myStr); //выводим значение вольт

    dtostrf(real_wg, 4, 0, myStr); //Подготовка 5 знакомест
    lcd.setCursor(26, 1); //Переводим курсор
    lcd.print(myStr); //выводим значение вольт

    Подскажите , как можно сделать чтоб когда зажимаеш кнопку то на месте надписи STOP можно было бы вывести какой нить параметр. тяга например?
     
  19. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Ну, почему бы и нет. У меня просто старая привычка - по возможности минимизировать обращения к периферии - сперва всё подготовь в памяти - потом пакетом шли на отображение.
    Да ровно так же. Просто выводить на это место нужное значение. А чтобы потом выводить туда STOP, делаете в разделе глобальных переменных строку:
    char * stop_line = "STOP";
    и потом выводите её через
    lcd.print(stop_line);
     
  20. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    я пробовал , на экране с большой частотой меняется stop с тем сто пытаюсь вывести. видно как бы два названия в одном месте одновременно.
    я просто не могу понять как прописать чтобы при нажатии кнопки начало выводить другой параметр на этом месте.
    как в условиях подменить char * stop_line = "STOP"; на real_weight например?
     
  21. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    коммитьте и показывайте :)
    --- Сообщения объединены, 10 ноя 2017 ---
    но примерно так:

    lcd.setCursor(куда надо);
    if (now_key3 == HIGH)
    {
    lcd.print(stop_line);
    Serial.println("STOP");
    } else {
    dtostrf(бла-бла-бла, myStr);
    lcd.print(myStr);
    Serial.println("RUN");
    }
     
Реклама. Купить это место.