СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Автомат для выдачи напитков на базе Arduino Uno R3

Категория: Информатика

Нажмите, чтобы узнать подробности

Аннотация

Исследовательская работа состоит из теоретической части, описывающей вендинговые автоматы и платформу разработки Arduino, и  практической части, рассматривающей вопрос создания автомата для выдачи напитков на базе Arduino Uno R3 на 15 страницах, 12 источников литературы, а так же 2 приложений на 5 страницах.

Ключевые слова, ВЕНДИНГОВЫЕ АВТОМАТЫ, ПРОГРАММИРОВАНИЕ на языке  С++, ПЛАТФОРМА ARDUINO UNO 3.

В работе рассмотрены основы программирования на Arduino; создание автомата для выдачи напитков; список используемых источников; приложение.

Целью работы является создание автомат для выдачи напитков на базе Arduino Uno R3 и эффективность его практического применения. В соответствии с поставленной целью в работе решены следующие задачи: собран на базе Arduino блок управления выдачи напитков, написана программа на С++, выполнен монтаж и наладку автомата, проведено  тестирование установки, изучена, литература и найдена информация о использовании систем управления, проанализированы полученные результаты и выявлены достоинства и недостатки системы.

            В данной работе были использованы методы исследования: поисковый – с  использованием научной и учебной литературы; статистический  – при обработке и составлении программы и сравнительный метод.

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

            Проект очень гибок,  не дорогой.  Преимущества предлагаемого к реализации изобретения перед аналогами.

Практическая значимость  проект поможет повысить производительность выдачи напитков за счет подключения  микроконтроллера. В перспективе будет возможность использования его людей с ограниченными возможностями здоровья.

Просмотр содержимого документа
«Автомат для выдачи напитков на базе Arduino Uno R3»

РОССИЙСКАЯ НАУЧНО-СОЦИАЛЬНАЯ ПРОГРАММА ДЛЯ МОЛОДЕЖИ И ШКОЛЬНИКОВ «ШАГ В БУДУЩЕЕ»



XXIII научная конференция молодых исследователей Сургутского района









Автомат для выдачи напитков на базе Arduino Uno R3






Автор:

Флоря Дмитрий ,

МБОУ «Барсовская СОШ№1»,

9 класс,

Сургутский район,пгт Барсово



Научный руководитель:

Васильева Елена Анаитольевна, учитель информатики

МБОУ «Барсовская СОШ №1»








Сургутский район

2019 год




Аннотация

Исследовательская работа состоит из теоретической части, описывающей вендинговые автоматы и платформу разработки Arduino, и практической части, рассматривающей вопрос создания автомата для выдачи напитков на базе Arduino Uno R3 на 15 страницах, 12 источников литературы, а так же 2 приложений на 5 страницах.

Ключевые слова, ВЕНДИНГОВЫЕ АВТОМАТЫ, ПРОГРАММИРОВАНИЕ на языке С++, ПЛАТФОРМА ARDUINO UNO 3.

В работе рассмотрены основы программирования на Arduino; создание автомата для выдачи напитков; список используемых источников; приложение.

Целью работы является создание автомат для выдачи напитков на базе Arduino Uno R3 и эффективность его практического применения. В соответствии с поставленной целью в работе решены следующие задачи: собран на базе Arduino блок управления выдачи напитков, написана программа на С++, выполнен монтаж и наладку автомата, проведено тестирование установки, изучена, литература и найдена информация о использовании систем управления, проанализированы полученные результаты и выявлены достоинства и недостатки системы.

В данной работе были использованы методы исследования: поисковый – с использованием научной и учебной литературы; статистический – при обработке и составлении программы и сравнительный метод.

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

Проект очень гибок, не дорогой. Преимущества предлагаемого к реализации изобретения перед аналогами.

Практическая значимость проект поможет повысить производительность выдачи напитков за счет подключения микроконтроллера. В перспективе будет возможность использования его людей с ограниченными возможностями здоровья.

Содержание

Введение……………………………………………………………………………..

с.4

  1. Глава 1. Вендинговые аппараты……………………………………...…….

    1. Венденговые аппараты:типы и разновидности…………………..……

    2. Среда разработки Аrduino…………………………………….………..

с.5

с.5

c.8

  1. Глава 2. Создание автомата для выдачи напитков………...………………

