Arduino: передача массива строк в качестве функции

За что я не очень люблю СИ, так за то что можно споткнуться на пустом месте и долго думать почему так? И в этот раз тоже, долго гуглил, почему у меня не получается передать массив строк в функцию, массив внутри «обнулялся». Наконец наткнулся, что СИ это не умеет. Умеет только передавать указатель на массив. Поэтому функция может выглять подобным образом:

Arduino Nano: использование сдвигового регистра, пример

Сдвиговые регистры — это два вида микроскхем 74HC595 и 74HC165. первый соответственно предназначен для расширения пинов для выхода (например помигать светодиодиками, включать выключать реле и т.п.), а второй для расширения пинов для входа (чтение состояние кнопочек, датчики движения и т.п.). Наиважнейшим моментом отмечу, что считывать/посылать состояние можем только в виде 0 и 1. Соответственно подключать можем устройства которые могут принимать только два состояния: вкл и выкл. Рассмотрим схему 74HC595

Соответственно на выходы Q0-Q7 мы сможем подавать состояние включено-выключено (1/0), отослав на ногу DS маску из 8 бит. Например 01010101. Остальные ноги:

  • GND — земля
  • MR — сброс значений регистра. Сброс происходит при получении LOW
  • SH_CP (SRCLK) — линия синхроимпульса для передачи данных из DS во внутренние ячейки (вход для тактовых импульсов).
  • SH — shift, CP — clock pin ST_CP (RCLK) — линия синхроимпульса для передачи данных из внутренних ячеек, во внешние (синхронизация выходов).
  • ST — storage, CP — clock pin OE — инверсный, разрешение на вывод данных с внешних ячеек (вход для переключения состояния выходов из высокоомного в рабочее)
  • DS (SER) — линия последовательных данных (Data Serial)
  • VCC — питание, 5В

Пример подключения 8 светодиодов в виде схемы:

И в виде сборки на макетных платах:

Простейший скетч для такой схемы подключения:

Русификация дисплея SSD1306

В интернете полно инструкций по русификации данного дисплея. Фактически все рекомендации сводятся к замене в папке C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library (у вас другой путь) файла glcdfont.c вот этим файлом, и далее использованием вот этой функции для конвертации UTF-8 в кодировку windows-1251:

У меня увы, этот метод не сработал, как бы я не бился. И файл со скетчем переводил и в UTF-8 и в кодировку windows-1251 и чего только не делал. Ну не работает и всё тут. Потом на какое-то время заработало, потом опять перестало. Разобраться почему я так и не смог. В результате пошел другим путем — написал онлайн конвертор UTF-8 в восьмеричный формат кодировки windows-1251, после чего стало возможным вставлять в IDE код вида:

Пусть не сильно читаемо в коде, но зато работает максимально стабильно. Конвертер ниже:



Кроме того, обнаружил еще одну не объяснимую ошибку при работе с данным дисплеем: если в программе интенсивно используется вывод в консоль при помощи Serial.println то на дисплее возникают артефакты в виде шума.

Эмулятор Arduino

Редко когда пишу хвалебные отзывы, но тут исключение, ибо наконец нашел хороший инструмент для отладки проектов на ардулино и иже с ними, без доступа к железу. Лично для меня большим не удобством было, что чтобы что-то попрограммировать, нужно обязательно иметь железку, и обязательно собрать схему «в железе». Что иногда долго и безобразно выглядеще. Итак оно: https://wokwi.com/. Прмямо «онлайн» выбираешь железку, собираешь схему и прямо там пишешь код и выполняешь его. Светодиоды моргают, датчики и дисплеи показывают. А вот когда уже отладил всё, собирай железку живьем на здоровье..

1 2 3 4