конвертция uint8_t в String

krokodi1
Offline
Зарегистрирован: 06.10.2019

привет.создаю проект с дисплеем и часами, с часов получаю данные типа uint8_t и честно говоря не знаю что это , но дисплей принимает только String . напишите команды с помощью которых перменную типа uint8_t " Y "можно преобразовать в String "Y1". я еще новичек, так что простите).в интернете не нашел ответа.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

$50 и я поищу в интернете и найду ответ. 

b707
Онлайн
Зарегистрирован: 26.05.2017

krokodi1 пишет:

 получаю данные типа uint8_t и честно говоря не знаю что это

После такого не вижу смысла вообще вам в чем-либо помогать. На форуме программистов написать, что вы не знаете что такое uint8_t - это как на ЕГЭ по литературе признаться. что не знаешь букв.

Вместо того чтоб делать подобные признания - потратили бы полчаса чтоб поискать в гугле. что это такое.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Растолкую за uint8_t примерно за $100. Коту на сено. 

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

krokodi1, memcpy() в цикле. Тупой способ но действенный, вашу задачу решит.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Могу за $150. Но Дед Физтех, а я МехМат! ;)))
"... дороже стоит граф!"(с)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну да, у тебя же три кота, сена нада больше. :-)

Densl
Offline
Зарегистрирован: 28.11.2018

Uint8_t это по простому unsigned char.

nik182
Offline
Зарегистрирован: 04.05.2015

Densl пишет:

Uint8_t это по простому unsigned char.

Ну это вы , батенька, погорячились. _t это тип, U это unsigned, int это int, 8 это размер int.

И где здесь char ?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Densl пишет:

Uint8_t это по простому unsigned char.


Да ты шо!?

MaksVV
Offline
Зарегистрирован: 06.08.2015

String(ваша уинт8_тэ) 200 зеленых

krokodi1
Offline
Зарегистрирован: 06.10.2019

втом то и дело, не работает так...

exit status 1
no matching function for call to 'TFT::text(String, int, int)'
nik182
Offline
Зарегистрирован: 04.05.2015

А текст программы, который не работает и ссылка на библиотеку , что int, int просит ?

krokodi1
Offline
Зарегистрирован: 06.10.2019
#include <iarduino_RTC.h>                                   // Подключаем библиотеку iarduino_RTC для работы с модулями реального времени.
//  iarduino_RTC time(RTC_DS1302, 1, 2, 3);                 // Объявляем объект time для работы с RTC модулем на базе чипа DS1302, указывая выводы Arduino подключённые к выводам модуля RST, CLK, DAT
 iarduino_RTC time(RTC_DS1307);                          // Объявляем объект time для работы с RTC модулем на базе чипа DS1307, используется аппаратная шина I2C
 //  iarduino_RTC time(RTC_DS3231);  
 #include <TFT.h>  // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs   10
#define dc   9
#define rst  8
//      seconds  секунды     0-59
//      minutes  минуты      0-59
//      hours    часы        1-12
//      Hours    часы        0-23
//      midday   полдень     0-1 (0-am, 1-pm)
//      day      день месяца 1-31
//      weekday  день недели 0-6 (0-воскресенье, 6-суббота)
//      month    месяц       1-12
//      year
uint8_t D, M, Y, h, m, s, W;

// pin definition for the Leonardo
// #define cs   7
// #define dc   0
// #define rst  1

// create an instance of the library
TFT TFTscreen = TFT(cs, dc, rst);

// char array to print to the screen
char sensorPrintout[4];

void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);                                     // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод.
    time.begin();  
      TFTscreen.begin();
 TFTscreen.setRotation (135);
  // clear the screen with a black background
  TFTscreen.background(0, 0, 0);

  // write the static text to the screen
  // set the font color to white
  TFTscreen.stroke(255, 255, 255);
  // set the font size
  TFTscreen.setTextSize(2);
  TFTscreen.fill (0x0000);
  
}

void loop() {
  // put your main code here, to run repeatedly:
time.gettime();
        D = time.day;                                    // Получаем текущий день месяца 1-31.
        M = time.month;                                  // Получаем текущий месяц       1-12.
        Y = time.year;                                   // Получаем текущий год         0-99.
        h = time.Hours;                                  // Получаем текущие часы        0-23.
        m = time.minutes;                                // Получаем текущие минуты      0-59.
        s = time.seconds;                                // Получаем текущие секунды     0-59.
        W = time.weekday;

   TFTscreen.setTextSize(1);
 
  //пишем дату
   TFTscreen.stroke(255,255, 255);
  
   TFTscreen.text(String(Y), 125, 5);
  if (W==0){
   TFTscreen.text("sun", 140, 5);
  }
   if (W==1){
   TFTscreen.text("Mon", 140, 5);
  }
   if (W==2){
   TFTscreen.text("Tue", 140, 5);
  }
    if (W==3){
   TFTscreen.text("Wed", 140, 5);
  }
    if (W==4){
   TFTscreen.text("Thu", 140, 5);
  }
    if (W==5){
   TFTscreen.text("Fri", 140, 5);
  }
    if (W==6){
   TFTscreen.text("Sat", 140, 5);
  }
  delay (1000);

  
  //стираем дату
   TFTscreen.stroke(0, 0, 0);
   
   TFTscreen.text(String(Y), 120, 5);
  if (W==0){
   TFTscreen.text("sun", 140, 5);
  }
   if (W==1){
   TFTscreen.text("Mon", 140, 5);
  }
   if (W==2){
   TFTscreen.text("Tue", 140, 5);
  }
    if (W==3){
   TFTscreen.text("Wed", 140, 5);
  }
    if (W==4){
   TFTscreen.text("Thu", 140, 5);
  }
    if (W==5){
   TFTscreen.text("Fri", 140, 5);
  }
    if (W==6){
   TFTscreen.text("Sat", 140, 5);
  }
  
  
  
  
  
       
}

 

krokodi1
Offline
Зарегистрирован: 06.10.2019

библиотека тфт стандартная

 

nik182
Offline
Зарегистрирован: 04.05.2015

В какой строке программы возникает ошибка? Не вижу преобразования в стринг.

krokodi1
Offline
Зарегистрирован: 06.10.2019

строки 68 и 96

nik182
Offline
Зарегистрирован: 04.05.2015

А как ты понял, что принимает только string? Может быть надо открыть текст библиотеки и посмотреть какой тип имеет первая переменная?

krokodi1
Offline
Зарегистрирован: 06.10.2019

я смотрел примеры из библиотеки, там все значения преобразовывались в  стринг

nik182
Offline
Зарегистрирован: 04.05.2015

Там преобразовывались, а у тебя ошибка? Может всё  ж посмотришь чем string от String отличаются в справочнике языка, и который надо с функцией tfttext использовать? Загляни в библиотеку. Посмотри тип. Ошибка пишет что у библиотеки нет метода с String. Это как бы намекает.

krokodi1
Offline
Зарегистрирован: 06.10.2019

вот кусок из примера:

  String sensorVal = String(analogRead(A0));
 
  // convert the reading to a char array
  sensorVal.toCharArray(sensorPrintout, 4);
 
  // set the font color
  TFTscreen.stroke(255, 255, 255);
  // print the sensor value
  TFTscreen.text(sensorPrintout, 0, 20);
 
 
в библиотеку не полезу, уровень не позволяет,мне еще учиться и учиться)
nik182
Offline
Зарегистрирован: 04.05.2015

Хорошо. Обратите внимание, что в функцию подставляется не String, a CharArray.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

krokodi1 пишет:

 
в библиотеку не полезу, уровень не позволяет,мне еще учиться и учиться)

Вместо 

TFTscreen.text(String(Y), 120, 5);

напиши:

TFTscreen.text(String(Y).c_str(), 120, 5);

должно помочь.

krokodi1
Offline
Зарегистрирован: 06.10.2019

ого! спасибо огромное!

krokodi1
Offline
Зарегистрирован: 06.10.2019

вопрос решен!

спасибо!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

nik182 пишет:

Densl пишет:

Uint8_t это по простому unsigned char.

Ну это вы , батенька, погорячились. _t это тип, U это unsigned, int это int, 8 это размер int.

И где здесь char ?

Он именно так и определен. По умолчанию, в Си тип char - знаковый (но можно изменить опциями компилятора) и однобайтный (нельзя изменить), поэтому byte определен как unsigned char, а из него, для единообразия выведен uint8_t. 

nik182
Offline
Зарегистрирован: 04.05.2015

Эх дед. И ты туда же. В си char может быть и 32 разрядным. У него в определении не точно 8 бит , а минимум 8 бит. А uint8_t всегда беззнаковый и восьмибитный. В этом разница. 

Densl
Offline
Зарегистрирован: 28.11.2018

nik182 пишет:

Эх дед. И ты туда же. В си char может быть и 32 разрядным. У него в определении не точно 8 бит , а минимум 8 бит. А uint8_t всегда беззнаковый и восьмибитный. В этом разница. 


Блин, в старых учебниках писали 8 бит.
А вы уверены что uint8t 8 бит? Я нагуглил что оно не 8 бит а минимальная адресуемая единица.
В Ардуино это одно и тоже https://oscarliang.com/arduino-difference-byte-uint8-t-unsigned-cha/

sadman41
Offline
Зарегистрирован: 19.10.2016

ISO/IEC 9899:1999 (E)

7.18.1.1 Exact-width integer types

1 The typedef name intN_t designates a signed integer type with width N, no padding bits, and a two’s complement representation. Thus, int8_t denotes a signed integer type with a width of exactly 8 bits.

2 The typedef name uintN_t designates an unsigned integer type with width N. Thus, uint24_t denotes an unsigned integer type with a width of exactly 24 bits.

3 These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, it shall define the corresponding typedef names.

Densl
Offline
Зарегистрирован: 28.11.2018

Этот стандарт покажите разработчикам arduino ide

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

а подраться, пятница жеж )))

sadman41
Offline
Зарегистрирован: 19.10.2016

Причём тут разработчики arduino IDE? В avr-gcc они своими руками не залезали.

Переопределить char, byte и пр. - в их власти, но uint8_t - это stdint.h, к которому они и на километр не подходили.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

nik182 пишет:

Эх дед. И ты туда же. В си char может быть и 32 разрядным. У него в определении не точно 8 бит , а минимум 8 бит. А uint8_t всегда беззнаковый и восьмибитный. В этом разница. 

А ты точно уверен?  А для чего ввели wchar_t?   Обьясни. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Char занимает 1 байт всегда. Другое дело, что в системах байт не всегда 8 бит. Если я неправ, Петрович рассудит. 

uint8_t, кста, в таких системах тоже 1 байт занимает, и пофиг, что в нем 64 бита, например

sadman41
Offline
Зарегистрирован: 19.10.2016

А што это за системы и почём там бит?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sadman41 пишет:

А што это за системы и почём там бит?

это в стандарте так написано 5.3.3/1.  

На Одре байт был равен 24 битам.  Char, сатвецтвенно, тоже.  А wchar_t на её придумать не сподобились, ибо она падохла задолго до Unicod-а

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

это в стандарте так написано 5.3.3/1.  

Што-то не вижу: http://www.dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

с номером параграфа я мог и напутать, но, откройте у себя limits.h, у каждого он есть и паматрите 

//
// limits.h
//
//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// The C Standard Library <limits.h> header.
//
#pragma once
#define _INC_LIMITS

#include <vcruntime.h>

_CRT_BEGIN_C_HEADER



#define CHAR_BIT      8         // number of bits in a char
#define SCHAR_MIN   (-128)      // minimum signed char value
#define SCHAR_MAX     127       // maximum signed char value
#define UCHAR_MAX     0xff      // maximum unsigned char value

#ifndef _CHAR_UNSIGNED
    #define CHAR_MIN    SCHAR_MIN   // mimimum char value
    #define CHAR_MAX    SCHAR_MAX   // maximum char value
#else
    #define CHAR_MIN    0
    #define CHAR_MAX    UCHAR_MAX
#endif

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Неть, не напутал, я алкаш, а не склерозник

The sizeof operator yields the number of bytes in the object representation of its operand. The operand is either an expression, which is not evaluated, or a parenthesized type-id. The sizeof operator shall not be applied to an expression that has function or incomplete type, or to an enumeration type before all its enumerators have been declared, or to the parenthesized name of such types, or to an lvalue that designates a bit-field. sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1. (имееца ввиду байт, неважно скока в ём битов)

от тута 5.3.3

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

чо я спорю, у нас с котом корпоративчик, пока аццкой сотоны нет. :) 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

1. не вы первые задаётесь столь актуальным вопросом ;)))))

https://stackoverflow.com/questions/2098149/what-platforms-have-something-other-than-8-bit-char

2. Ваащет какрас для пятницы тема!

 

nik182
Offline
Зарегистрирован: 04.05.2015

DetSimen пишет:

Char занимает 1 байт всегда. Другое дело, что в системах байт не всегда 8 бит. Если я неправ, Петрович рассудит. 

uint8_t, кста, в таких системах тоже 1 байт занимает, и пофиг, что в нем 64 бита, например

Глубокоуважаемый ДЕД! В #28 сорок первый грустный человек привёл кусочек стандарта, где написано что цифра в этом типе соответствует количеству бит. Как я понимаю с размером байта ни как не связано.

Wchar тип вводили для поддержки широких символов, но потом символы ещё расширились. Как теперь обстоит с wchar_t дело я не знаю. Не приходилось в плотную сталкиваться. В моих программах русского текста пока не было. 

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

Неть, не напутал, я алкаш, а не склерозник

The sizeof operator yields the number of bytes in the object representation of its operand. 

Так это и понятно!

Положим, что в байте 64 бита. Значит uint8_t - это 1/8 байта, тоись 0,125 шт. А ежели sizeof() должен целое число выдать, то токо два варианта имеется: 0 или 1.

Ну вот какой нормальный человек выберет вместо литра - нуль? Стало быть - sizeof() писали люди понимающие нужды трудового народа. С сочувствием подошли к проблеме.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я до ЕвгенияП спорить не буду.

По моему стойкому убеждению, sizeof(char)==sizeof(byte)==sizeof(uint8_t).

nik182
Offline
Зарегистрирован: 04.05.2015

Дорогой Дед! Выдержка из раздела программирование сайта: Тип char знаковый тип, т.е. число (код) хранящийся в памяти может принимать значения от -128 до 127. Если необходим беззнаковая однобайтовая переменная, используйте тип byte.

Сайзы в среде одинаковые. Это ты прав. Но даже эта цитата говорит, что char != uint8_t == byte .

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Да блин, ты путаешь причину и следствие. Базовый тип это char, он знаковый и имеет минимальный для системы размер == 1. Все остальные типы выводятся из него. 

using byte = unsigned char;

using uint8_t = byte;

Поэтому, за исключением знаковости, char и uint8_t одно и то же. Я хотел сказать только это. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

На всякий случай, спор начался с этого. 

nik182 пишет:

Densl пишет:

Uint8_t это по простому unsigned char.

Ну это вы , батенька, погорячились. _t это тип, U это unsigned, int это int, 8 это размер int.

И где здесь char ?

я утверждаю, что uint8_t == unsigned char. и по размеру и по сути. 

Densl
Offline
Зарегистрирован: 28.11.2018

С99 это общий стандарт на все случаи жизни. Есть ещё POSIX в котором char это 8 бит. 99,9 % программистов никогда не сталкивались с некоторыми DSP контроллерами у которых char не 8 бит.

sadman41
Offline
Зарегистрирован: 19.10.2016

Densl пишет:
С99 это общий стандарт на все случаи жизни.

Дальше что? uint8_t - это тип с любой размерностью, которая меняется каждый день в зависимости от направления ветра?

Я стандарт привёл, avr-gcc ему следует. Со своей стороны вам необходимо привести доказательство обратного - пример системы, в которой uint8_t будет официально составлять 12.5 бита.

Densl
Offline
Зарегистрирован: 28.11.2018

Вы тут новичкам голову не морочте)) Кто программирует DSP процессоры нужные пункты стандартов хорошо знает.

vlad072
Offline
Зарегистрирован: 01.08.2017

В 1 байт никак нельзя засунуть время, вы что то путаете. Уточните в каком формате RTC отдаёт время, и может Вам посоветуют как его сконвертировать в строку.