Китайские Arduino Nano

Это Вася. Он потерял пол дня, по тысяче раз перепроверяя код, соединения и пр.пр.пр. А оно всё равно не работало.. Не будьте как Вася (с)

Ну а если подробнее, то развел вот такую простую платку:

Воплотил её в «железе»:

А оно возьми и не заработай при прошивке. Мало того, даже в мониторе порта при выставленном Serial.begin(9600); пишет без крякозябров только на скорости 2400

Убил всё утро на выяснение причины. Оказалось, что у китайского клона свои частоты работы кремния, а потому стандартные казалось бы скетчи где есть привязка к частотам процессора будут или не работать или работать не верно (датчики температуры, дисплеи и т.д.).

Решение: нужно прошивать плату выставив в Arduino IDE верную плату: LGT8F328P Для этого:

  • Запустить Arduino IDE,
  • перейти в Файл/Настройки/
  • В окошко “Дополнительные ссылки…” Вставить https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json
  • Нажать ОК
  • Перейти в Инструменты/Плата/Менеджер плат… Начать вводить в поиске “lgt8”. Выбрать и установить LGT8fx Boards
  • Теперь в списке плат Инструменты/Плата/ появится семейство плат Logic Green…
  • Выбираем свою плату

Для более полной совместимости, Clock Divider можно выставить в 2

Компилируем..прошиваем..и всё начинает работать. Внимательнее нужно быть Вася..

Arduino: подключение дисплея ST7735s

Данный дисплей как оказалось с некими особенностями. У части страждущих, после подключения по стандартной схеме с 5в, экран рябит, и покрывается полосами, поэтому приходится подключать его через резисторы в 1кОм, по схеме:

Однако у меня, прокатило и без этого, хотя тоже помучался немножко, но как оказалось просто не пропаял нормально контактную площадку на дисплее. Кроме того, в моём случае необходимо было оставить свободными часть пинов, в том числе 13 и 11, для других устройств, поэтому пришлось переключатся на «софтварную» реализацию функционала MISO/MOSI/SCK. В моём случае схема подключения следующая:

  • vcc — 5v
  • gnd — gnd
  • scl — 8
  • sda — 7
  • res — 5
  • dc — 4
  • cs — 6
  • blk — не используется

Ну и инициализация дисплея следующая соответственно:

Из минусов — медленная отрисовка на экране. Однако в моём случае это не критично.

Стандартная же схема подключения следующая:

Дисплей на ST7735SArduino
GNDGND
VCC5V
SCL13 (sck)
SDA11 (mosi)
RES9
DC8
CS10 (ss)
BL3.3V

И снова проект на Arduino: подсветка лестницы

Сей проект должен решить задачу подсветки лестницы в темноте при обнаружении движения одним из двух датчиков. Ну бонусом — кнопка принудительного включения и кнопка «новогодних эффектов». Подсветка осуществляется при адресной 5 вольтовой светодиодной ленты, с внешним питанием.

Разработку платы вёл традиционно в веб версии EasyEDA, Принципиальная схема получилась следующая:

А вот тут она-же, но уже в виде текстолитовой однослойной платы, которую вполне можно потравить и самому:

В «железе» пока еще готового варианта нет, детальки едут и Китая и прочих источников, но теоретическую модель в эмуляторе уже можно потрогать тут:

https://wokwi.com/projects/417413301092687873

Код следующий:

Решено: Нужна помощь зала. Не объяснимая ошибка

Прошу очень помощи зала. Ситуация следующая: пишу прошивку «Бортовой компьютер» автомобиля
на основе Arduino Nano (хобби у меня такое, не работа).
Минимальный пример, для воспроизведения ошибки (удалил по максимуму всё, лишь бы ошибка воспроизводилась):

https://wokwi.com/projects/390348182761575425

Проблема в следующем, не обьяснимым образом, теряются данные в переменных при вызове функции translate.

Например при использовании вот так (строки 141-146):

На экран выводится «Bridge». Однако стоит убрать строчку

Как волшебным образом, на экран начинает выводится и Transmission: и Bridge:.

Дело не только в этой строчке. Закомментировав рандомно часть кода выше-ниже, вообще не относящегося к выводу на экран, можно добиться эффекта, что выводятся на экран все три строчки.

Подумал что памяти не хватает. Но вроде норм. Я уже начинаю сходить с ума, несколько дней бьюсь над проблемой. Проблема воспроизводится и на «реальном железе», не только в эмуляторе.

Update: си не умеет возвращать строки. Только массивы символов. Поэтому верный код что-то вроде:

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

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

1 2 3 4