ARDUINO Nano 328, st7920 128x64 и кнопки

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
Имеется все что описано в заголовке, и все работает, НО по отдельности, запускаю экран-работает через U8glib, подключаю к нано кнопки через gyverbutt и пытаюсь установить обычный счетчик нажатий, каждое нажатие +1 или -1 с выводом на экран и кнопки не работают. думал беда в кнопках, проверка мультиметром показала норм, подключил отдельно кнопки и вывел в порт и все считается все плюсуется и минусуется, перевожу все снова на экран и никаких результатов, при этом подключен датчик температуры DS18B20 и он норм выводит показания на экран. Не могу понять где идет отсечение по кнопкам
Код:
st7920 и кнопки:
#include <U8glib.h>                                            // Подключаем библиотеку U8glib


U8GLIB_ST7920_128X64_1X u8g(13, 11, 12);                               // Создаём объект u8g для работы с дисплеем, указывая номер вывода CS для аппаратной шины SPI
uint32_t                timeStart;                             // Объявляем переменную для подсчёта количества секунд прошедших с момента старта скетча
uint8_t                 timeHours;                             // Объявляем переменную для вывода часов  прошедших с момента старта скетча
uint8_t                 timeMinutes;                           // Объявляем переменную для вывода минут  прошедших с момента старта скетча
uint8_t                 timeSeconds;                           // Объявляем переменную для вывода секунд прошедших с момента старта скетча

int pip;

#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(4);                                       // вход датчиков 18b20,
DallasTemperature ds(&oneWire);


#include <GyverButton.h>
GButton butt2(7);       //указать пин к которому подключены ваши кнопки (1-13)
GButton butt1(6);
GButton butt3(5);
GButton butt4(8);


void setup() {

  ds.begin();
  Serial.begin(9600);

  u8g.firstPage();                                           // Всё что выводится на дисплей указывается в цикле: u8g.firstPage(); do{ ... команды ... }while(u8g.nextPage());
  do {
    u8g.setFont(u8g_font_10x20);                           // Выбираем шрифт u8g_font_6x10
    u8g.drawStr(20, 30, "Valerich");                       // Выводим текст "iarduino"        в позиции  39х9
  }    while (u8g.nextPage());

}

