Официальный сайт компании Arduino по адресу arduino.cc
Повёрнутый ? в Serial.print
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 20/05/2020 - 01:28
День добрый! Подскажите, что означает повёрнутый знак вопроса:
01:58:55.364 -> ⸮
Я понимаю какая-то ошибка в коде у меня, но может быть понимание этого знака ускорит нахождение ошибки...
Скорости сериал-монитора и в Serial.begin совпадают?
Да, скорости совпадают...
А какой код у этого знака (если хексом напечатать) ?
¿De verdad quieres saber eso? (Вы действительно хотите это знать?)
Вопрос в примере выбран не случайно - Вы задали странный вопрос (не имеющий отношения к Вашему коду), а сам код не привели. И какого ответа Вы ждёте? Мой ответ абсолютно точный :-)
¿De verdad quieres saber eso? (Вы действительно хотите это знать?)
позанудствую - если быть точным, в этом предложении обращение не на "Вы", а на "ты"
Ты действительно хочешь это знать?
У испанцев. аналогично нам, и в отличии от анлосаксов, есть разделение на фамильярное "ты" и вежливое "Вы"
:-)))
Какой код знака, если хексом напечатать, не знаю как узнать, ANSI кодировку такую не нашёл.
На счёт испанского знака, не то - знак повёрнут относительно вертикальной оси, а не горизонтальной:
Бывает такое, что должно вывести, например, значение поля структуры:
А выводит Data и бесконечное количество символов "⸮":
Кто сталкивался с таким, о чём это говорит...?
Если приводить код, то трудно будет в нём разобраться, да и схему подключения нужно сделать. Причём есть очень интересный момент для меня - в операторе выбора SWITCH если я поменяю местами case 0: и case 1: всё работает прекрасно... Приведу код нерабочий:
и рабочий:
Бывает такое, что должно вывести, например, значение поля структуры:
А выводит Data и бесконечное количество символов "⸮":
Кто сталкивался с таким, о чём это говорит...?
о том, что вы пытаетесь вывести на печать непечатные символы.
Непечатные символы... Тогда при каких условиях это может произойти...? В Serial.print вставляю ведь правильные аргументы по синтаксису... Что у меня не так может быть в коде. Отправить архивом весь код тогда что-ли... Может кто взглянет
Непечатные символы... Тогда при каких условиях это может произойти...?
Это происходит, когда вы слишком полагаетесь на компилятор. Зачем вы преобразуете аргументы в String? Что там в аргументах - числа? Символы, строки? массив? - для каждого типа аргументов делайте вывод отдельно в соответвии с типом
Хорошо, тогда что Вы скажите про нормальный вывод в остальных частях кода? Там я пишу также подобно как строку название переменной и её значение
выводит
Тут дело (в символах ⸮⸮⸮⸮⸮⸮⸮⸮⸮) в чём-то другом, в какой-то моей ошибке в коде, где я пока не могу разобраться...
Хорошо, тогда что Вы скажите про нормальный вывод в остальных частях кода?
Тут дело в чём-то другом, в какой-то моей ошибке в коде, где я пока не могу разобраться...
А что у вас памятью? Ее достаточно? Скетч то вообще большой?
Скетч небольшой, на Мега2560 6% всего занимает флеша и 10% используют глобальные переменные
Вы бы спросили - на каком языке товарищ записал строки в скетч.
Попрошу поподробнее об этом
AlexBajdin59rus, знаете что мне интересно? Вы ещё неделю будете тут плач Ярославны разводить или, наконец, снимете гриф секретности со своего скетча и покажете его нам?
Я реально не могу понять свою ошибку, уже по всякому тут пробую. Выше писал про интересный момент, который на мой взгляд кажется какой-то чепухой, а для остальных скажут что не может такого быть. Я могу выложить код, но как в нем разобраться без составления схемы всей? И ещё, как тут архивом выложить весь скетч?
А кому нужен "весь скетч"?
У Вас что-то не так печатается, так ведь?
Удалите половину скетча и посмотрите, проблема сохранилась? Если нет - вернитесь и удалите другу половину. От того, что осталось удалите ещё половину. И так пока не получите МИНИМАЛЬНЫЙ работающий скетч в котором проблема сохраняется (желательно без необходимости иметь какое-то железо).
Скорее всего, когда скетч с проблемой станет маленьким, Вы и сами всё поймёте. Если же нет - выкладывайте сюда маленький скетч демонстрирующий проблему (остальное-то зачем). Только работающий, чтобы, например, я мог его запустить и увидеть проблему сам.
Оно так всегда и делается - проблема локализуется во всё меньшем и меньшем кода пока код не станет совсем крохотным и очевидным.
Пока же тема выглядит так: в скетче, которого никто не видел что-то не так печатается. И чего Вы от такой темы ожидаете?
Ребята, всем спасибо! Вопрос снят, сам теперь не пойму как сделал... Закомментировал много чего, потом гляжу, у меня в одном из mode_1.h осталась по забывчивости декларация (или как правильно назвать функцию в этом файле), функцию которой я удалил из-за ненадобности в mode_1.ino. Удалив запись в mode_1.h и раскомментировав обратно часть кода всё заработало. Сам не понял как решил вопрос, потому что для интереса захотел вернуть обратно ситуацию, записав обратно в mode_1.h *левую* функцию, Мега отрабатывает как нужно... Если разберусь в старых версиях скетча отпишусь обязательно )
Закомментировал много чего, потом гляжу, ...
Это примерно то, о чём я писал Вам чуть выше.
Не ребята, у меня скоро или бзик по фазе будет или у меня руки кривые... Вот привожу часть кода, где мне и другим ясно, что похер где вставлена функция SerialPrintVAR();
Сама SerialPrintVAR(); вот:
БЛИН, КАКАЯ НАХЕР РАЗНИЦА, СКОЛЬКО БУДЕТ ЭТИХ SerialPrintVAR(); - ОНА ВЕЗДЕ ДОЛЖНА ОТРАБАТЫВАТЬ, ТАК БЛЯ В ПЕРВОМ ПРИВЕДЕНИИ КОДА (В ФУНКЦИИ void chang_mode(DATA_CONTROL *_Data_Control)) раскомментированием/закомментированием SerialPrintVAR(); то работает АРДУИНО нормально, то не работает, причём возвращаю обратно двойной слеш как было, работает противоположно (если не работало, то работает и наоборот).
Также вопрос, я думаю что также похер что в loop()
похер что когда наступил mode == mode_1 в переменные VAR... должны читаться из флеша и не мешать нормальной работе программе (выражается что выводится перевернутый "?" и ардуино как-бы тормозит, также и про SerialPrintVAR(); описанный выше). У меня вопрос: ARDUINO IDE у меня глючная (1.8.12 версия) или может задрочил Мегу2560 свою? Сколько раз можно прошивать Мегу, вроде 10000 раз гарантированно?
Не ребята, у меня скоро или бзик по фазе будет
Похоже, что уже.
Я же Вам ясно писал
А Вы что выложили? Запустить я это не могу, а сидеть, пялиться на него и догадываться, что у Вас там ещё написано - увольте.
Перечитайте тот мой пост ещё раз, если действительно нужна помощь. А если не нужна, а только в жилетку поплакаться, тогда продолжайте.
Еще раз всем привет! Продолжу о своей проблеме. Я по совету Евгения так и сделал, уменьшил код до минимума. Было у меня 4 режима управления двигателем, удалил файлы с функциями начиная со второго режима, первый режим работал прекрасно, потихоньку добавлял второй режим. Но ошибка в работе сохраняется. Вы будите смеяться наверное, но для меня пока реально загадка: как при добавлении операторов переключателей CASE в SWITCH, происходит ошибка. Выглядит это так:
Теперь смотрим с самого верха. При нажатии клавы 4 * 4 сначала определяется режим MODE, у меня их 2.
Кнопки (функции) первого режима работают хорошо. Кнопкой 2 включаем второй режим. Далее, когда включен режим №2, при нажатии, допустим кнопки №1 (вкл/выкл драйвера двигателя) или кнопки №2 (переключение на режим №1) в мониторе порта должно быть следующее:
но в мониторе порта есть только это:
Теперь вопрос знатокам: как может быть такое, если закомментирую строки с переключателями case 3: -> case 16:, всё работает и выводится в монитор как положено...?
Также работает без ошибок и выводится нормально в монитор, если я вырежу полностью case mode_0:
и помещу ниже case 1:, то есть поменяю местами обработчики case 0 и case 1. Для наглядности покажу функцию переключения режимов кнопкой №2:
MAX_MODE, то есть если стало 2, то сделаем mode == 0. Я вставлял Serial.print для проверки изменения Data_Control.data_lcd.mode, там изменяется как надо. Но вот когда этот режим равен №1, эти Serial.print не работают, о чем я писал выше.
Всем заинтересовавшимся в такой интересной штуке могу выложить код через электронку (abajdin_59rus@mail.ru). Также мой тел 89125954026. Сделайте дозвон - позвоню сам. Здесь я могу выложить код, но куча файлов и много текста не уместятся нормально на форуме. Евгений, я бы очень хотел получить Вашу помощь, мы можем списаться через электронку или по телефону? Нужно для этого ARDUINO MEGA, LCD 20*4, клава 4*4 или даже одна кнопка, плата для связи LCD и ARDUINO по I2C.
Огромное спасибо откликнувшимся!
AlexBajdin59rus, вы, похоже, не понимаете, что вам пишут. Евгений что просил? - Чтобы вы упростили и уменьшили код до такого размера, чтобы он не требовал кучи файлов и мог быть выложен в форум. А вы опять вывалили какие-то отдельные функции к кучей путанных обьяснений.
Не буду говорить за Евгения, но от меня вам совет - упростите код только до вложенных switch и case, удалите нафиг LCD экран и все свои зубодробительные функции типа chang_mode() chang_step() и так далее. Замените их просто выводом в монитор, примерно так:
В итоге вам нужно получить скетч длиной страничку или две, не больше - и без использования каких-либо внешнизх файлов и библиотек.
Вот такой код и выложите в форум.
B707 всё правильно написал, но я ещё дополню. Ключевым в моём совете было: "чтобы, например, я мог его запустить и увидеть проблему сам". Т.е. от Вас ждут цельного кода, а не кусков.
Вот Вы пишете
Значит, ещё уменьшайте. Сократите Вы его до полусотни строк, тогда либо сам разберётесь, либо Вам помогу. Но продираться сквозь Ваши куски (по пути догадываясь, а что там ещё есть) никто не будет
Ребята, написал здесь было много чего хотел сказать, но всё случайно стёрлось, переписывать очень много, поэтому напишу теперь кратко. Уменьшил код по максимальному, далее уменьшать - работает без ошибок. Но чтоб вы не думали что я мозги компассирую, работает без ошибок тогда, когда я удаляю код, который по логике алгоритма не работает. То есть, например, не нажал кнопку и по логике мы не попали в функцию обработки этой кнопки и при удаление этого кода всё отлично. Для тестирования достаточно замкнуть выводы А9 и А12 между собой. На PORTK у меня посажена клава 4*4. Это имитация нажатия кнопки переключения режимов. Файл MAIN:
Файл с объявлениями пременных:
Файл с константами:
Инициализация
Функции LCD
Обработки нажатия кнопок
Режим_0
Режим_1
Рабочие функции
Скажите, а зачем вам вывод в serial если есть дисплей? Я так думаю не успевает прерывания uart отрабатывать, поэтому и мусор в мониторе порта. Выделите на lcd пару символов/мест куда выводите свои режимы работы, будет гораздо нагляднее. Итоговое устройство будет же работать без монитора порта?
Serialom я начал пользоваться когда у меня выявилась ошибка в работе, выяснял значения переменных. Было это как задержка обновления экрана либо вообще не обновлялся экран
сделаете в проекте что нибудь типа
и выводите в LCD отладочную информацию, потом в готовом проекте комментируйте строку и все будет в рабочем режиме.
сделаете в проекте что нибудь типа
и выводите в LCD отладочную информацию, потом в готовом проекте комментируйте строку и все будет в рабочем режиме.
Примерно понял Вашу мысль... но я думаю, что если в относительно простом моём коде не работает, то на ещё одном дополнительном режиме всё останется по прежнему.
Примерно понял Вашу мысль... но я думаю, что если в относительно простом моём коде не работает, то на ещё одном дополнительном режиме всё останется по прежнему.
скажите, а зачем вы вообще сюда пишете?
Упрощать код вы не стали. любые советы отвергаете, сами ошибку тоже не ищете. С вашим настроем остается только завернутся в простыню и ползти на кладбище, шансов решить проблему у вас нет.
Вот на что прошу обратить внимание. Я уже выложил свой код, вчера подробно описывал всё, но стерлось случайным образом, поэтому написал второпях. Теперь хочу поподробнее. Для меня кажется странной работа Ардуино и я уже думаю, не глючная ли она у меня. Мне её продали как б/у, может её 5 лет использовали и она теперь некорректно прошивается... Дело в чём, если смотреть на код:
в цикле loop проверяется взведёный флаг факта нажатия кнопки. Нажата, отключаем Таймер_2, проверяем через switch (Data_Control.data_lcd.mode), в каком режиме мы находимся, неважно в каком режиме, по коду кнопки попадаем в определённый case X. Обработали нажатие своей функцией, выходим из SWITCH, опускаем флаг нажатой кнопки (change_butt_16), взводим флаг прохода антидребезга по отжатию кнопки (finish), включаем Таймер_2, заходим в проверку взведённого флага обновления данных на экране. Если взведён, заходим в update_lcd(&Data_Control); далее опускаем флаг Data_Control.upd_lcd. Так вот вопрос: почему, если я закомментирую case какой-нибудь (уберу обработчик нажатия определённой кнопки) и даже не нажимаю на эту кнопку, моя программа работает на ура? Я не вижу логики... Я думаю, Вы со мной согласны на этот счёт - нет обработчика, нет реакции на нажатие кнопки, так причём тут такое изменение работы программы с ошибкой (или как это назвать)? Это 1-ый момент, теперь подобный момент второй: я урезал по просьбе код, но реально, меньше не могу, так как программа в этом случае работает хорошо. Теперь следующий код (функция update_lcd();) по обновлению данных экрана который был у меня до этого:
и сравнить его с последним, урезанным:
В последнем примере оставлены только флаги обновления параметров, отображаемых в экране. Что тут сказать, опишу следующую странность для меня... Смотрим на предпоследний код, когда мы заходим в update_lcd(); проверяется каждый флаг обновления параметра на экране, если он взведён, значит на экране изменяем значение параметра. Что будет, если, допустим удалим код направления вращения шаговика
Ничего не будет! Флаг останется взведённым и всегда таким останется. Просто по выходу из update_lcd(); опустится флаг
и мы не зайдем сюда больше, пока не нажмём кнопку и не взведётся ещё какой-нибудь флаг обновления параметров. Вопрос: так почему при удалении кода одного или нескольких обработчиков флагов (допустим направления UPD_DIR, микрошага upd_size_step, скорости upd_rpm) программа отрабатывает нормально - никакого мусора в мониторе порта и отображение режима на экране происходит и даже без задержки?
Я оставил флаги, потому что удалив их обработку (вчера постепенно урезая свой код до минимума) программа работает без проблем. Здесь я тоже никакой логики не вижу и поэтому прошу помощи! Либо я действительно не вижу ошибки в коде (и я снимаю перед Вами шляпу), либо у меня что не так с Ардуино... Не прошу теперь писать варианты почему так происходит, а реально создать скетч по моему коду и протестировать на Ардуино Мега. Можно без LCD экрана, и без клавы 4*4, смотреть в монитор порта, имитация нажатия этой проблемной кнопки (смена режима) это замыкание выводов А9 и А12. Этот порт (PORTK) подключен к клаве. Моя почта abajdin_59rus@mail.ru для более подробной связи и желательно по телефону, так как я такого мнения, что лучше подробнее и намного быстрее и экономнее в наше время объясниться по аудио. 8-912-59 54 026. Могу сам позвонить. Всем Спасибо!
вы вообще себя слышите? Вы же ни разу не выложили связного кода от начала до конца - и вы просите кого-то собрать макет для проверки? Что проверять то, отдельные функции с кучей взаимопересекающихся переменных?
Отправляйтесь в платный раздел - может кто-то возьмется отлаживать ваш проект тысяч этак за 15-20... и то сомневаюсь.
Я могу выслать код целиком, напишите мне на почту. У меня в каждом отдельном файле *.ino описаны функции по тематике, LCD например, или отработке нажатия кнопок каждого из режимов. Я пока связанный код не знаю как сделать, пробовал, но у меня со структурами сразу же возникли сложности. Думаю, по описанным странным для меня ошибкам есть люди заинтересовавшимися в них, пусть напишут на почту, там вышлю код
Примерно понял Вашу мысль... но я думаю, что если в относительно простом моём коде не работает, то на ещё одном дополнительном режиме всё останется по прежнему.
скажите, а зачем вы вообще сюда пишете?
Упрощать код вы не стали. любые советы отвергаете, сами ошибку тоже не ищете. С вашим настроем остается только завернутся в простыню и ползти на кладбище, шансов решить проблему у вас нет.
Я упростил код до минимума, насколько смог (Дальнейшее удаление частей кода приводит к нормальной работе, но какое-то оно хаотичное, нет определённой связи, не вижу её по описанным ошибкам). Ошибку искал, начал заново, постепенно добавил второй режим, и вот когда он уже почти весь, происходит для меня непонятная странность, вычислить причину которую не могу. Настрой реально упал, проект замер на месте, а сейчас такая возможность кодить, пока самоизолируемся...
AlexBajdin59rus, вы реально не слышите, говорю же - быстродействия скорее всего не хватает, симптомы знакомые, избавьтесь от uart совсем.