Например TDA7294

Форум РадиоКот • Просмотр темы - Преобразование String to char не работает (
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср июн 25, 2025 23:28:54

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Преобразование String to char не работает (
СообщениеДобавлено: Сб сен 16, 2023 16:45:27 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 216
Рейтинг сообщения: 0
Доброго всем добрым.
Суть вопроса. Есть 7 сегментник, на который должна выводиться инфа в виде значения величины и названия этой величины, типа 120*С. Для управления 7сегментником используется библиотека ардуино SevSeg. Все это запихивается в Атмегу16. И собственно с выводом char на дисплей проблем нет. Проблема появляется когда я пытаюсь преобразовать строку в массив char, который должен передаться библиотеке для вывода на дисплей. В loop'e вот такой кусок кода не желает работать (
Код:
 static byte val =100;
 //char pointer[6] = "PAUSE";
 myString = "ESUAP";
  // Cycle to the next string every one second
  if (millis() > (timer + 1000)) {
    val ++;   
   myString = String(val+myString); 
   const char* pointer = myString.c_str(); 
    Serial.println(pointer);   
  sevseg.setChars(pointer);
    timer = millis();
  }
    sevseg.refreshDisplay(); // Must run repeatedly

преобразования из строки в символы не происходит, что видно (вернее не видно) и на дисплее и в выводе в консоль разумеется. Если строки со стрингами комменчу, а char раскомменчу -- вывод идет.
Буду очень благодарен за конструктивные мысли. Второй день бьюсь как рыба об асфальт.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Сб сен 16, 2023 17:49:01 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1622
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
с функции класа String? (5 + 1 символов)
Код:
if (millis() > (timer + 1000)) {
  val ++;
 
  myString = String(val + myString);
 
  char buf[6];
  myString.toCharArray(buf, 6);
 
  Serial.println(buf);
  sevseg.setChars(buf);
 
  timer = millis();
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Сб сен 16, 2023 18:28:50 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 216
Рейтинг сообщения: 0
veso74, увы, нет (
Мистика какая-то...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Вс сен 17, 2023 11:20:07 
Мучитель микросхем

Карма: 6
Рейтинг сообщений: 112
Зарегистрирован: Пн май 27, 2019 07:18:28
Сообщений: 437
Откуда: ВВХ-ск
Рейтинг сообщения: 0
В симуляторе работает.
Возможно, стек переполняется от таких тяжёлых операций.
Или UB может быть даже не в этом куске кода.


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Вс сен 17, 2023 12:18:29 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 216
Рейтинг сообщения: 0
mont-oriol, да, в симуляторе работает. И про переполнение стека я уже подумал (
тогда вопрос по другому стоит, как к значению переменной прицепить строку символов и вывести это на дисплей. Пока не справился (((


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Вс сен 17, 2023 12:53:41 
Мучитель микросхем

Карма: 6
Рейтинг сообщений: 112
Зарегистрирован: Пн май 27, 2019 07:18:28
Сообщений: 437
Откуда: ВВХ-ск
Рейтинг сообщения: 0
https://wokwi.com/projects/376108925066553345


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
В сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Вс сен 17, 2023 13:15:04 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1622
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Если я правильно понял задачу из темы (ру->бг), то у меня либ. SevSeg работает и на симулятор, и на реальном устройстве. С классом String проблем нет - с внутренними функциями Arduino. Добавил знак C, использовал символа '^'. При "oC" по 7 seg LCD било "OC". Теперь "oC".

Тест: 12oC
Изображение


Вложения:
temp_oC.zip [41.03 KiB]
Скачиваний: 37
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Вс сен 17, 2023 15:36:27 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 216
Рейтинг сообщения: 0
mont-oriol, на строку strcpy(position, myString); ругается: Compilation error: invalid conversion from 'u8* {aka unsigned char*}' to 'char*' [-fpermissive]
а в вокви все компилируется и собирается.

Добавлено after 1 minute 6 seconds:
veso74, вот а у меня похоже на железе не желает работать со строками. Но такого быть не может.
как я понимаю, вся проблема в использовании MightyCore + Atmega16a


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Вс сен 17, 2023 20:20:06 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1622
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Работает на симуляторе и на ATmega16.

Думаю, первая возможная причина неработы в Вашем случае:
разница между реальными и относительными выводами МК в MightyCore: PIN_PA0, PIN_PA ...
Код:
// byte digitPins[] = {A0, A1, A2, A3};
byte digitPins[] = {PIN_PB0, PIN_PB1, PIN_PB2, PIN_PB3};

// byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};  // a, b, c, d, e, f, g, h
byte segmentPins[] = {PIN_PA0, PIN_PA1, PIN_PA2, PIN_PA3, PIN_PA4, PIN_PA5, PIN_PA6, PIN_PA7};  // a, b, c, d, e, f, g, h

Изображение


Вложения:
atmega16.zip [39.89 KiB]
Скачиваний: 32
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Пн сен 18, 2023 10:16:20 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1466
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15051
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Ну и сложностей то для 7-сегментника...
Может достаточно сделать *.h файлик с объявлениями(или соответственно вставку в *.h файле класса индикатора), да использовать его "кодовую таблицу" в конкретном случае?
К примеру:
Спойлер
Код:
#define s_A 1 // значение номера сегмента A
#define s_B 7 // значение номера сегмента B
#define s_C 5 // значение номера сегмента C
#define s_D 4 // значение номера сегмента D
#define s_E 2 // значение номера сегмента E
#define s_F 0 // значение номера сегмента F
#define s_G 3 // значение номера сегмента G
#define s_H 6 // значение номера сегмента H

/* "кодовая страница кракозябр 7-сегментных"
 раскладка сегментов по символам определяется стандартной разметкой A-H
 по условию, что активный уровень(сегмент астивен/светится) принят за 1 */

#define fnt_bl 0
#define fnt_0 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F) // цифра 0 или символ "О"
#define fnt_1 (1<<s_B | 1<<s_C) // цифра 1
#define fnt_2 (1<<s_A | 1<<s_B | 1<<s_D | 1<<s_E | 1<<s_G) // цифра 2
#define fnt_3 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_G) // цифра 3 или символ "Э/З"
#define fnt_4 (1<<s_B | 1<<s_C | 1<<s_F | 1<<s_G) // цифра 4 или символ "Ч"
#define fnt_5 (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_F | 1<<s_G) // цифра 5 или символ "S"
#define fnt_6 (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // цифра 6
#define fnt_7 (1<<s_A | 1<<s_B | 1<<s_C) // цифра 7
#define fnt_8 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // цифра 8
#define fnt_9 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_F | 1<<s_G) // цифра 9
#define fnt_A (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_E | 1<<s_F | 1<<s_G) // символ "A"
#define fnt_b (1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // символ "b"
#define fnt_C (1<<s_A | 1<<s_D | 1<<s_E | 1<<s_F) // символ "C" (прямая скобка '[' )
#define fnt_d (1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_G) // символ "d"
#define fnt_E (1<<s_A | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // символ "E"
#define fnt_F (1<<s_A | 1<<s_E | 1<<s_F | 1<<s_G) // символ "F"
#define fnt_P (1<<s_A | 1<<s_E | 1<<s_F | 1<<s_G | 1<<s_B) // символ "P"
#define fnt_L (1<<s_E | 1<<s_F | 1<<s_D) // символ "L"
#define fnt_H (1<<s_B | 1<<s_C | 1<<s_E | 1<<s_F | 1<<s_G) // символ "H"
#define fnt_U (1<<s_B | 1<<s_C | 1<<s_E | 1<<s_F | 1<<s_D) // символ "U"
#define fnt_I (1<<s_E | 1<<s_F) // левая 1 или латинская I
#define fnt_S (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_F | 1<<s_G) // аналог цифры 5
#define fnt_J (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E) // символ "J"
#define fnt_G (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F) // символ "G"
#define fnt_r (1<<s_G | 1<<s_E) // символ "r"
#define fnt_n (1<<s_G | 1<<s_E | 1<<s_C) // символ "п"
#define fnt_c (1<<s_G | 1<<s_E | 1<<s_D) // символ "с" или '<'
#define fnt_o (1<<s_G | 1<<s_E | 1<<s_D | 1<<s_C) // нижний кружок "о"
#define fnt_u (1<<s_C | 1<<s_E | 1<<s_D) // символ "u"
#define fnt_h (1<<s_C | 1<<s_E | 1<<s_F | 1<<s_G) // символ "h"
#define fnt_rusg (1<<s_A | 1<<s_E | 1<<s_F) // символ "Г"
#define fnt_rusP (1<<s_A | 1<<s_E | 1<<s_F | 1<<s_B | 1<<s_C) // символ "П"
#define fnt_rus_iE (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_G) // символ Э/З/цифра 3 (инверсное Е)
#define fnt_rusY (1<<s_F | 1<<s_G | 1<<s_B | 1<<s_C | 1<<s_D) // символ "У"
#define fnt_qest (1<<s_A | 1<<s_B | 1<<s_E | 1<<s_G) // символ "?"
#define fnt_rC (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D) // символ ']' (обратная скобка/"вывернутая С")
#define fnt_rc (1<<s_G | 1<<s_C | 1<<s_D) // символ '>'
#define fnt_gradus (1<<s_A | 1<<s_B | 1<<s_F | 1<<s_G) // верхний кружок "символ грвдуса"
#define fnt_minus (1<<s_G) // символ "-" (средняя черта)
#define fnt_aplin (1<<s_A) // символ "верхняя черта"
#define fnt_dnlin (1<<s_D) // символ "_" (нижняя черта)
#define fnt_trlin (1<<s_A | 1<<s_G | 1<<s_D) // символ "три черты"
#define fnt_coma (1<<s_H) // символ "," (децимальная точка)

Мне такой вариант больше нравится (и практически в своих конструкциях используется).
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Пн сен 18, 2023 21:16:58 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 216
Рейтинг сообщения: 0
В общем я так и не понял, с чем столкнулся. Но через sprintf все заработало и все выводится. Тема закрыта.
veso74, да, спасибо, я знаю, как выводы в MightyCore прописываются, когда-то прошел и по этим граблям )
BOB51, хм, да, может так и лучше и проще было бы. Надо будет как-то попробовать. Благодарю!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Преобразование String to char не работает (
СообщениеДобавлено: Ср сен 20, 2023 12:47:28 
Родился
Аватар пользователя

Зарегистрирован: Пн окт 07, 2019 10:14:37
Сообщений: 9
Откуда: СФО, уездный город Н-ск
Рейтинг сообщения: 0
Никогда так
Код:
if (millis() > (timer + 1000)) ...

не делай. Делай так
Код:
if (millis() - timer > 1000) ...

_________________
Праграмный кот. Хожу по цыкалу кругом.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y