void loop () {

  butt1.tick();              //обязательная команда опрос кнопки
  butt2.tick();
  butt3.tick();
  butt4.tick();
  if (butt1.isClick() || butt3.isClick()) pip++; //если нажата кноп1 то увеличивать значение
  if (butt2.isClick() || butt4.isClick()) pip--;
  Serial.print("zna4enie:");
  Serial.println(pip);

  timeStart = millis() / 945;                               // Получаем количество секунд прошедших с момента старта скетча
  timeSeconds = timeStart % 60; timeStart /= 60;             // Получаем количество секунд для вывода на дисплей
  timeMinutes = timeStart % 60; timeStart /= 60;             // Получаем количество минут  для вывода на дисплей
  timeHours   = timeStart % 24; timeStart /= 24;             // Получаем количество часов  для вывода на дисплей
  ds.requestTemperatures();                               // считываем температуру с датчиков, на это требуется 750мс
  
    u8g.firstPage();                                           // Всё что выводится на дисплей указывается в цикле: u8g.firstPage(); do{ ... команды ... }while(u8g.nextPage());
  do {
    u8g.setColorIndex(1);                                 // Выбираем белый цвет
    u8g.drawBox(0, 0, 128, 11);                           // Выводим прямоугольник с координатами левого верхнего угла 0,0 и размерами 128x11 пикселей
    u8g.setFont(u8g_font_6x10);                           // Выбираем шрифт u8g_font_6x10
    u8g.setColorIndex(0);                                 // Выбираем цвет фона
    u8g.setPrintPos(45, 9); u8g.print(ds.getTempCByIndex(0)); u8g.print("C");                       // Вывод показаний датчика на экран
    u8g.setColorIndex(1);                                 // Выбираем белый цвет
    u8g.setPrintPos(56, 20); u8g.print(pip);
    u8g.drawStr(5, 20, "zna4enie");
    u8g.drawStr(18, 62, "maniyavseznaniya");               // Выводим текст "www.iarduino.ru" в позиции  20х62
    u8g.setFont(u8g_font_courB24n);                       // Выбираем шрифт u8g_font_courB24n
    u8g.setPrintPos(  3, 55); u8g.print(timeHours / 10);  // Выводим старший разряд часов    в позиции   3х43
    u8g.setPrintPos( 20, 55); u8g.print(timeHours % 10);  // Выводим младший разряд часов    в позиции  20х43
    u8g.drawStr    ( 33, 55, ":");                        // Выводим двоеточие               в позиции  33х43
    u8g.setPrintPos( 46, 55); u8g.print(timeMinutes / 10); // Выводим старший разряд минут    в позиции  46х43
    u8g.setPrintPos( 63, 55); u8g.print(timeMinutes % 10); // Выводим младший разряд минут    в позиции  63х43
    u8g.drawStr    ( 76, 55, ":");                        // Выводим двоеточие               в позиции  76х43
    u8g.setPrintPos( 89, 55); u8g.print(timeSeconds / 10); // Выводим старший разряд секунд   в позиции  89х43
    u8g.setPrintPos(106, 55); u8g.print(timeSeconds % 10); // Выводим младший разряд секунд   в позиции 106х43
  }    while (u8g.nextPage());

}
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Оформи код как положено, но похоже отрисовка экрана занимает у тебя все свободное время и он перерисовывается когда надо и когда не надо. Соотв не успеваешь нажать . попробуй нажать кнопку и подержать пару секунд и проверить есть ли изменения на счетчиках
 

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
Оформи код как положено
Знал что где-то есть все, но так спешил опубликовать, что не искал где эта вставка. Готово
но похоже отрисовка экрана занимает у тебя все свободное время и он перерисовывается когда надо и когда не надо. Соотв не успеваешь нажать . попробуй нажать кнопку и подержать пару секунд и проверить есть ли изменения на счетчиках
Оказалось так и есть, я переписал кнопки на isHold и все пошло, считает цыфры вместе с секундами и первоначального движения (от 0 к 1 или просто куда либо сдвинуть цыфру) долго приходится ждать, около 2сек
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
1) У далласовского датчика есть асинхронный режим. Который не делает задержку . что то типа
.setWaitForConversion(false); // асинхронное получение данных

2) Подумай как перерисовывать экран только при изменении его содержимого. Для часов достаточно проверять изменение секунд.
Для примера я вот так вывожу переменные в сериал, не постоянно и все убегает. а только при изменении:
C++:
  if (c!=oldc){
    oldc=c;
    Serial.print(c);   
  }
 

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
1) У далласовского датчика есть асинхронный режим. Который не делает задержку . что то типа
.setWaitForConversion(false); // асинхронное получение данных
Я попробовал вообще отключить его и все заработало, теперь и .Click и .Hold работают как должны и отрисовка идет моментально, получается датчик на себя всю обработку тянул.
Гугл подсказал еще одну библиотеку для датчика microDS18B20 с сайта гайвера, как описано там он уже через асинхрон работает, попробую через нее, тем более что она меньше весит по описанию.
Одно мне сейчас не понятно, в новой библиотеке идет чере delay все и работает, при интеграции в мой код, датчик выдает 85,00. при этом если я вписываю после опроса delay то все норм, показания дает нормальные, попробовал через millis показания выводить, но толи я коряво код написал, толи через millis не работает
C++:
#include <U8glib.h>                                            // Подключаем библиотеку U8glib

U8GLIB_ST7920_128X64_1X u8g(13, 11, 12);                               // Создаём объект u8g для работы с дисплеем, указывая номер вывода CS для аппаратной шины SPI
uint32_t                timeStart;                             // Объявляем переменную для подсчёта количества секунд прошедших с момента старта скетча
uint8_t                 timeHours;                             // Объявляем переменную для вывода часов  прошедших с момента старта скетча
uint8_t                 timeMinutes;                           // Объявляем переменную для вывода минут  прошедших с момента старта скетча
uint8_t                 timeSeconds;                           // Объявляем переменную для вывода секунд прошедших с момента старта скетча
int pip;
int zad;
int ttt;