2.1 Расчет стоимости аппарата, для выдачи напитков………………..…...

с.8

с.10

Заключение…………………………………………………………………………...

с.11

Список используемых источников………………….……………………………....

Приложение………………………………………………..………………………….


с.12

с.13






















































Введение.

Появление первых микропроцессоров ознаменовало начало новой эры в развитии микропроцессорной техники. Наличие в одном корпусе большинства системных устройств, сделало микроконтроллер подобным обычному компьютеру. Раньше они назывались однокристальные микро ЭВМ [6]. Чтобы собрать устройство и микроконтроллер, необходимо знать основы схемотехники, устройство и работу конкретного процессора, уметь программировать на ассемблере и изготавливать электронную технику. В настоящее время, все изменилось. Сейчас существует такое устройство, как проект Arduino.

Arduino представляет собой наборы, состоящие из готового электронного блока и программного обеспечения. Электронный блок — это печатная плата с микроконтроллером и элементами, которые необходимы для работы. Вторая часть — это программное обеспечение для создания программ, включающее в себя простую среду разработки и язык программирования C/C++ [6].

Актуальность выбранной темы заключается в обеспечении необходимости доступа к программированию и разработке робототехнических устройств не только профессионалам, но и заинтересованным обучающимся.

Тема исследования: Автомат для выдачи напитков на базе Arduino Uno R3.

Актуальность: Автоматизировать процессы выдачи напитков для обеспечения высокой производительности.

Проблема исследования: как выбрать нужный напиток;

Объект исследования: автоматизированный комплекс выдачи напитков;

Предмет исследования: применение систем управления в повседневной жизни;

Цель исследования: Создание автомат для выдачи напитков на базе Arduino Uno R3 и его практическое применение.

Задачи исследования:

  1. Собрать на базе Arduino блок управления выдачи напитков.

  2. Написать программу.

  3. Выполнить монтаж и наладку. Провести тестирование моей установки.

  4. Изучить, литературу и найти информацию о использовании систем управления.

  5. Проанализировать полученные результаты и выявить достоинства и недостатки моей системы;

Методы исследования: поисковый метод с использованием научной и учебной литературы; статистический метод при обработке и составлении программы; сравнительный метод.

Гипотеза исследования: если мы хотим повысить производительность труда, то нам необходимо использовать современные технологии.

Новизна: Особенность моего проекта заключается в использовании микроконтроллера Arduino Uno, программируемого на языке С++

Практическая значимость проект поможет повысить производительность выдачи напитков за счет подключения микроконтроллера.

Проект очень гибок, не дорогой. Преимущества предлагаемого к реализации изобретения перед аналогами.


Глава 1. Вендинговые аппараты.

Недавнее исследование, проведённое учёными, показало, что некоторые востребованные в наше время профессии в ближайшие десятилетия перестанут быть актуальными, ведь все функции специалистов будут выполнять роботы. В первую очередь роботы заменят обслуживающий персонал и официантов[2].

В нашей работе мы расскажем о использовании аппаратов для выдачи напитков.

Термин «вендинговые аппараты» (кто-то говорит «автоматы») прочно вошел в разговорный обиход отрасли как историческое наследие от определения «торговый автомат».

Вендинговый автомат – это автоматическое устройство для торговли без участия продавца. Если говорить простыми словами – ящики с приемом денег и выдачей товаров или услуг.

Вид бизнеса с вышеупомянутыми устройствами - называется «вендинг». В России он появился сравнительно недавно – в конце 90-х – начале 2000-х.

Три «кита» вендинга 1. Ум

В самом бизнесе, есть понятие «умные аппараты» или «smart-автоматы». Смысл примерно такой же как Smart-TV – есть техника достаточно «деревянная», а есть и с умной начинкой, которая умеет передавать данные на сервер и управлять устройствами удалённо.

2. Честь

Если вы правильно подойдете к организации дела и процессу обслуживания, вам не придется стоять лакеями перед чиновниками и государственными служащими. Сами бизнес-процессы достаточно просты, системы налогообложения выверены годами и на практике применимы тысячами коллег. Остается не запятнать совесть некачественным кофе или просроченным шоколадным батончиком.

3. Достоинство

Технологичность и реальные перспективы развития бизнеса, на базе примеров развития вендинг-отрасли в других странах – вот что привлекает предпринимателей. Современное, высокотехнологичное и достойное дело! Минусов нет.

1.1 Вендинговые аппараты: типы и разновидности.

В мире существует масса оборудования по продажам без участия продавца, можно выделить следующие основные типы аппаратов:

  1. Кофейные - это классические представители семейства вендинговых. Между прочим являются самыми распространенными только в России. Продают понятно что - кофеёк.

  2. Снековые - вторые классические представители вендинговых машин. Продают снеки - любые товары, которые по размеру, фасону и упаковке подходят для продажи в аппаратах.

  3. Автоматы услуг - массажные кресла, зарядка, незамерзайка, копировальные, фотокиоски и т.д.

  4. Автоматы вещей – например, цветоматы(фломаты), почтомат, бутылки шампанского, автомобили, золото и так далее.

  5. Аппараты по розливу жидкостей - напитков, воды, молока и т.д.

  6. Механики – механические автоматы (МТА), в Америке бизнес на таких машинах называется «gumballs» - устройства без электроники, оплата производится монетами, выдача «штуками» - точнее «гамболсами».

  7. Киоски - это отдельная тема, возможно даже не совсем вендинговая, но в силу большого распространения платежных терминалов, мы включаем ее в наши обзоры.

Так или иначе у вас должна быть, реализуемая в рамках автоматизированной торговли - бизнес-идея, которую вы хотите предложить своим покупателям.

6. Окупаемость вендинговых аппаратов.

Отметим, что средняя окупаемость вендинговых аппаратов составляет около 1.5 года, примерно за пару лет вы с вероятностью 99% вернете затраты на оборудование и начнете зарабатывать уже себе.

Величина прибыли зависит от многих факторов: места установки, чистоты автомата, своевременности обслуживания, качества работы платежных систем - купюроприемника, монетоприемника, устройства выдачи сдачи и редкого оборудования на российском рынке - эквайринговых банковских терминалов.

Задумываясь о том, куда вложить деньги, частенько начинающие предприниматели приходят к бизнес-планам и бизнес-проектам в Интернете связанным с вендинговыми автоматами. По сравнению с организацией классической кофейни и даже точки «кофе-с-собой« вендинговый бизнес конечно же является более простым и менее трудозатратным.

Но не забывайте, что это всё равно бизнес-предприятие, которое потянет за собой большую часть спектра занятий рядового российского предпринимателя.

  1. Инвестиции - любой бизнес требует денежных вливаний, качественное оборудование и ингредиенты для обслуживания стоят дорого.

  2. Налогообложение - при оформлении договора на установку автоматов и других операций так или иначе придется оформляться как юридическое лицо или предприниматель. Вендоров выручает всем известный ЕНВД - не больно, но помнить нужно.

  3. Общение с ФНС, ПФР - не забывайте про своевременную оплату налогов и сдачу отчетности. Так или иначе выгоднее и проще платить поквартально.

  4. Товарооборот, учет - кофейные ингредиенты закажи, стаканчики приобрети, наполнители для снека купи по оптовым ценам.

  5. Логистика - развези воду, залей из 19 литровых фляг. Надо вовремя объезжать любые аппараты для наполнения ингредиентами, снеками и другими начинками.

  6. Сервисное обслуживание и инкассация - Кофе, сахар, сливки, какао, снеки, наполнители, товары - заполни каждый раз как кончились. Эквайринговые терминалы пока редкость на нашем рынке - поэтому еще и денежку снять нужно.

  7. Тех. обслуживание, ремонт - скорее всего мы не откроем вам большого секрета, если скажем, что техника, в том числе вендинговая - ломается! Да, да - чем больше технического обслуживания и ухода, тем меньше ремонта.

  8. И многое другое.

Если вы собираетесь заняться бизнесом нашей отрасли впервые – столкнетесь с массой открытий для себя, потому что русской поговорки «учишься на своих ошибках» никто не отменял, но бояться не стоит[2].

1.2 Среда разработки Arduino

С течением времени интерес к программированию продолжает расти, так как специальность программиста является очень востребованной не только в России, но и во многих других странах.

Программа — это описание процесса обработки информации. При выполнении программы рассчитывается совокупность выходных значений исходя из совокупности переменных или постоянных входных значений. Цель выполнения программы — сбор данных либо получение отклика на входные значения [3].

Для того, чтобы создать компьютерную программу, необходимо ясно понять, что она должна делать и главное, как она это будет делать. Если некоторые вопросы вами еще не проработаны, а вы уже пишете серьезную программу, то, скорее всего, она не будет работать так, как вы рассчитываете. Поэтому нужно идти от простого к сложному, разбивать программы на маленькие простые блоки, добиваться их работоспособности, а только затем собирать из них полую программу

Применение Arduino в прикладном программировании является одним из базовых задач. Целью является – создание необходимых представлений о современных программных продуктах, средах разработки и языках программирования, а также применение знаний, умений и навыков, приобретенных в процессе обучения, на практике. Наилучший результат практического применения знаний, умений и навыков достигается путем решения задач, несущих полезную нагрузку. Это требование полностью может выполнить применение платформы Arduino в обучении [9]. Программная часть Arduino состоит из открытой программной оболочки для написания программ, их компиляции и программирования аппаратуры. Аппаратная часть является набором печатных плат, продающимся как официальным производителем, так и сторонними производителями. Полностью открытая архитектура системы позволяет свободно копировать или дополнять линейку продукции Arduino [9]. Имея базовые знания по основам программирования в среде Turbo Pascal можно обеспечить оптимальный переход на изучения языков высокого уровня. Польза от применения Arduino в обучении прикладному программированию выражается следующими факторами: Экономическая доступность представляет несколько моделей: Arduino Uno, Arduino Mega, Arduino Leonardo, Arduino Nano, Arduino Mini. 34 Простота освоения среды разработки — это интуитивно понятный интерфейс, который позволяет в кратчайшие сроки освоить среду разработки. Платформа Arduino поддерживает очень большой диапазон периферийных устройств. Использование в разработке программного обеспечения языка программирования на основе C++, языка высокого уровня. Технологичность процесса разработки устройств, а именно наличие последовательного выполнения инструкций. Большой выбор дополнительной литературы и электронных ресурсов.

Исходя из представленных выше факторов, можно сделать вывод, что использование Arduino в обучении прикладному программированию позволит предоставить обучающимся возможность применить знания, умения и навыки, приобретенные в процессе обучения. Это даст мотивацию к дальнейшему обучению и закрепит теоретическую часть обучения на практике.


Глава 2. Создание автомата для выдачи напитков на базе Arduino Uno R3.

Для того чтобы реализовать проект по запуску автомата для выдачи напитков, необходимо иметь такой аппарат. Но его стоимость от 100000 рублей. Если постараться найти такой аппарат бывший в употреблении, то не все параметры меня устраивают. Необходимо переделать и перепрограммировать начинку. Поэтому мы решили собрать аппарат для выдачи напитков сами, на базе Arduini Uno. Для аппарата на сайте aliexpress.com заказали оборудование. Микроконтроллер, дисплей, кнопки, энкодер, помпу. Корпус аппарата я планирую сделать из оргстекла или фанеры, своими руками.

Программа, написанная на языке C++ загружается с компьютера в память микроконтроллера через USB порт.

В основу языка программирования, используемого в проектах Arduino, положен C++ — один из самых широко используемых языков программирования, поддерживающий как работу с низкоуровневыми командами, так и построение сложных объектов [5]. Программирование контроллеров Arduino удобно осуществлять в специальной среде Arduino IDE, поскольку в нее включен основной функционал для работы с ними.

Платформа состоит из аппаратной и программной частей. Обе чрезвычайно гибки и просты в использовании. Стоимость моего проекта составляет около 4000 рублей, что гораздо дешевле других систем.







Аппаратная часть 1)Микроконтроллер 2) Помпа 3) Кнопки управления 4) Преобразователь напряжения с 12В на 5 В. 5)Источники питания 6)Дисплей для отображения информации 7) Корпус

Ручное управление включением/выключением аппаратуры;

  • Отображать данные на LCD дисплее:

        1. Тип напитка;

        2. Количество;

2.2 Расчет стоимости аппарата для выдачи напитков.


Название оборудования Количество Цена /руб за шт
Микроконтроллер 1 260
Помпа 2 450
Кнопки управления 5 50
Преобразователь напряжения с 12В на 5 В 1 20
Источники питания 1 1000
Дисплей для отображения информации 1 500
Корпус 1 500
Итоговая стоимость 3430


Для реализации данного проекта необходимо:

  1. Схема подключения датчиков Приложение 1;
  2. Программа для управления микроконтроллером Arduino Uno R3 Приложение 2;


Заключение

Исследовательская работа по созданию аппарата для выдачи напитков на платформе ArduinoUno3 выполнена. Результат проделанной работы таков: Проведена классификация вендинговых аппаратов, анализ их приимуществ. Проводилось изучение и использование среды программирования С++ для Arduino; проведено изучение синтаксиса программного кода и представлена программа.

Цель достигнута — практикум разработан, задачи выполнены. Данная работа может быть использована для дальнейшего использования и дополнения. В перспективе использование данного аппарата будет возможно для людей с ограниченными возможностями здоровья.

В результате выполненного исследования были сделаны следующие выводы.

  1. Чтобы быть успешным, необходимо использовать в своей работа новые технологии.

  2. Мой проект на Arduino имеет такие преимущества: прост в реализации и не дорогой по цене.

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

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


Список используемой литературы и источников.



  1. Аппаратная платформа Атёшпо[Электронный ресурс]. — Режим доступа: http://arduino.ru/Hardware

  2. Гайсина И. Р. Развитие робототехники в школе [Текст] // Педаго­гическое мастерство: материалы II Междунар. науч. конф. (г. Москва, де­кабрь 2012 г.). — М.: Буки-Веди, 2012. — С. 105-107.

  3. Золотарева А. В. Методика преподавания по программам допол­нительного образования детей [Текст]: учебник и практикум для СПО / А. В. Золотарева, Г. М. Криницкая, А. Л. Пикина. — 2-е изд., испр. и доп.— М.: Издательство Юрайт, 2016. — 399 с. — (Профессиональное образо­вание).

  4. Курс «Arduino для начинающих» [Электронный ресурс]. — Ре­жим доступа: http://edurobots.ru/kurs-arduino-dlya-nachinayushhix/

  5. Момот М. В. Мобильные роботы на базе Arduino [Текст] / М. В. Момот. — СПб.: БХВ-Петербург, 2017. — 288 с.: ил/

  6. Петин В. А. Проекты с использованием контроллера Arduino [Текст] / В. А. Петин. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2016. — 464 с.: ил.

  7. Современное образование: робототехника в школе [Электронный ресурс]: Techno-guide. Technologies of the future — Режим па: http://techno-guide.ru/robototekhnika/sovremennoe-obrazovanie-robototekhnika-v-shkole.html

  8. Степанова-Быкова А. С. Методика профессионального обучения

  9. [Электронный ресурс]: курс лекций / А. С. Степанова-Быкова,

  10. Т. Г. Дулинец. — Режим доступа:http://files.lib.sfu-kras.ru/ebibl/umkd/1513/u ecture.pdf

  11. Филиппов С. А. Робототехника для детей и родителей [Текст]: учеб. пособие / С. А. Филиппов. — СПб.: Наука, 2013. - 319 с.

  12. Халамов В. Н. Образовательная робототехника на уроках инфор­матики и физики в средней школе [Текст]: уч.-метод. пособие / В. Н. Халамов. — Челябинск: Взгляд, 2011. — 160 с.



Приложение1

Приложение 2

#include

LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);

int _dispTempLength1=0;

boolean _isNeedClearDisp1;



const byte _menuParametrsArray[] PROGMEM = {1, 1, 1, 0, 0, 0, 3, 1, 1, 4, 1, 0, 2, 1, 2, 0, 0, 0, 4, 2, 2, 4, 3, 0, 3, 6, 1, 0, 0, 0, 0, 0, 1, 2, 2, 0};

int _menuValueArray_int[2];

const int _menuConstantValuesArray_int[] PROGMEM = {1, 100, 2, 200};

bool _menuValueArray_bool[1];

const bool _menuConstantValuesArray_bool[] PROGMEM = {1};

const char _flprogMenuNameString1[] PROGMEM = "Select Drink";

const char _flprogMenuNameString2[] PROGMEM = "Correct?";

const char _flprogMenuNameString3[] PROGMEM = "Amout of drink";

const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1, _flprogMenuNameString2, _flprogMenuNameString3};

struct _menuItemStricture {

int startInArrayIndex;

};

struct _menuMainStricture {

byte startIndex;

byte stopIndex;

bool isSwitchMenuAroundRing;

_menuItemStricture currentItem;

};

_menuItemStricture _MenuItems[3];

_menuMainStricture _MainMenus[1];

bool _gtv1 = 0;

bool _trgt1 = 0;

bool _trgt1I = 0;

String _MenuBlock_31037042_MNO;

String _MenuBlock_31037042_VNO;

bool _MenuBlock_31037042_OEIS = 0;

bool _MenuBlock_31037042_OMUIS = 0;

bool _MenuBlock_31037042_OMDIS = 0;

bool _MenuBlock_31037042_OVUIS = 0;

bool _MenuBlock_31037042_OVDIS = 0;

int _disp5oldLength = 0;

bool _tim3I = 0;

bool _tim3O = 0;

unsigned long _tim3P = 0UL;

bool _tim7I = 0;

bool _tim7O = 0;

unsigned long _tim7P = 0UL;

int _disp4oldLength = 0;

bool _tim8I = 0;

bool _tim8O = 0;

unsigned long _tim8P = 0UL;

int _disp1oldLength = 0;

int _disp2oldLength = 0;

bool _tim4I = 0;

bool _tim4O = 0;

unsigned long _tim4P = 0UL;

bool _tim2I = 0;

bool _tim2O = 0;

unsigned long _tim2P = 0UL;

int _disp3oldLength = 0;

void setup()

{

pinMode(13, INPUT_PULLUP);

pinMode(11, INPUT_PULLUP);

pinMode(3, INPUT_PULLUP);

pinMode(2, INPUT_PULLUP);

pinMode(19, OUTPUT);

pinMode(16, OUTPUT);

pinMode(17, OUTPUT);


_lcd1.begin(16, 2);

_MenuItems[0].startInArrayIndex = 0;

_MenuItems[1].startInArrayIndex = 12;

_MenuItems[2].startInArrayIndex = 24;

_MainMenus[0].startIndex = 1;

_MainMenus[0].isSwitchMenuAroundRing = 0;

_MainMenus[0].stopIndex = 3;

_MainMenus[0].currentItem = _MenuItems[0];

}

void loop()

{bool _tempVariable_bool;

byte _tempVariable_byte;

if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}






//Плата:1

bool _tmp1 = (_menuValueArray_bool[0]);

if (_tmp1) { if (! _trgt1I) _trgt1 = ! _trgt1; }

_trgt1I = _tmp1;

_gtv1 = !(_trgt1);

if (!(_gtv1)) {

_dispTempLength1 = ((String("Dispensing"))).length();

if (_disp3oldLength _dispTempLength1) {_isNeedClearDisp1 = 1;}

_disp3oldLength = _dispTempLength1;

_lcd1.setCursor(0, 0);

_lcd1.print((String("Dispensing")));

} else {

if (_disp3oldLength 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;}

}

if (_gtv1) {

_tempVariable_bool = 1;

if ( ! _MenuBlock_31037042_OEIS ) {_MenuBlock_31037042_OEIS = 1;

}

_tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex)+10]);

_MenuBlock_31037042_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1])));

_MenuBlock_31037042_VNO = _menuOutputValueString (0);

} else {

_tempVariable_bool = 0;

if (_MenuBlock_31037042_OEIS){

_MenuBlock_31037042_OEIS = 0;

}

_MenuBlock_31037042_MNO = "";

_MenuBlock_31037042_VNO = "";

}

if( (digitalRead (2))) { if ( ! _MenuBlock_31037042_OMUIS) {_MenuBlock_31037042_OMUIS = 1;if (_tempVariable_bool){ _menuUpEvents(0);

}}} else {_MenuBlock_31037042_OMUIS = 0;}

if( (digitalRead (3))) { if ( ! _MenuBlock_31037042_OMDIS) {_MenuBlock_31037042_OMDIS = 1;if (_tempVariable_bool){ _menuDownEvents(0);

}}} else {_MenuBlock_31037042_OMDIS = 0;}

if( (digitalRead (11))) { if ( ! _MenuBlock_31037042_OVUIS) {_MenuBlock_31037042_OVUIS = 1; if (_tempVariable_bool){ _valueUpEvents(0); } }} else {_MenuBlock_31037042_OVUIS = 0; }

if( (digitalRead (13))) { if ( ! _MenuBlock_31037042_OVDIS) {_MenuBlock_31037042_OVDIS = 1; if (_tempVariable_bool){ _valueDownEvents(0); }} } else {_MenuBlock_31037042_OVDIS = 0; }

if (_gtv1) {

_dispTempLength1 = ((_MenuBlock_31037042_VNO)).length();

if (_disp2oldLength _dispTempLength1) {_isNeedClearDisp1 = 1;}

_disp2oldLength = _dispTempLength1;

_lcd1.setCursor(0, 1);

_lcd1.print((_MenuBlock_31037042_VNO));

} else {

if (_disp2oldLength 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}

}

if (_gtv1) {

_dispTempLength1 = ((_MenuBlock_31037042_MNO)).length();

if (_disp1oldLength _dispTempLength1) {_isNeedClearDisp1 = 1;}

_disp1oldLength = _dispTempLength1;

_lcd1.setCursor(0, 0);

_lcd1.print((_MenuBlock_31037042_MNO));

} else {

if (_disp1oldLength 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}

}

if (!(_gtv1))

{ if (_tim2I) { if (_isTimer(_tim2P, 15000)) {_tim2O = 1;}} else {_tim2I =1; _tim2P = millis();}} else {_tim2O = 0; _tim2I = 0;}

digitalWrite(19, _tim2O);

if (( ((1) == ((_menuValueArray_int[0]))) && ((100) == ((_menuValueArray_int[1]))) ))

{ if (_tim3I) { if (_isTimer(_tim3P, 9500)) {_tim3O = 1;}} else {_tim3I =1; _tim3P = millis();}} else {_tim3O = 0; _tim3I = 0;}

if (( ((1) == ((_menuValueArray_int[0]))) && ((200) == ((_menuValueArray_int[1]))) ))

{ if (_tim4I) { if (_isTimer(_tim4P, 14000)) {_tim4O = 1;}} else {_tim4I =1; _tim4P = millis();}} else {_tim4O = 0; _tim4I = 0;}

if (( ((2) == ((_menuValueArray_int[0]))) && ((100) == ((_menuValueArray_int[1]))) ))

{ if (_tim8I) { if (_isTimer(_tim8P, 9500)) {_tim8O = 1;}} else {_tim8I =1; _tim8P = millis();}} else {_tim8O = 0; _tim8I = 0;}

if (( ((2) == ((_menuValueArray_int[0]))) && ((200) == ((_menuValueArray_int[1]))) ))

{ if (_tim7I) { if (_isTimer(_tim7P, 14000)) {_tim7O = 1;}} else {_tim7I =1; _tim7P = millis();}} else {_tim7O = 0; _tim7I = 0;}

digitalWrite(17, ( (!(_gtv1)) && (( (( (( ((2) == ((_menuValueArray_int[0]))) && ((100) == ((_menuValueArray_int[1]))) )) ^ (_tim8O) )) || (( (( ((2) == ((_menuValueArray_int[0]))) && ((200) == ((_menuValueArray_int[1]))) )) ^ (_tim7O) )) )) ));

if (( (!(_gtv1)) && (( (( (( ((2) == ((_menuValueArray_int[0]))) && ((100) == ((_menuValueArray_int[1]))) )) ^ (_tim8O) )) || (( (( ((2) == ((_menuValueArray_int[0]))) && ((200) == ((_menuValueArray_int[1]))) )) ^ (_tim7O) )) )) )) {

_dispTempLength1 = ((String("2"))).length();

if (_disp5oldLength _dispTempLength1) {_isNeedClearDisp1 = 1;}

_disp5oldLength = _dispTempLength1;

_lcd1.setCursor(0, 1);

_lcd1.print((String("2")));

} else {

if (_disp5oldLength 0) {_isNeedClearDisp1 = 1; _disp5oldLength = 0;}

}

digitalWrite(16, ( (!(_gtv1)) && (( (( (( ((1) == ((_menuValueArray_int[0]))) && ((100) == ((_menuValueArray_int[1]))) )) ^ (_tim3O) )) || (( (( ((1) == ((_menuValueArray_int[0]))) && ((200) == ((_menuValueArray_int[1]))) )) ^ (_tim4O) )) )) ));

if (( (!(_gtv1)) && (( (( (( ((1) == ((_menuValueArray_int[0]))) && ((100) == ((_menuValueArray_int[1]))) )) ^ (_tim3O) )) || (( (( ((1) == ((_menuValueArray_int[0]))) && ((200) == ((_menuValueArray_int[1]))) )) ^ (_tim4O) )) )) )) {

_dispTempLength1 = ((String("1"))).length();

if (_disp4oldLength _dispTempLength1) {_isNeedClearDisp1 = 1;}

_disp4oldLength = _dispTempLength1;

_lcd1.setCursor(0, 1);

_lcd1.print((String("1")));

} else {

if (_disp4oldLength 0) {_isNeedClearDisp1 = 1; _disp4oldLength = 0;}

}





}

bool _isTimer(unsigned long startTime, unsigned long period )

{

unsigned long currentTime;

currentTime = millis();

if (currentTime= startTime) {return (currentTime=(startTime + period));} else {return (currentTime =(4294967295-startTime+period));}

}

String _readStringFromProgmem (char *string)

{

String result = String("");

while (pgm_read_byte(string)!='\0')

{

result=result+ char(pgm_read_byte(string));

string++;

}

return result;

}

void _menuUpEvents (byte menuIndex)

{

byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);

byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]);

byte parentStartIndex;

byte parentStopIndex;

if (parIndex == 0) {parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex = (_MainMenus[menuIndex]).stopIndex;}

else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex)+3]);

parentStopIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex-1]).startInArrayIndex)+4]); }

if (tempIndex == parentStartIndex) {if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {(_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex -1]; return;} else{return;}}

(_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2];

return;

}

void _menuDownEvents (byte menuIndex)

{

byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);

byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]);

byte parentStartIndex;

byte parentStopIndex;

if (parIndex == 0) {parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex = (_MainMenus[menuIndex]).stopIndex;}

else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex-1]).startInArrayIndex)+3]);

parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+4]); }

if (tempIndex == parentStopIndex) {if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {(_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex -1]; return;} else{return;}}

(_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex];

return;

}

void _valueUpEvents (byte menuIndex)

{

byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]);

byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]);

byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]);

byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]);

if(itemType ==6) {_menuValueArray_bool[valIndex - 1 ] = 1; return;}

if (itemType == 1) {if (! indexMax == 0) { if ( ! (int(pgm_read_word(&_menuConstantValuesArray_int[indexMax -1])) int(_menuValueArray_int[valIndex -1]))) {return;} }

_menuValueArray_int[valIndex -1] = _menuValueArray_int[valIndex -1] + (pgm_read_word(&_menuConstantValuesArray_int[indexStep -1])); }

}

void _valueDownEvents (byte menuIndex)

{


byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]);

byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]);

byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]);

byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]);

if(itemType ==6) {_menuValueArray_bool[valIndex -1] = 0; return;}

if (itemType == 1) { if (! indexMin == 0) { if ( ! ((int(pgm_read_word(&_menuConstantValuesArray_int[indexMin - 1])))

_menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] - (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1])); }

}

String _menuOutputValueString (byte menuIndex)

{

byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]);

byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]);

byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]);

byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]);

if( valIndex == 0){ return "";}

byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+9]);

if(itemType == 1) { return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);}

if(itemType == 6) { return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin);}

return "";

}

String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)

{

if (itemType== 1) {

if (convFormat == 4) { return String((_menuValueArray_int[valIndex - 1 ]),DEC);}

if (convFormat == 5) { return String((_menuValueArray_int[valIndex - 1]),HEX);}

if (convFormat == 6) { return String((_menuValueArray_int[valIndex -1]),BIN);}

}

}

String _convertBoolean(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin)

{

if (convFormat == 1) { if(_menuValueArray_bool[valIndex -1]) {return "1";} else{ return "0";}}

if (convFormat == 2) { if(_menuValueArray_bool[valIndex -1]) {return "True";} else{ return "False";}}

if (convFormat == 3) { if(_menuValueArray_bool[valIndex -1 ]) {return "Да";} else{ return "Нет";}}

if(_menuValueArray_bool[valIndex -1]) {return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1])));} else { return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1])));}

}














Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!