Например TDA7294

Форум РадиоКот :: Просмотр темы - Помогите разобратся с кодом пожалуйста.
Форум РадиоКот
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-редактором

Вложения:
SD Specifications Part 2. File System Specification.pdf [438.9 KiB]
Скачиваний: 151

Автор:  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/