//#include <OneWire.h>
//#include <DallasTemperature.h>
//OneWire oneWire(4);                                       // вход датчиков 18b20,
//DallasTemperature ds(&oneWire);                           //0x28,0xAA,0x7D,0xB8,0x4A,0x14,0x1,0x53 адрес датчика

#include <microDS18B20.h>

#define DS_PIN 4   // Создаем две линии для подключения сенсоров
MicroDS18B20 ds(DS_PIN);     // Создаем еще датчик на отдельной линии без адресации //0x28,0xAA,0x7D,0xB8,0x4A,0x14,0x1,0x53 адрес датчика


#include <GyverButton.h>
GButton butt2(7);       //указать пин к которому подключены ваши кнопки (1-13)
GButton butt1(6);
GButton butt3(A5);
GButton butt4(8);

void setup() {
  Serial.begin(9600);
  u8g.firstPage();                                           // Всё что выводится на дисплей указывается в цикле: u8g.firstPage(); do{ ... команды ... }while(u8g.nextPage());
  do {
    u8g.setFont(u8g_font_10x20);                           // Выбираем шрифт u8g_font_6x10
    u8g.drawStr(20, 30, "Valerich");                       // Выводим текст "iarduino"        в позиции  39х9
  }    while (u8g.nextPage());
}
void loop () {
  ds.requestTemp();
  butt1.tick();              //обязательная команда опрос кнопки
  butt2.tick();
  butt3.tick();
  butt4.tick();
  if (butt1.isClick() || butt3.isHold()) pip++; //если нажата кноп1 то увеличивать значение
  if (butt2.isClick() || butt4.isHold()) pip--;
  Serial.print("zna4enie:");
  Serial.println(pip);
  Serial.println(ds.getTemp());
  timeStart = millis() / 945;                               // Получаем количество секунд прошедших с момента старта скетча
  timeSeconds = timeStart % 60; timeStart /= 60;             // Получаем количество секунд для вывода на дисплей
  timeMinutes = timeStart % 60; timeStart /= 60;             // Получаем количество минут  для вывода на дисплей
  timeHours   = timeStart % 24; timeStart /= 24;             // Получаем количество часов  для вывода на дисплей
  if (millis() - zad > 10000) {                             //если прошло 10 сек обновлять показания
    zad = millis();
    ds.getTemp();
  }
  u8g.firstPage();                                           // Всё что выводится на дисплей указывается в цикле: u8g.firstPage(); do{ ... команды ... }while(u8g.nextPage());
  do {
    u8g.setColorIndex(1);                                 // Выбираем белый цвет
    u8g.drawBox(0, 0, 128, 11);                           // Выводим прямоугольник с координатами левого верхнего угла 0,0 и размерами 128x11 пикселей
    u8g.setFont(u8g_font_6x10);                           // Выбираем шрифт u8g_font_6x10
    u8g.setColorIndex(0);                                 // Выбираем цвет фона
    u8g.setPrintPos(5, 9); u8g.print(ds.getTemp()); u8g.print("C");                       // Вывод показаний датчика на экран
    u8g.setColorIndex(1);                                 // Выбираем белый цвет
    u8g.setPrintPos(56, 20); u8g.print(pip);
    u8g.drawStr(5, 20, "zna4enie");
    u8g.drawStr(18, 62, "maniyavseznaniya");               // Выводим текст "www.iarduino.ru" в позиции  20х62
    //u8g.setFont(u8g_font_courB24n);                       // Выбираем шрифт u8g_font_courB24n
    u8g.setFont(u8g_font_6x10);                           // Выбираем шрифт u8g_font_6x10
    u8g.setColorIndex(0);
    u8g.setPrintPos( 82, 9); u8g.print(timeHours / 10);  // Выводим старший разряд часов    в позиции   3х43
    u8g.setPrintPos( 88, 9); u8g.print(timeHours % 10);  // Выводим младший разряд часов    в позиции  20х43
    u8g.drawStr    ( 93, 9, ":");                        // Выводим двоеточие               в позиции  33х43
    u8g.setPrintPos( 98, 9); u8g.print(timeMinutes / 10); // Выводим старший разряд минут    в позиции  46х43
    u8g.setPrintPos(104, 9); u8g.print(timeMinutes % 10); // Выводим младший разряд минут    в позиции  63х43
    // u8g.drawStr    (109, 9, ":");                        // Выводим двоеточие               в позиции  76х43
    // u8g.setPrintPos(114, 9); u8g.print(timeSeconds / 10); // Выводим старший разряд секунд   в позиции  89х43
    // u8g.setPrintPos(120, 9); u8g.print(timeSeconds % 10); // Выводим младший разряд секунд   в позиции 106х43*/
  }    while (u8g.nextPage());
}
 
