Реаниматор модуля HC-12

а можно сразу весь список вопросов ?)))
я так понимаю вы хотите подоставать автора ?)))
ведь согласно правилам он вроде должен отвечать на вопросы если опубликовал проект…
но если вас наняли эти проклятые корпы, что бы проект не увидел свет, то делитесь денюжкой!)))

Джони!? Не узнал вас в гриме!


Всего лишь намёк, что русский язык на русскоязычном форуме добавит в проекте “совершенства”(с)

это наш лидер самураев, вы тоже состоите в нашей организации ?

для начала надо бы определится с: пьянющая, пьянущая или пьянючая, как более актуальные задачи

@толстый , вот оно тебе надо? :grinning_face_with_smiling_eyes:

Nop! :slightly_smiling_face:

Развели тут базар-вокзал. Моде это моде а ченел это ченел, че не ясного тута)))

Если заинтересованы, то читаем даташит на HC-12. Т.к. отвечать-то конечно можно, но вопросы из разряда какого цвета солнце)

Однако отвечу на ваши вопросы приведением ссылки на даташит модуля. зис ис даташит

Хотел рассказать как я сделал сканер каналов для анализа зашумленности, да вижу, что и с этим прибором не разобрались ещё :rofl:

Для этого 2 модуля не нужно - есть esp32.

А причем тут ЕСП? Мне для 2 соток огорода комбайн не нужен.

Вообще, в код прошивки можно добавить еще код и в меню можно будет выбирать сканирование. Т.е. железо тоже самое, изменяем только код.

“Можно и зайца научить курить.”

вот видно что у вас много денег, и вам не бывает скучно… и не делитесь ими…

я так и не понял, вы русский язык не хотите добавлять ? например так (не проверял! )

// ============================================================
//   РУССКИЙ ШРИФТ 5x7 ДЛЯ PCD8544 (Nokia 5110)
//   Каждая буква = 5 байт, младший бит сверху
// ============================================================

// Формат: 5 столбцов, каждый байт — вертикальная полоска 7 пикселей
// Бит 0 = верхний пиксель, бит 6 = нижний

const uint8_t RU_A[] PROGMEM = {0x7E,0x11,0x11,0x11,0x7E}; // А
const uint8_t RU_B[] PROGMEM = {0x7F,0x49,0x49,0x49,0x36}; // Б
const uint8_t RU_V[] PROGMEM = {0x7F,0x49,0x49,0x49,0x36}; // В (как B)
const uint8_t RU_G[] PROGMEM = {0x7F,0x01,0x01,0x01,0x01}; // Г
const uint8_t RU_D[] PROGMEM = {0x60,0x3F,0x21,0x3F,0x60}; // Д
const uint8_t RU_E[] PROGMEM = {0x7F,0x49,0x49,0x49,0x41}; // Е
const uint8_t RU_YO[]= PROGMEM = {0xFF,0x49,0x49,0x49,0x41};// Ё (с точками)
const uint8_t RU_ZH[]= PROGMEM = {0x77,0x08,0x7F,0x08,0x77};// Ж
const uint8_t RU_Z[] PROGMEM = {0x41,0x49,0x49,0x49,0x36}; // З
const uint8_t RU_I[] PROGMEM = {0x7F,0x08,0x08,0x08,0x7F}; // И
const uint8_t RU_J[] PROGMEM = {0x7C,0x08,0x09,0x0A,0x7C}; // Й
const uint8_t RU_K[] PROGMEM = {0x7F,0x08,0x14,0x22,0x41}; // К
const uint8_t RU_L[] PROGMEM = {0x40,0x3F,0x01,0x01,0x7F}; // Л
const uint8_t RU_M[] PROGMEM = {0x7F,0x02,0x0C,0x02,0x7F}; // М
const uint8_t RU_N[] PROGMEM = {0x7F,0x08,0x08,0x08,0x7F}; // Н
const uint8_t RU_O[] PROGMEM = {0x3E,0x41,0x41,0x41,0x3E}; // О
const uint8_t RU_P[] PROGMEM = {0x7F,0x01,0x01,0x01,0x7F}; // П
const uint8_t RU_R[] PROGMEM = {0x7F,0x09,0x09,0x09,0x06}; // Р
const uint8_t RU_S[] PROGMEM = {0x3E,0x41,0x41,0x41,0x22}; // С
const uint8_t RU_T[] PROGMEM = {0x01,0x01,0x7F,0x01,0x01}; // Т
const uint8_t RU_U[] PROGMEM = {0x47,0x48,0x48,0x48,0x3F}; // У
const uint8_t RU_F[] PROGMEM = {0x1C,0x22,0x7F,0x22,0x1C}; // Ф
const uint8_t RU_H[] PROGMEM = {0x77,0x08,0x08,0x08,0x77}; // Х
const uint8_t RU_C[] PROGMEM = {0x3F,0x40,0x40,0x40,0x7F}; // Ц
const uint8_t RU_CH[]= PROGMEM = {0x07,0x08,0x08,0x08,0x7F};// Ч
const uint8_t RU_SH[]= PROGMEM = {0x7F,0x40,0x40,0x40,0x7F};// Ш
const uint8_t RU_SCH[]=PROGMEM = {0x7F,0x40,0x40,0x40,0x7F};// Щ (упрощ.)
const uint8_t RU_TV[]= PROGMEM = {0x01,0x7F,0x48,0x48,0x30}; // Ъ
const uint8_t RU_Y[] PROGMEM = {0x7F,0x48,0x48,0x48,0x30}; // Ы
const uint8_t RU_SOFT[]=PROGMEM = {0x7F,0x48,0x48,0x48,0x30};// Ь
const uint8_t RU_EH[]= PROGMEM = {0x22,0x41,0x49,0x49,0x36}; // Э
const uint8_t RU_YU[]= PROGMEM = {0x7F,0x08,0x3E,0x41,0x3E}; // Ю
const uint8_t RU_YA[]= PROGMEM = {0x46,0x29,0x19,0x09,0x7F}; // Я

