Скорее всего, о языке Brainfuck слышали многие, кто изучал программирование. Из этих многих, некоторые реализовывали интерпретатор этого языка. Я решил собрать интерпретатор на базе Arduino, чтобы можно было таскать его с собой и набивать в дороге простейшие программки. Постой, скажете вы, но на смартфонах давно есть интерпретаторы на любой вкус, на кой нужно таскать с собой такую коробку? Because it's fucking awesome!

image

Что мне понадобилось:

1. Arduino Pro mini;
2. LCD 16x2 i2c;
3. Четыре кнопки;
4. Аккумулятор 18650;
5. Выключатель;
6. Провода;
7. Макетная плата, на чём всё собрать;
8. Коробка для корпуса.

Собираем всё вместе. Кнопки вешаем на пины 2, 3, 4, 5. Экран подключаем к A4 (SDA), A5 (SCL). Для кнопок я не использую подтягивающие резисторы (использую внутренние), может это нехорошо, но деталек меньше, а для меня это важнее. Как программировать pro mini читайте в интернете. Ничего сложного. Весь код скетча лежит на гитхабе.

Несколько моментов. Да, обработка нажатия кнопок с учётом дребезга контактов, возможно, не самая удачная, тем более, что используются «магические числа» — короче мрак. В программе есть пять режимов:

0 — меню (по-умолчанию), для отображения информации о других режимах и перехода в них;
1 — редактирование;
2 — исполнение;
3 — сохранение в EEPROM;
4 — загрузка из EEPROM.

При загрузке программы из EEPROM, её можно будет редактировать (набранная программа заменится на загруженную) и пересохранить или выполнить.

image

У меня всё работает от аккумулятора 18650, хотя ардуина пятивольтовая. Удачи!

image

Комментарии (10)


  1. REALpredatoR
    03.01.2018 22:38

    За что вы так сим-карту?


  1. apple01
    03.01.2018 23:23

    >У меня всё работает от аккумулятора 18650, хотя ардуина пятивольтовая.

    ATmega32U4 работает в диапазоне напряжения питания 2.7-5.5 V. Линейный регулятор MIC5219 допускает минимальное входное напрядение 2.5 V при падении порядка 350 mV.
    Таким образом, теоретически минимальное напряжение до которого может разряжаться аккумулятор может быть 2.7 + 0.35 =~ 3 V. Следует учесть, что что при минимальном напряжении 2.7 V тактовая частота на которой работает ATmega не должна превышать 8 Mhz, поэтому имеет смысл сразу установить ее прошивкой fuse-оф. И еще, на плате ардуино должна быть перемычка SJ1 позволяющая запитать в обход регулятора, что имеет смысла сделать для исключения потерь и увеличения продолжительности работы.


    1. seri0shka
      04.01.2018 01:42

      А причём ATmega32U4 к Arduino Pro mini? Хотя всё то же касается и ATmega328. Ну и перемычки на Pro mini нет, но вывод питания напрямую есть.


      1. apple01
        04.01.2018 01:47

        Я смотрел схему Pro micro, детали могут отличаться но суть та-же.


        1. seri0shka
          04.01.2018 13:05

          Pro micro- это вообще отдельная ветвь эволюции, у неё куча отличий от Pro mini, главное из которых- наличие USB интерфейса. Плюс куча плюшек, но и цена в три раза больше (


  1. qwert_ukg
    04.01.2018 08:27

    Коробочка крутая, но скотча маловато :)


    1. seri0shka
      04.01.2018 13:15

      Скотч вместо синей изоленты. Как так можно!


  1. ArtificialLife
    04.01.2018 18:53

    Я очень-очень давно хочу сделать себе «мини-компьютер» с кучей эзотерических языков. Все упирается в то, что не могу найти нормальный дисплей (хотя бы символьный, на 10 строк). Хз, может не там ищу, конечно. Если кто-то посоветует такой дисплей для ардуинки, буду благодарен.


    1. NetBUG
      05.01.2018 13:46

      Любой 12864 дисплей, скажем, с ST7595? Продаются много где, поддерживаются u8g. Если разрешение мало — экраны на ILI9341, единственное, графический буфер придётся хранить с помощью магии (частичной перерисовки) — у *ino слишком мало ОЗУ.


  1. QwertyOFF
    05.01.2018 00:19

    Эх, а я надеялся увидеть программирование под ардуино на brainfuck'е.