Изменено:

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
Первый опрос и задержку в 1 секунду следует вставить в setup, это будет единственная задержка.
В таком случае опрос происходит один раз при запуске системы, все следующие показания не обновляются со временем, а при повторном опросе датчика командой .requestTemp(); в меню loop сбрасывается на значение 85.00
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
setup
{
делаем запрос.
задержка
}

loop
{
..
получаем данные.
делаем запрос.
// эти две строки надо делать не чаще одного раза в секунду если датчик ds18b20 настроен по умолчанию на самую точную температур
...
}

Я буквально отвечал на такой же вопрос пару дней назад. сейчас скопирую объяснение
Вот
И смотри что получается. Представь что датчик температуры это ящик, в который по запросу кладут листок с написанной температурой.
Ты просишь температуру и уходишь, потом приходишь и берешь. Если попытаться забрать сразу, то ничего не выйдет - там пусто. Вот у тебя в программе та же ситуация получается Ты запрашиваешь и тут же берешь и высчитываешь. поэтому получается ерунда. Что бы избежать этого надо 1-ый запрос сделать сразу в setup после инициации датчика. И можно даже подождать секунду. торможение 1 секунду при включении ни на что не повлияет. Зато в getTemp делая следующий запрос ты уже получишь правильное готовое значение.
 
  • Лойс +1
Реакции: Valerich-tex и kostyamat

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
setup
{делаем запрос.
задержка}
loop{..
получаем данные.
делаем запрос. // эти две строки надо делать не чаще одного раза в секунду если датчик ds18b20 настроен по умолчанию на самую точную температур...}
Основываясь на вашем сообщении и моих скудных познаниях в программировании я пришел к более менее рабочему коду:
И клавиши отвечают теперь нормально, что .Click что .Hold команды адекватно работают и считают
Добил наконец-то ки:
  //  tit =  ds.getTemp();
  if (millis() - zad > 3333) { // такое значение 3333 чтобы не пересекалось с значением 1000 ниже
    zad = millis();
    ds.getTemp(); tit =  ds.getTemp(); Serial.println(tit); //спрашиваем что считал. записываем в переменую
    if (millis() - ttt > 1000) {
      ttt = millis();
      ds.requestTemp();  //местами ощущается задержка в 12-15сек, с выводом показаний. либо это из-за того что температура не так быстро меняется
    } //есть небольшое сомнение что можно лучше написать, но я пока не нашел способа как)
  }
/* все что и идет ниже это жалкие попытки придумать алгоритм задержки между
    отправкой запроса и выводом в, хотя бы, 1 секунду.
    честно говоря даже стыдно показывать, но кто не совершал ошыбок)*/
  /*
    switch (val) { //пробовал через if (раз в секунду) менять значение val чтобы выполнялся отдельный блок кода, но что-то не пошло...
    case 0: ds.requestTemp();
      break;
    case 2: ds.getTemp(); tit =  ds.getTemp(); Serial.println(tit);
      break;
    }
  */

  /*if (millis() - zad > 1000) {
    zad = millis();
    ds.requestTemp();
    } else if (millis() -  zad > 2255) {
    ds.getTemp(); //если прошло 10 сек обновлять показания
    Serial.println(tit);
    }*/

// delay(1000);
  // ds.requestTemp();                     //запрос темпер. обязательная задержка между отпросом и выводом 1сек, иначе показания лагают
  // if (millis() -  ttt > 3000/* && zad < 1000, zad > 3000*/) {
  //   ds.getTemp();                            //если прошло 10 сек обновлять показания
  //  ttt = millis();
  //  zad = millis();
  //  Serial.println(ds.getTemp());
  // }

  /*for (int i = 0; i = 4; i++) { // цикл... (а что, а вдруг) сюда прога залетала давала результат, но не стабильный
    if (millis() -  zad > 2000) {
      ds.requestTemp();
      ttt = millis();
      zad = millis();
      Serial.println(i);
      if (i = 4) break;
    }
    }
    for (int i = 0; i = 3; i++) {
    if (millis() -  ttt > 3000) {
      ds.getTemp();                           
      ttt = millis();
      zad = millis();
      Serial.println(ds.getTemp());
      Serial.println(i);
      if (i = 3) break;
    }
    }*/
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Второе условие бессмысленно, т.к. оно внутри первого и когда пройдет 3333 мс. то точно пройдет 1000 мс.
C++:
if (millis() - zad > 3333)  // вместо 3333 поставить интревал с каким должна обновлятьс я температура, не менее 1000
{
    zad = millis();
    ds.getTemp(); tit =  ds.getTemp(); Serial.println(tit);
    ds.requestTemp();
}
Но если сделать не 3333 а скажем 10000, то температуру будет показывать ту, что была 9 сек. назад
Тогда лучше сделать так
C++:
if ((millis() - zad1 > 9000) && (zas2 == 0)) { // такое значение 3333 чтобы не пересекалось с значением 1000 ниже
    zad2 = millis();
    ds.getTemp(); tit =  ds.getTemp(); Serial.println(tit); //спрашиваем что считал. записываем в переменую

  }
  if ((zad2 != 0) && (millis() - zad2 > 1000))
  {
    ds.requestTemp();  //местами ощущается задержка в 12-15сек, с выводом показаний. либо это из-за того что температура не так быстро меняется
    zad2 = 0;
    zad1 = millis();
  }
 
  • Лойс +1
Реакции: Valerich-tex

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
Второе условие бессмысленно, т.к. оно внутри первого и когда пройдет 3333 мс. то точно пройдет 1000 мс.
Я когда писал такой формат, условие в условии то думал "а что. а вдруг" и на удивление оно работает, уже несколько дней без сбоев выводит значение на экран и в порт.
Ваш код даже, кажется, по шустрее будет, спасибо за наставления
 

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
Чтобы не флудить темы. теперь о графике на st7920
Открываю пример (bitmap) из библиотеки u8glib и вроде бы мне понятно как он выводит графику, из примера естественно все работает
C++:
#include "U8glib.h"

// setup u8g object, please remove comment from one of the following constructor calls
U8GLIB_ST7920_128X64_1X u8g(13, 11, 12);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17

const uint8_t rook_bitmap[] PROGMEM = {
  0x00,         // 00000000 из того что вычитал на просторах гугла понял следующее
  0x55,         // 01010101 тут взят квадрат 8х8 и расставлены точки
  0x7f,         // 01111111 которые в итоге образуют рисунок
  0x3e,         // 00111110 значит логично что если преобразовать монохромный рисунок
  0x3e,         // 00111110 в такой код то все должно работать
  0x3e,         // 00111110
  0x3e,         // 00111110
  0x7f          // 01111111
};

void draw(void) {
  // graphic commands to redraw the complete screen should be placed here
  u8g.drawBitmapP( 0, 0, 1, 8, rook_bitmap);
}

void setup(void) {
}

void loop(void) {
  // picture loop
  u8g.firstPage();
  do {
    draw();
  } while( u8g.nextPage() );

  // rebuild the picture after some delay
  delay(1000);
}
казалось бы все готово, переводи картинку в формат текста и дерзай, что я в общем и пробовал
пример форматирования взял с сайта tehnopage вроде бы там толково все расписано
проба .. не раз:
#include "U8glib.h"
// setup u8g object, please remove comment from one of the following constructor calls
U8GLIB_ST7920_128X64_1X u8g(13, 11, 12);    // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
const uint8_t rook_bitmap[] PROGMEM = {     //сначала я просто вставил текст и попробовал ну нифига, выводт шум на экран причем на весь хотя картинка 61х60
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //думал может не хватает uint8_t и заменил на uint16_t
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //но так вообще работать отказалась и выдала что нет команды для uint16_t
  0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, //ладно, попробовал записать в "const char rook_bitmap[] PROGMEM = ""
  0x00, 0x00, 0xC0, 0x0F, 0x7E, 0x00, 0x00, 0x00, //в таком формате удалось вывести уже квадрат шума, не на весь экран а по размерам
  0x00, 0x00, 0x78, 0x00, 0xC0, 0x01, 0x00, 0x00, //пришла такая мысль что может быть слишком много символов для одного блока
  0x00, 0x00, 0x0E, 0xF8, 0x03, 0x06, 0x00, 0x00, //и я разделил на 5 блоков, результата это не принесло
  0x00, 0x00, 0x83, 0xFF, 0x3F, 0x18, 0x00, 0x00, //сейчас я заглох и не могу понять, если картинка сформирована правильно
  0x00, 0xC0, 0xF0, 0x00, 0xF0, 0x60, 0x00, 0x00, //то почему возникает ошибка в расположении пикселей
  0x00, 0x60, 0x1C, 0x00, 0x80, 0xC3, 0x00, 0x00,
  0x00, 0x10, 0x06, 0xFE, 0x0F, 0x8E, 0x01, 0x00,
  0x00, 0x88, 0xC3, 0xFF, 0x7F, 0x18, 0x03, 0x00,
  0x00, 0xC4, 0xF0, 0x7F, 0xFE, 0x61, 0x06, 0x00,
  0x00, 0x62, 0xFC, 0x5F, 0xFE, 0xC3, 0x0C, 0x00,
  0x00, 0x33, 0xFE, 0x4F, 0xFE, 0x8F, 0x19, 0x00,
  0x00, 0x19, 0xFF, 0x4F, 0xFE, 0x1F, 0x11, 0x00,
  0x80, 0x88, 0xFF, 0x47, 0xFE, 0x3F, 0x22, 0x00,
  0xC0, 0xC4, 0xFF, 0x67, 0xFE, 0x7F, 0x66, 0x00,
  0x40, 0xE6, 0xFF, 0x63, 0xFE, 0xFF, 0x4C, 0x00,
  0x20, 0xE2, 0xFF, 0x71, 0xFE, 0xFF, 0xC8, 0x00,
  0x20, 0xF3, 0xFF, 0x59, 0xFE, 0xFF, 0x99, 0x00,
  0x30, 0xF1, 0xFF, 0x48, 0xFE, 0xFF, 0x91, 0x00,
  0x90, 0xF9, 0xFF, 0x4C, 0xFE, 0xFF, 0x13, 0x01,
  0x90, 0xF8, 0x7F, 0x44, 0xFE, 0xFF, 0x33, 0x01,
  0x98, 0xFC, 0x7F, 0x46, 0xFE, 0xFF, 0x27, 0x01,
  0xC8, 0xFC, 0x3F, 0x42, 0xFE, 0xFF, 0x27, 0x03,
  0xC8, 0xFC, 0x1F, 0x43, 0xFE, 0xFF, 0x67, 0x02,
  0xC8, 0xFC, 0x9F, 0x41, 0x00, 0x00, 0x60, 0x02,
  0x48, 0xFE, 0x8F, 0x49, 0x00, 0x00, 0x60, 0x02,
  0x48, 0xFE, 0xCF, 0xCC, 0xFF, 0xFF, 0x7F, 0x02,
  0x48, 0xFE, 0x47, 0xCC, 0xFF, 0xFF, 0x7F, 0x02,
  0x48, 0xFE, 0x67, 0x4E, 0x00, 0x00, 0x60, 0x02,
  0x48, 0xFE, 0x23, 0x4E, 0x00, 0x00, 0x60, 0x02,
  0x48, 0xFE, 0x31, 0x4F, 0xFE, 0xFF, 0x7F, 0x02,
  0xC8, 0xFC, 0x19, 0x4F, 0xFE, 0xFF, 0x7F, 0x02,
  0xC8, 0xFC, 0x98, 0x4F, 0xFE, 0xFF, 0x7F, 0x02,
  0xC8, 0xFC, 0x8C, 0x4F, 0xFE, 0xFF, 0x3F, 0x03,
  0x98, 0x7C, 0xC4, 0x4F, 0xFE, 0xFF, 0x3F, 0x01,
  0x90, 0x78, 0xE6, 0x4F, 0xFE, 0xFF, 0x3F, 0x01,
  0x90, 0x39, 0xE2, 0x4F, 0xFE, 0xFF, 0x1F, 0x01,
  0x30, 0x11, 0xF3, 0x4F, 0xFE, 0xFF, 0x9F, 0x00,
  0x20, 0x93, 0xF1, 0x4F, 0xFE, 0xFF, 0x9F, 0x00,
  0x20, 0x82, 0xF9, 0x4F, 0xFE, 0xFF, 0xCF, 0x00,
  0x40, 0xC6, 0xF8, 0x4F, 0xFE, 0xFF, 0x4F, 0x00,
  0x40, 0x44, 0xFC, 0x4F, 0xFE, 0xFF, 0x67, 0x00,
  0x80, 0x68, 0xFE, 0x4F, 0xFE, 0xFF, 0x23, 0x00,
  0x80, 0x39, 0xFE, 0x4F, 0xFE, 0xFF, 0x11, 0x00,
  0x00, 0x33, 0xFF, 0x4F, 0xFE, 0xFF, 0x19, 0x00,
  0x00, 0x02, 0xFF, 0x4F, 0xFE, 0xFF, 0x0C, 0x00,
  0x00, 0x84, 0xFF, 0x4F, 0xFE, 0x7F, 0x04, 0x00,
  0x00, 0x88, 0xFF, 0x4F, 0xFE, 0x1F, 0x02, 0x00,
  0x00, 0xD0, 0xFF, 0x4F, 0xFE, 0x8F, 0x01, 0x00,
  0x00, 0xE0, 0xFF, 0x4F, 0xFE, 0xC3, 0x00, 0x00,
  0x00, 0xC0, 0xFF, 0x4F, 0xFE, 0x60, 0x00, 0x00,
  0x00, 0x00, 0xFF, 0x4F, 0x3E, 0x18, 0x00, 0x00,
  0x00, 0x00, 0xFC, 0x4F, 0x00, 0x06, 0x00, 0x00,
  0x00, 0x00, 0xF0, 0x4F, 0xC0, 0x03, 0x00, 0x00,
  0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}; //посещает мысля что может все таких не правильно сформирован код картинки
   //где косяк? где ... косяк?
void draw(void) {
  // graphic commands to redraw the complete screen should be placed here
  u8g.drawBitmapP( 30, 2, 61, 60, rook_bitmap);
}
void setup(void) {
}
void loop(void) {
  // picture loop
  u8g.firstPage();
  do {
    draw();
  } while( u8g.nextPage() );
  // rebuild the picture after some delay
  delay(1000);
}
в итоге сейчас я буксую на одном месте
есть другие программы для форматирования картинок? точнее не так, если есть, поделитесь на мыло
 

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
Юзаю данный редактор, и заметил следующие, если использую команду "u8g.drawBitmapP( 32, 2, 61, 60, rook_bitmap);" то изображение битое (шум) по всей площади экрана, не зависимо от того что я пишу в команду, если использую команду из примера от технопедж "u8g.drawXBM( 32, 2, 61, 60, rook_bitmap);" то изображение так же битое но уже имеет соотношение сторон правильное, я пробовал с разными настройками в редакторе, но пока рабочего не нашел... где-то чего-то не понимаю...
IMAG7228.jpg
 

Valerich-tex

✩✩✩✩✩✩✩
7 Авг 2019
21
2
действительно оказалось что я не понимаю работы некоторых функций которыми пытался оперировать, и так изучая библитеку 8glib на github наткнулся на отпедения или справочное меню, короче там шло описание методов и функций и как результат мне удалось вывести изображение на экран, буду дальше его мучать. К данному случаю есть отличная поговорка "дело было не в бобине..."