| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Помогите разобратся с кодом пожалуйста. https://radiokot.ru/forum/viewtopic.php?f=66&t=193631 |
Страница 1 из 4 |
| Автор: | Vikz [ Сб июн 01, 2024 20:26:59 ] |
| Заголовок сообщения: | Помогите разобратся с кодом пожалуйста. |
Всем привет. Помогите с кодом пожалуйста. Не могу понять как правильно написать некоторые моменты в коде. Вот код, который я использую. Я использую плату 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. Если данные приходящие в порт меняются то в переменной всё остается как при первой записи. Помогите пожалуйста. |
|
| Автор: | roman.com [ Вс июн 02, 2024 10:31:27 ] |
| Заголовок сообщения: | Re: BT_201 Помогите разобратся с модулем пожалуйста. |
в соседнем форуме BT201 подробно разобрали... viewtopic.php?f=62&t=193487 зачем плодить кучу одинаковых тем... |
|
| Автор: | Vikz [ Вс июн 02, 2024 11:00:08 ] |
| Заголовок сообщения: | Re: BT_201 Помогите разобратся с модулем пожалуйста. |
в соседнем форуме BT201 подробно разобрали... viewtopic.php?f=62&t=193487 зачем плодить кучу одинаковых тем... Не увидел ответы на свои вопросы. |
|
| Автор: | Martian [ Вс июн 02, 2024 23:46:22 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
То, что приходит в порт, пишется в аргумент функции, а не в переменную tempstr. Пример есть здесь: https://www.arduino.cc/reference/en/lan ... available/ https://www.arduino.cc/reference/en/lan ... eadstring/ И да, я из России, если что. А то, может, тебе омерзительно будет пользоваться информацией от российского сообщества, тогда не пользуйся. С переходом по ссылкам тоже проблемы? Тогда и справку не смотри. |
|
| Автор: | Vikz [ Пн июн 03, 2024 01:19:06 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Код: 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 Что в порт что на экран пишет с пробелами. |
|
| Автор: | kalobyte [ Пн июн 03, 2024 02:55:38 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Vikz писал(а): Что в порт что на экран пишет с пробелами. так а в оригинале как оно есть? Vikz писал(а): Если данные приходящие в порт меняются то в переменной всё остается как при первой записи. Помогите пожалуйста. не понял смысла вопроса |
|
| Автор: | Vikz [ Пн июн 03, 2024 13:56:33 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Цитата: Vikz писал(а): Что в порт что на экран пишет с пробелами. так а в оригинале как оно есть? Как в оригинале? Нууу наверное по правильному должно быть без пробелов а в каком оригинале и где посмотреть? Я только вижу то что выдает в порт и на экран TFT. И вот интересно что тестирую на компухтере и в порту нет пробелов а на экранчике есть. На стареньком нетбуке всё это тестировал и что в порт пробелы ставит что на экранчик. Что творится вообще не пойму. Цитата: Vikz писал(а): Если данные приходящие в порт меняются то в переменной всё остается как при первой записи. Помогите пожалуйста. не понял смысла вопроса Этот вопрос вроде бы решился я чуть выше код прикрепил. А в целом была проблема с тем что меняю командой мелодию на мп3 а в порт приходит то что записалось при первом запуске. Вылезла еще странная странность. Код: if (recieved==true) { // если данные получены Serial.println(strData); // вывести recieved = false; // опустить флаг tft.fillScreen(BLUE); tft.setCursor(0, 10); tft.setTextColor(WHITE); tft.setTextSize(2); tft.print(strData); strData = ""; // очистить } Этот кусок по идее единожды опрашивается и то после того как данные с порта записались в переменную. Казалось бы выведем их в порт и на экран но нет. Что туда что туда приходит какой то огрызок от названия. Что опять я не так делаю не пойму. |
|
| Автор: | kalobyte [ Вт июн 04, 2024 16:32:23 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
никто тоже не поймет, потому что никто не знает, что ты там в порт отправляеш и что от туда и как приходит в ардуине есть буфер на 60 байт вроде если тебе надо его очистить принудительно, то есть команда flush вроде |
|
| Автор: | Vikz [ Вт июн 04, 2024 23:53:15 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Всем привет. Помогите с кодом пожалуйста. Не могу понять как правильно написать некоторые моменты в коде. Вот код, который я использую. Я использую плату 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 //#include <SPI.h> // f.k. for Arduino-1.5.2 //#include "Adafruit_GFX.h"// Hardware-specific library ---------- #include <MCUFRIEND_kbv.h> MCUFRIEND_kbv tft; #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF String strData = ""; boolean recieved; boolean gate=false; void setup() { Serial.begin(9600); Serial1.begin(9600); tft.reset(); //hardware reset uint16_t ID = tft.readID(); // if (ID == 0xD3D3) ID = 0x9481; // write-only shield tft.begin(ID); tft.setRotation(3); tft.fillScreen(BLUE); pinMode(22, INPUT); digitalWrite(22, LOW); delay(3000); Serial1.println("AT+CM03"); } void loop() { 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); // вывести tft.fillScreen(BLUE); tft.setCursor(0, 10); tft.setTextColor(WHITE); tft.setTextSize(2); tft.print(strData); strData = ""; // очистить recieved = false; // опустить флаг } if(digitalRead(22)==HIGH) { delay(200); Serial1.println("AT+CC"); delay(100); } } То что приходит в порт записывается в переменную tempstr. Если данные приходящие в порт меняются то в переменной всё остается как при первой записи. Помогите пожалуйста. Добавлено after 30 minutes 18 seconds: никто тоже не поймет, потому что никто не знает, что ты там в порт отправляеш и что от туда и как приходит в ардуине есть буфер на 60 байт вроде если тебе надо его очистить принудительно, то есть команда flush вроде Что я отправляю в порт значит рассказываю(я отправил выше код на полную версию тестовую). Так вот в сетапе отправляю команду Serial1.println("AT+CM03"); в мп3 модуль. Команда нужна что бы модуль перешел из блютуха в режим плеера. Далее плеер (сразу проигрывает мелодию на которой остановился в прошлый раз) шлет всякие нужные штуки типо номер трека количество треков и.т.д ну и название. Далее есть при опросе порта там дилей на 100мс ну ничего лучше я не придумал но после этого трек стал выдавать полностью а не огрызок. Тоже самое я сделал по коду ниже где опрос кнопки и команда Serial1.println("AT+CC"); это на переключение следующего трека. Наверное это супер по идиотски выглядит но хотя бы работает так. Теперь вот вопрос как победить пробелы в названии треков. И главное только имя трека с пробелами остальная инфа без них. Я уж думал что сам проигрыватель как то так шлет но при просмотре сириал порта с компа там нет пробелов. Про буфер тож знаю и походу от этого оч длинные имена не влезают а вместо .mp3 идут кракозябры в конце названия. Ну вот как то так непонятка с пробелами этими. |
|
| Автор: | Martian [ Ср июн 05, 2024 00:32:48 ] | ||
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. | ||
Может, двухбайтная кодировка. Формат данных известен? Если там классическая FAT, то запись коротких и длинных имен различается. Смотрите спецификацию на SD-карты. И вообще, всё это можно было решить парой экспериментов, да и kalobyte ранее совершенно верно спросил: как в оригинале? Оригинал смотрится любым HEX-редактором
|
|||
| Автор: | kalobyte [ Ср июн 05, 2024 05:53:26 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
тебе нужно подключить терминал к твоему модулю и руками слать туда команды и считывать ответ и ччтобы твой терминал показывал скрытые не аски символы, которые ты видиш как пробелы возможно и правда модуль выдает названия треков в утф8 или еще какой херне это называется отладка как только ты научишся управлять руками модулем и будеш видеть все символы, что он возвращает и терминал там еще должен тебе показывать точное время с миллисекундами между уходом и приходом ответов, то будеш знать, как правильно работать с модулем и напишеш код рабочий |
|
| Автор: | Vikz [ Ср июн 05, 2024 11:30:59 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Может, двухбайтная кодировка. Формат данных известен? Если там классическая FAT, то запись коротких и длинных имен различается. Смотрите спецификацию на SD-карты. И вообще, всё это можно было решить парой экспериментов, да и kalobyte ранее совершенно верно спросил: как в оригинале? Оригинал смотрится любым HEX-редактором Извиняюсь но тут я затрудняюсь ответить. Единственное что я обнаружил это следующее. Я взял какие то мп3 когда то скачаные с короткими названиями. Для теста кинул на флешку и о чудо они выводятся без пробелов. Если же их переименовать то всё опять ломается. Я так понимаю что какие то кодировки еще присутствуют текстовые которые не нравятся модулю что ли. Хз происходит что то мистическое. Под линуксоидами зайти что ли попробовать имена поменять. |
|
| Автор: | Martian [ Ср июн 05, 2024 11:46:02 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Причём тут линукс, зачем пробовать... Файловая система флэшки, карты известна и легко смотрится под любой ОС и описана в той или иной степени. Документ выше я прикладывал на FAT. Но с учётом информации, что древние короткие без пробелов, а новые с пробелами - это однозначно кодировка файловой системы, и надо просто удалить лишние пробелы (байты) в принятых данных. |
|
| Автор: | Vikz [ Ср июн 05, 2024 12:01:25 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Причём тут линукс, зачем пробовать... Файловая система флэшки, карты известна и легко смотрится под любой ОС и описана в той или иной степени. Документ выше я прикладывал на FAT. Но с учётом информации, что древние короткие без пробелов, а новые с пробелами - это однозначно кодировка файловой системы, и надо просто удалить лишние пробелы (байты) в принятых данных. Я пытался понять что в доке про файловые системы но не вышло понять. Файловая система на флешке fat32. Цитата: надо просто удалить лишние пробелы (байты) в принятых данных Можно этот момент подробнее? Не сталкивался с таким и хз как оно делается. |
|
| Автор: | Martian [ Ср июн 05, 2024 12:08:48 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Vikz писал(а): Можно этот момент подробнее? Не сталкивался с таким и хз как оно делается. Код: strData += (char)Serial1.read(); // забиваем строку принятыми данными прежде, чем присваивать данные к strData, проверить, является ли прочитанный символ нужным символом, или не нужным. Проверка делается множеством способом, например:Код: if (a == b) { c } else { d } Это описано в любой книжке, хз как Вы их читали. Это даже уже есть в Вашем коде, хз как Вы его писали. |
|
| Автор: | Vikz [ Ср июн 05, 2024 12:15:56 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Vikz писал(а): Можно этот момент подробнее? Не сталкивался с таким и хз как оно делается. Код: strData += (char)Serial1.read(); // забиваем строку принятыми данными прежде, чем присваивать данные к strData, проверить, является ли прочитанный символ нужным символом, или не нужным. Проверка делается множеством способом, например:Код: if (a == b) { c } else { d } Это описано в любой книжке, хз как Вы их читали. Это даже уже есть в Вашем коде, хз как Вы его писали. Всё просто я не великий кодер и не учился |
|
| Автор: | Martian [ Ср июн 05, 2024 12:46:59 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Неа, не логично. Это долго, и как можете заметить, токсично. И нет ведь гарантии, что мои или чьи-то ответы - верны. Логично всё-таки полноценно пройти обучение, с книжкой, потом с другой книжкой и т.д. Книг, всемирно известных авторов, не так уж много, Керниган, Ритчи, Шилдт, Кнут... здесь в "Сундуке" есть. Можно не знать FAT (я сам-то лишь недавно разобрался, когда потребовался) и всякое такое, но язык программирования знать обязательно. |
|
| Автор: | Vikz [ Ср июн 05, 2024 13:17:16 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Неа, не логично. Это долго, и как можете заметить, токсично. И нет ведь гарантии, что мои или чьи-то ответы - верны. Логично всё-таки полноценно пройти обучение, с книжкой, потом с другой книжкой и т.д. Книг, всемирно известных авторов, не так уж много, Керниган, Ритчи, Шилдт, Кнут... здесь в "Сундуке" есть. Можно не знать FAT (я сам-то лишь недавно разобрался, когда потребовался) и всякое такое, но язык программирования знать обязательно. Смотрите вот я изучил кучу книг но зачем тогда форумы? Зачем этот форум где люди спрашивают что то? Зачем вообще что то у кого то спрашивать в жизни если пойди и прочти книгу? Код: И нет ведь гарантии, что мои или чьи-то ответы - верны. Я вам верю! Цитата: Логично всё-таки полноценно пройти обучение, с книжкой Не сочтите меня ленивым но вот в чем дело. Я не стремлюсь стать великим программистом. Я даже код своих поделок никому не покажу потому что там нет ничего нового. Я даже уверен что (глядя на мой код) мне скажут мол это не твое займись другим чем нибудь. Многим просто хочется делать поделки и что бы они работали и помогали в жизни. Ну к примеру автоматическое включение света в комнате по событию. По не стандартному событию и такой функционал не заложен в покупных устройствах к примеру(хз включение света потому что чайник нагрелся при этом на улице -20 |
|
| Автор: | Martian [ Ср июн 05, 2024 13:53:27 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Я не собирался стать гонщиком формулы 1, дальнобойщиком и автоконструктором. Но выучил правила дорожного движения и изучил устройство автомобиля. Я не останавливаю других автомобилистов на каждом повороте с вопросом, каким поворотником мигать и как, и не обращаюсь на форум автомобилистов, чтобы узнать, как заправить автомашину. Аналогия понятна? Ваши вопросы - это не Олимп программирования. Это базовые, необходимые моменты. И форум - это не вместо книг, а в дополнение им. Ну, по крайней мере, теперь понятны вопли про мерзкие российские форумы и прекрасные иностранные. У нас кстати, точно такая же мерзкая система обучения в школах была, и прекрасная - в иностранных. В итоге моё поколение знает механику движения небесных тел, хоть это и нафиг не нужно, а иностранцы не знают, как вколотить гвоздь, хоть это и нужно. Так что, учите английский. На русских форумах Вам будет крипово, кринжово и токсично. |
|
| Автор: | Vikz [ Ср июн 05, 2024 17:36:28 ] |
| Заголовок сообщения: | Re: Помогите разобратся с кодом пожалуйста. |
Я не собирался стать гонщиком формулы 1, дальнобойщиком и автоконструктором. Но выучил правила дорожного движения и изучил устройство автомобиля. Я не останавливаю других автомобилистов на каждом повороте с вопросом, каким поворотником мигать и как, и не обращаюсь на форум автомобилистов, чтобы узнать, как заправить автомашину. Аналогия понятна? Ваши вопросы - это не Олимп программирования. Это базовые, необходимые моменты. И форум - это не вместо книг, а в дополнение им. Ну, по крайней мере, теперь понятны вопли про мерзкие российские форумы и прекрасные иностранные. У нас кстати, точно такая же мерзкая система обучения в школах была, и прекрасная - в иностранных. В итоге моё поколение знает механику движения небесных тел, хоть это и нафиг не нужно, а иностранцы не знают, как вколотить гвоздь, хоть это и нужно. Так что, учите английский. На русских форумах Вам будет крипово, кринжово и токсично. Странно что вас так зацепило мое высказывание о российском сообществе. Нынешнее поколение знает механику движения небесных тел? Мы ведь живем в настоящем и мое высказывание было про настоящее время. Что там преподают в школах иностранных я не знаю однако пользуемся мы благами этих тупых не знающих про небесные тела и как вколотить гвоздь. Я ведь вам в личку написал ответ с обьяснением. Почему просто не быть людьми и зачем выпячивать свое чсв вот с чем я часто сталкиваюсь. И вы уж извините но сообщество программистов этим очень грешит а жаль. Когда меня просили помочь в той сфере где я больше знаю то мне просто было приятно обьяснить что да как. Понимаете чувство что помог человеку это классно тем более что мне это ничего не стоит |
|
| Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


