Интерпретатор Brainfuck на Arduino +10



Скорее всего, о языке 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
    /#10532191

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

  2. apple01
    /#10532259

    >У меня всё работает от аккумулятора 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 позволяющая запитать в обход регулятора, что имеет смысла сделать для исключения потерь и увеличения продолжительности работы.

    • seri0shka
      /#10532369

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

      • apple01
        /#10532373

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

        • seri0shka
          /#10532795

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

  3. qwert_ukg
    /#10532557

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

    • seri0shka
      /#10532809

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

  4. ArtificialLife
    /#10533269

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

    • NetBUG
      /#10533903

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

  5. QwertyOFF
    /#10533573

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