Всем привет. Помогите с кодом пожалуйста. Не могу понять как правильно написать некоторые моменты в коде. Вот код, который я использую. Я использую плату Arduino Mega.
Код:
String tempstr;
void setup() {
Serial.begin(9600); Serial1.begin(9600);
}
void loop() {
if (Serial.available()) { // If anything comes in Serial (USB), Serial1.write(Serial.read()); // read it and send it out Serial1 }
if (Serial1.available()) { // If anything comes in Serial1 (pins 0 & 1) Serial.write(Serial1.read()); // read it and send it out Serial (USB)
tempstr=Serial1.readString(); }
}
То что приходит в порт записывается в переменную tempstr. Если данные приходящие в порт меняются то в переменной всё остается как при первой записи. Помогите пожалуйста.
Последний раз редактировалось Vikz Вс июн 02, 2024 18:38:06, всего редактировалось 3 раз(а).
if (Serial.available()>0) { Serial1.write(Serial.read()); }
while (Serial1.available() > 0) { // ПОКА есть что то на вход strData += (char)Serial1.read(); // забиваем строку принятыми данными recieved = true; // поднять флаг что получили данные delay(2); // ЗАДЕРЖКА. Без неё работает некорректно! } if (recieved) { // если данные получены Serial.println(strData); // вывести // очистить recieved = false; // опустить флаг }
Сделал вот так вот. Теперь текст обновляется. В чем может быть хотя бы предположительно причина вывода текста в таком виде? M1+00000001 M2+00000003 MT+00000082 MK+00000000 MF+R e m a s t e r Что в порт что на экран пишет с пробелами.
Как в оригинале? Нууу наверное по правильному должно быть без пробелов а в каком оригинале и где посмотреть? Я только вижу то что выдает в порт и на экран TFT. И вот интересно что тестирую на компухтере и в порту нет пробелов а на экранчике есть. На стареньком нетбуке всё это тестировал и что в порт пробелы ставит что на экранчик. Что творится вообще не пойму.
Цитата:
Vikz писал(а):
Если данные приходящие в порт меняются то в переменной всё остается как при первой записи. Помогите пожалуйста.
не понял смысла вопроса
Этот вопрос вроде бы решился я чуть выше код прикрепил. А в целом была проблема с тем что меняю командой мелодию на мп3 а в порт приходит то что записалось при первом запуске.
Вылезла еще странная странность.
Код:
if (recieved==true) { // если данные получены Serial.println(strData); // вывести
Этот кусок по идее единожды опрашивается и то после того как данные с порта записались в переменную. Казалось бы выведем их в порт и на экран но нет. Что туда что туда приходит какой то огрызок от названия. Что опять я не так делаю не пойму.
никто тоже не поймет, потому что никто не знает, что ты там в порт отправляеш и что от туда и как приходит в ардуине есть буфер на 60 байт вроде если тебе надо его очистить принудительно, то есть команда flush вроде
_________________ тематические ответы только в форуме, в приват не пишите
Всем привет. Помогите с кодом пожалуйста. Не могу понять как правильно написать некоторые моменты в коде. Вот код, который я использую. Я использую плату Arduino Mega.
Код:
#define LCD_CS 33 // Chip Select goes to Analog 3 #define LCD_RS 15 // LCD_RS = Register Select or LCD_CD = Command/Data goes to Analog 2 #define LCD_WR 4 // LCD Write goes to Analog 1 #define LCD_RD 2 // LCD Read goes to Analog 0 #define LCD_RESET 32 // Can alternately just connect to Arduino's reset pin
#define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF
if (Serial.available()>0) { Serial1.write(Serial.read()); }
while (Serial1.available() > 0) { if(gate==false) {delay(100); gate=true;} // ПОКА есть что то на вход strData += (char)Serial1.read(); // забиваем строку принятыми данными recieved = true; // поднять флаг что получили данные delay(2); // ЗАДЕРЖКА. Без неё работает некорректно! } if (recieved==true) { // если данные получены Serial.println(strData); // вывести
То что приходит в порт записывается в переменную tempstr. Если данные приходящие в порт меняются то в переменной всё остается как при первой записи. Помогите пожалуйста.
никто тоже не поймет, потому что никто не знает, что ты там в порт отправляеш и что от туда и как приходит в ардуине есть буфер на 60 байт вроде если тебе надо его очистить принудительно, то есть команда flush вроде
Что я отправляю в порт значит рассказываю(я отправил выше код на полную версию тестовую). Так вот в сетапе отправляю команду Serial1.println("AT+CM03"); в мп3 модуль. Команда нужна что бы модуль перешел из блютуха в режим плеера. Далее плеер (сразу проигрывает мелодию на которой остановился в прошлый раз) шлет всякие нужные штуки типо номер трека количество треков и.т.д ну и название. Далее есть при опросе порта там дилей на 100мс ну ничего лучше я не придумал но после этого трек стал выдавать полностью а не огрызок. Тоже самое я сделал по коду ниже где опрос кнопки и команда Serial1.println("AT+CC"); это на переключение следующего трека. Наверное это супер по идиотски выглядит но хотя бы работает так. Теперь вот вопрос как победить пробелы в названии треков. И главное только имя трека с пробелами остальная инфа без них. Я уж думал что сам проигрыватель как то так шлет но при просмотре сириал порта с компа там нет пробелов. Про буфер тож знаю и походу от этого оч длинные имена не влезают а вместо .mp3 идут кракозябры в конце названия. Ну вот как то так непонятка с пробелами этими.
Может, двухбайтная кодировка. Формат данных известен? Если там классическая FAT, то запись коротких и длинных имен различается. Смотрите спецификацию на SD-карты. И вообще, всё это можно было решить парой экспериментов, да и kalobyte ранее совершенно верно спросил: как в оригинале? Оригинал смотрится любым HEX-редактором
тебе нужно подключить терминал к твоему модулю и руками слать туда команды и считывать ответ и ччтобы твой терминал показывал скрытые не аски символы, которые ты видиш как пробелы возможно и правда модуль выдает названия треков в утф8 или еще какой херне
это называется отладка как только ты научишся управлять руками модулем и будеш видеть все символы, что он возвращает и терминал там еще должен тебе показывать точное время с миллисекундами между уходом и приходом ответов, то будеш знать, как правильно работать с модулем и напишеш код рабочий
_________________ тематические ответы только в форуме, в приват не пишите
Может, двухбайтная кодировка. Формат данных известен? Если там классическая FAT, то запись коротких и длинных имен различается. Смотрите спецификацию на SD-карты. И вообще, всё это можно было решить парой экспериментов, да и kalobyte ранее совершенно верно спросил: как в оригинале? Оригинал смотрится любым HEX-редактором
Извиняюсь но тут я затрудняюсь ответить. Единственное что я обнаружил это следующее. Я взял какие то мп3 когда то скачаные с короткими названиями. Для теста кинул на флешку и о чудо они выводятся без пробелов. Если же их переименовать то всё опять ломается. Я так понимаю что какие то кодировки еще присутствуют текстовые которые не нравятся модулю что ли. Хз происходит что то мистическое. Под линуксоидами зайти что ли попробовать имена поменять.
Причём тут линукс, зачем пробовать... Файловая система флэшки, карты известна и легко смотрится под любой ОС и описана в той или иной степени. Документ выше я прикладывал на FAT. Но с учётом информации, что древние короткие без пробелов, а новые с пробелами - это однозначно кодировка файловой системы, и надо просто удалить лишние пробелы (байты) в принятых данных.
Причём тут линукс, зачем пробовать... Файловая система флэшки, карты известна и легко смотрится под любой ОС и описана в той или иной степени. Документ выше я прикладывал на FAT. Но с учётом информации, что древние короткие без пробелов, а новые с пробелами - это однозначно кодировка файловой системы, и надо просто удалить лишние пробелы (байты) в принятых данных.
Я пытался понять что в доке про файловые системы но не вышло понять. Файловая система на флешке fat32.
Цитата:
надо просто удалить лишние пробелы (байты) в принятых данных
Можно этот момент подробнее? Не сталкивался с таким и хз как оно делается.
прежде, чем присваивать данные к strData, проверить, является ли прочитанный символ нужным символом, или не нужным. Проверка делается множеством способом, например:
Код:
if (a == b) { c } else { d }
Это описано в любой книжке, хз как Вы их читали. Это даже уже есть в Вашем коде, хз как Вы его писали.
прежде, чем присваивать данные к strData, проверить, является ли прочитанный символ нужным символом, или не нужным. Проверка делается множеством способом, например:
Код:
if (a == b) { c } else { d }
Это описано в любой книжке, хз как Вы их читали. Это даже уже есть в Вашем коде, хз как Вы его писали.
Всё просто я не великий кодер и не учился Мои познания скромные а часть кода просто взята на просторах. Наверное надо было сразу это пояснить что уровень моего программинга где то в начале пути. Ну оттого я и на форуме спрашиваю ведь это логично же
Неа, не логично. Это долго, и как можете заметить, токсично. И нет ведь гарантии, что мои или чьи-то ответы - верны. Логично всё-таки полноценно пройти обучение, с книжкой, потом с другой книжкой и т.д. Книг, всемирно известных авторов, не так уж много, Керниган, Ритчи, Шилдт, Кнут... здесь в "Сундуке" есть. Можно не знать FAT (я сам-то лишь недавно разобрался, когда потребовался) и всякое такое, но язык программирования знать обязательно.
Неа, не логично. Это долго, и как можете заметить, токсично. И нет ведь гарантии, что мои или чьи-то ответы - верны. Логично всё-таки полноценно пройти обучение, с книжкой, потом с другой книжкой и т.д. Книг, всемирно известных авторов, не так уж много, Керниган, Ритчи, Шилдт, Кнут... здесь в "Сундуке" есть. Можно не знать FAT (я сам-то лишь недавно разобрался, когда потребовался) и всякое такое, но язык программирования знать обязательно.
Смотрите вот я изучил кучу книг но зачем тогда форумы? Зачем этот форум где люди спрашивают что то? Зачем вообще что то у кого то спрашивать в жизни если пойди и прочти книгу?
Код:
И нет ведь гарантии, что мои или чьи-то ответы - верны.
Я вам верю!
Цитата:
Логично всё-таки полноценно пройти обучение, с книжкой
Не сочтите меня ленивым но вот в чем дело. Я не стремлюсь стать великим программистом. Я даже код своих поделок никому не покажу потому что там нет ничего нового. Я даже уверен что (глядя на мой код) мне скажут мол это не твое займись другим чем нибудь. Многим просто хочется делать поделки и что бы они работали и помогали в жизни. Ну к примеру автоматическое включение света в комнате по событию. По не стандартному событию и такой функционал не заложен в покупных устройствах к примеру(хз включение света потому что чайник нагрелся при этом на улице -20 . Нет если бы у меня была цель устроится на работу и жить только этим я бы конечно посвятил часть жизни этому. В общем не пытаюсь отнять чей то хлеб просто делаю маленькие поделки для себя.
Я не собирался стать гонщиком формулы 1, дальнобойщиком и автоконструктором. Но выучил правила дорожного движения и изучил устройство автомобиля. Я не останавливаю других автомобилистов на каждом повороте с вопросом, каким поворотником мигать и как, и не обращаюсь на форум автомобилистов, чтобы узнать, как заправить автомашину. Аналогия понятна? Ваши вопросы - это не Олимп программирования. Это базовые, необходимые моменты.
И форум - это не вместо книг, а в дополнение им.
Ну, по крайней мере, теперь понятны вопли про мерзкие российские форумы и прекрасные иностранные. У нас кстати, точно такая же мерзкая система обучения в школах была, и прекрасная - в иностранных. В итоге моё поколение знает механику движения небесных тел, хоть это и нафиг не нужно, а иностранцы не знают, как вколотить гвоздь, хоть это и нужно.
Так что, учите английский. На русских форумах Вам будет крипово, кринжово и токсично.
Я не собирался стать гонщиком формулы 1, дальнобойщиком и автоконструктором. Но выучил правила дорожного движения и изучил устройство автомобиля. Я не останавливаю других автомобилистов на каждом повороте с вопросом, каким поворотником мигать и как, и не обращаюсь на форум автомобилистов, чтобы узнать, как заправить автомашину. Аналогия понятна? Ваши вопросы - это не Олимп программирования. Это базовые, необходимые моменты.
И форум - это не вместо книг, а в дополнение им.
Ну, по крайней мере, теперь понятны вопли про мерзкие российские форумы и прекрасные иностранные. У нас кстати, точно такая же мерзкая система обучения в школах была, и прекрасная - в иностранных. В итоге моё поколение знает механику движения небесных тел, хоть это и нафиг не нужно, а иностранцы не знают, как вколотить гвоздь, хоть это и нужно.
Так что, учите английский. На русских форумах Вам будет крипово, кринжово и токсично.
Странно что вас так зацепило мое высказывание о российском сообществе. Нынешнее поколение знает механику движения небесных тел? Мы ведь живем в настоящем и мое высказывание было про настоящее время. Что там преподают в школах иностранных я не знаю однако пользуемся мы благами этих тупых не знающих про небесные тела и как вколотить гвоздь. Я ведь вам в личку написал ответ с обьяснением. Почему просто не быть людьми и зачем выпячивать свое чсв вот с чем я часто сталкиваюсь. И вы уж извините но сообщество программистов этим очень грешит а жаль. Когда меня просили помочь в той сфере где я больше знаю то мне просто было приятно обьяснить что да как. Понимаете чувство что помог человеку это классно тем более что мне это ничего не стоит Приветливость и общение вместо "о опять этот отпочковался что ли?". В целом я вас понял но вы меня явно не хотите и не захотите уж так вы устроены. Мы можем и дальше продолжать но зная программистов доказывать им что то бесполезно. Я всё знаю я самый умный и есть только та истина которую я говорю Сталкивался не раз в живом общении и наслушался Хотя с вами я бы пообщался но мы тут уже и так не по теме много говорим. Я боюсь модераторы не оценят.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения