Serial.print и Serial.write передают символы
- Войдите на сайт для отправки комментариев
Вс, 08/05/2022 - 22:57
Изучаю лёгкую библиотеку для OLED:
https://github.com/GyverLibs/GyverOLED
Передаю в комп содержимое буфера дисплея:
for (i = 0; i < 1023; i++){ Serial.print(oled._oled_buffer[i], HEX); } или Serial.write(oled._oled_buffer, 1024);
Смотрю лог передачи программой Free Serial Port Monitor. Вместо передачи байт вижу передачу символов:46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 FFFFFFFFFFFFFFFF
32 32 30 30 32 32 30 30 32 38 30 30 30 30 30 30 2200220028000000
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
Как передать именно байты?
А где сам буфер ?
В библиотеке, на которую я дал ссылку.
В буфер байты принимаются и отображаются на дисплее.
А символы у тебя значит передаются трайтами ?
Вместо передачи байт вижу передачу символов:
46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 FFFFFFFFFFFFFFFF
32 32 30 30 32 32 30 30 32 38 30 30 30 30 30 30 2200220028000000
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
Как передать именно байты?
а как, по вашему. при печати должны выглядеть байты? :)))
Попробую объяснить.
Первые 8 байт состоят из единиц: 11111111. Т.е. в шестнадцатиричной системе: 0хFF.
Однако, ардуино их передаёт в виде символов: 70 и 70. Не 0хFF, а "F" и потом ещё "F".
Однако, ардуино их передаёт в виде символов: 70 и 70. Не 0хFF, а "F" и потом ещё "F".
так вы же сами заказали печатать их в HEX формате. 255 в HEX - это и есть FF
"FF" не есть "F" и "F". "FF" есть 255, а не два байта по 70. Должен быть один байт шестнадцатиричного, а не два байта символов.
"FF" не есть "F" и "F".
это вы так думаете. И думаете неправильно.. На самом деле команда
печатает два символа 'F' и никак иначе.
Разберитесь в чем отличие байтов и их шестнадцатиричного представления. У вас в голове полная каша. Байт 0xFF "как байт" вообще нельзя напечатать, ему не соответствует печатных символов в таблице ASCCI. А в шестнадцатиричном виде он представляет из себя два символа 'F', так что программа печаете вам именно то, что вы заказали.
Вам для начала надо понять, что вы хотите от программы. Залача "напечатать байтовый буфер" - это бредятина.
Попробую объяснить.
Первые 8 байт состоят из единиц: 11111111. Т.е. в шестнадцатиричной системе: 0хFF.
Вообщето вы написали про биты (в двоичной системе) B11111111=0xFF
Argus19, Вам в первом же ответе намекнули, что необходимо приводить текст скетча полностью. Т.е. то, что можно целиком загрузить в IDE и проверить, не добавляя к нему никаких строк "от себя". Именно потому, что это "от себя" у каждого будет разное.
Учитывая, что библиотеки Гайвера содержат массу ошибок, а сам автор не торопится их исправлять, на этом форуме не принято их использовать и вообще как-то обсуждать. Поэтому могу порекомендовать составить небольшой законченный фрагмент (не использующий библиотек Гайвера), который каждый желающий мог бы откомпилировать и проверить у себя.
И там же напишите, что Вы получаете в результате, и что ожидаете получить.
Пока что нет предмета для обсуждения.
"Полностью согласен с предыдущим оратором". Поэтому, кроме
, которая именно "печатает", было опробовано
Второй вариант должен был тупо передать массив байт, в котором может быть всё, что угодно, а не обязательно текст. Однако, всё-равно передаются символы.
Поэтому могу порекомендовать составить небольшой законченный фрагмент (не использующий библиотек Гайвера), который каждый желающий мог бы откомпилировать и проверить у себя.
И там же напишите, что Вы получаете в результате, и что ожидаете получить.
Пока что нет предмета для обсуждения.
Наконец-то вразумительный ответ. Спасибо. К сожалению, предмет обсуждения в том, что у библиотеки имеется член класса - буфер дисплея, к которому есть доступ. Я сделал загрузку изображения из компьютера в OLED дисплей. Если правила форума позволяют приводить ссылки на другие форумы, то я приведу ссылку на мой блог, в котором компьютерная программа, скетч и описание. Программа передаёт в буфер дисплея Гайвера именно байты.
Учитывая, что библиотеки Гайвера содержат массу ошибок, а сам автор не торопится их исправлять, на этом форуме не принято их использовать и вообще как-то обсуждать.
Спасибо. Учту. Библиотека от Adafruit уж очень велика. Хотелось бы оставить побольше места в памяти.
Если не затруднит, дайте ссылку на стартовое обсуждение этой библиотеки. Интересно почитать об имеющихся в ней ошибках.
было опробовано
Второй вариант должен был тупо передать массив байт, в котором может быть всё, что угодно, а не обязательно текст. Однако, всё-равно передаются символы.
думается мне, что это неправда. Можете продемонстрировать, как вы это видите? Только скетч. пожалуйста, полностью
нет, не позволяют. Выкладывайте все сюда.
думается мне, что это неправда. Можете продемонстрировать, как вы это видите? Только скетч. пожалуйста, полностью
Как приложить к сообщению архив?
Argus19, Вы не можете разобраться в понятиях "байты", "символы", "текст", "шестнадцатеричный" и т.п.
К этому ни малейшего отношения не имеют ни дисплей, ни Гайвер с его библиотеками. _oled_buffer у него там - это обычный массив значений типа uint8_t. Вот и напишите махонький скетч с объявлением такого массива, заполнением его какими-нибудь значениями и выводом его в сериал. И объясните - что Вы ожидали увидеть и чем оно отличается от того, что увидели. Всё.
К этому ни малейшего отношения не имеют ни дисплей, ни Гайвер с его библиотеками. _oled_buffer у него там - это обычный массив значений типа uint8_t. Вот и напишите махонький скетч с объявлением такого массива, заполнением его какими-нибудь значениями и выводом его в сериал. И объясните - что Вы ожидали увидеть и чем оно отличается от того, что увидели. Всё.
Написал:
и получил именно байты, как и хотел:
Порт открыт процессом "javaw.exe" (PID: 3312)
Ответ:09.05.2022 14:22:53.31464
FF 00 FF 03 ÿ.ÿ.
Порт закрыт
Порт открыт процессом "javaw.exe" (PID: 3312)
Ответ:09.05.2022 14:22:53.31464
FF 00 FF 03 ÿ.ÿ.
Порт закрыт
Если в библиотеке Гайвера буфер дисплея _oled_buffer объявлен как uint8_t, то почему я получаю символы? Это всё, что я хочу понять.
Всем спасибо.
После переписывания скетчей, вернулся к вышеприведённому и всё заработало.
Похоже, у меня проблема с компьютером.
нет, не позволяют. Выкладывайте все сюда.
Если интересны результаты, можете посмотреть:
https://drive.google.com***************************
https://drive.google.com***************************
Ну, тебе ж сказали, выкладывать всё сюда... Никто ТУДА ходить не будет.
Ну, тебе ж сказали, выкладывать всё сюда... Никто ТУДА ходить не будет.
Это ссылки для скачивания архивов .zip.
Как сюда разместить архив?
Без архивов. Исходные тексты под спойлер.
исходные тексты без всяких архивов сюда или на github
но вообще сомневаюсь. что это будет хоть кому-нибудь интересно. По вопрсам очевидно, что источник проблемы в банальном неумении программировать.
исходные тексты без всяких архивов сюда или на github
Исходные коды программ под Windows?
Там два архива.
В одном программа, которая загружает выбираемое изображение с жёсткого диска компа, преобразует её в формат 128Х64 в оттенках серого. Слайдером выбирается желаемый вид чёрно-белого изображения. После чего изображение передаётся в ардуино и отображается на OLED дисплее.
Во втором, ловушка для блока питания на ардуино. Отслеживаются и индицируются на OLED дисплее изменения напряжения БП. Полученное изображение по нажатию кнопки передаётся в компьютерную программу, которая выводит полученное изображение и записывает его в формате .bmp.
Вся проблема была в неправильном драйвере CH340.
По неумению программировать, подскажите, что означают такие строки:
Тут непонятные для меня строки со знаками "<<" и пр.
Тут непонятные для меня строки со знаками "<<" и пр.
непонятный знак "<<" означает битовый сдвиг влево, с такими вопросами обращайтесь в любой учебник по Си - это базовые понятия.
Приведенный отрывок кода - это работа с I2c через соответвующие регистры. без использования ардуиновского Wire.h
непонятный знак "<<" означает битовый сдвиг влево, с такими вопросами обращайтесь в любой учебник по Си - это базовые понятия.
Приведенный отрывок кода - это работа с I2c через соответвующие регистры. без использования ардуиновского Wire.h
Спасибо. Было сомнение, что это код AVR-студии, а не ардуино IDE. Я какое-то время назад с пол-года позанимался С++. Многое забыл.
Спасибо. Было сомнение, что это код AVR-студии, а не ардуино IDE.
Вообще говоря. код AVR-студии отлично работает в ардуино IDE. Но судя по первым двум строчкам - это код ардуино
Вообще говоря. код AVR-студии отлично работает в ардуино IDE. Но судя по первым двум строчкам - это код ардуино
Спасибо.
Ну до чего ж народ то ограниченный! Ужос.(