const uint8_t* const RU_FONT[] PROGMEM = {
  RU_A, RU_B, RU_V, RU_G, RU_D, RU_E, RU_YO, RU_ZH, RU_Z, RU_I,
  RU_J, RU_K, RU_L, RU_M, RU_N, RU_O, RU_P, RU_R, RU_S, RU_T,
  RU_U, RU_F, RU_H, RU_C, RU_CH, RU_SH, RU_SCH, RU_TV, RU_Y,
  RU_SOFT, RU_EH, RU_YU, RU_YA
};

// Индексы в массиве (для кодов UTF-8)
// А=0, Б=1, В=2, Г=3, Д=4, Е=5, Ё=6, Ж=7, З=8, И=9,
// Й=10, К=11, Л=12, М=13, Н=14, О=15, П=16, Р=17, С=18, Т=19,
// У=20, Ф=21, Х=22, Ц=23, Ч=24, Ш=25, Щ=26, Ъ=27, Ы=28,
// Ь=29, Э=30, Ю=31, Я=32

// Возвращает индекс буквы по UTF-16 коду, или -1 если не наша
int ruIndex(uint16_t code) {
  // Заглавные А-Я
  if (code >= 0x410 && code <= 0x42F) return code - 0x410;
  // Строчные а-я -> те же картинки что и заглавные (упрощение)
  if (code >= 0x430 && code <= 0x44F) return code - 0x430;
  // Ё
  if (code == 0x401 || code == 0x451) return 6;
  return -1;
}

// Вывод одной русской буквы (5x7) в позиции x,y
void drawRuChar(uint8_t idx, int x, int y) {
  if (idx > 32) return;
  const uint8_t* bmp = (const uint8_t*)pgm_read_ptr(&RU_FONT[idx]);
  for (uint8_t col = 0; col < 5; col++) {
    uint8_t bits = pgm_read_byte(bmp + col);
    for (uint8_t row = 0; row < 7; row++) {
      if (bits & (1 << row)) {
        display.drawPixel(x + col, y + row, BLACK);
      }
    }
  }
}

// Универсальный вывод строки с поддержкой кириллицы
// Возвращает новую позицию X
int drawRuString(const String& s, int x, int y) {
  for (uint16_t i = 0; i < s.length(); ) {
    uint8_t c = (uint8_t)s[i];
    if (c < 0x80) {
      // ASCII — стандартный шрифт
      display.setCursor(x, y);
      display.write((char)c);
      x += 6;
      i++;
    } else if ((c & 0xE0) == 0xC0 && i + 1 < s.length()) {
      uint16_t code = ((c & 0x1F) << 6) | ((uint8_t)s[i + 1] & 0x3F);
      int idx = ruIndex(code);
      if (idx >= 0) {
        drawRuChar((uint8_t)idx, x, y);
      } else {
        // Неизвестный символ — рисуем '?'
        display.setCursor(x, y);
        display.write('?');
      }
      x += 6;
      i += 2;
    } else {
      i++;
    }
  }
  return x;
}

Нет, интерфейс согласно даташиту. Кроме того, это никак не влияет на функционал. И более того, планируется новый добавить, а ресурсы ограничены. Русификация просто съест остаток ресурсов. Однако Вы можете использовать 16х2 или 20х4 LCD, в этих дисплеях кодогенератор имеет русский алфавит. А потому “нагружать” код не нужно будет.

Зачем под каждую букву свой массив?

По умолчанию - нет

Вы правы, но скорее не так, зависит от кодовой таблицы, дешман не имеет кириллицы, чуть дороже да, у нее кодовая таблица HD44780-A02. Интересно, а какая у меня таблица) а то купил не думая разных в разное время)

в первую очередь потому что так ии выдал)))
а во вторую легкость замены, и отсутствие обрушение конструкции, если что не так…)))

а то я ведь и не уверен что все буквы работать будут, а тут хоть частично заработает…
но все таки потому что так ии выдал!)))

Пятьдесят сообщений в ветке, а вопрос, нафига это все, так и остался неотвеченным…

перевожу с русского на русский: «50 комментов ни о чём, а вопрос „нафига это все?“ так и остался без ответа».

а может предложите что то туда добавить ?
у меня вот идей нет… функцию загруженности озу бы предложил бы… так вроде тут это лишнее)))

Читаем внимательно мой первый пост. В нем вы найдёте ответ на ваш вопрос “Зачем”.

офтоп.:rofl:

Приезжает в колхоз высшая комиссия. Смотрят — в поле мужик косит сено. Председатель комиссии подходит и говорит:
— Нерационально работаешь, товарищ! Возьми вторую косу, привяжи к первой и коси в обе стороны: туда — взмах, обратно — взмах!

Приезжают через месяц проверить. Мужик косит двумя косами. Комиссия снова недовольна:
— Всё равно КПД низкий. Давай мы тебе сзади грабли привяжем, будешь косить и сразу за собой сено собирать!

Приезжают ещё через месяц. Мужик косит двумя косами, сзади грабли сено гребут. Комиссия опять думает:
— А давай мы тебе спереди вилы приделаем, чтобы сено сразу в стога укладывалось!

Мужик бросает косы, поворачивается к комиссии и злобно говорит:
— Слушайте, вы мне ещё на лоб прожектор повесьте, чтобы я и ночью работал!