Venduino — модель вендингового аппарата на Arduino


Схема
Схема вендингового аппарата на Arduino

Код

/*--------------------VenDuino V0_31------(c) 2016 Ryan Bates, RetroBuiltgames.com---------
Vending machine using FULL ROTATION servos.
I/O           PIN#
ServoA        ~11
ServoB        ~10
ServoC         ~9
ServoD         ~6
ButtonA         8
ButtonB         7
ButtonC         5
ButtonD         4
LEDready       13
LEDdispense    12
coinInsert     - 3
A0-A4 Nokia5110 LCD
*/
#include <LCD5110_Graph.h>
LCD5110 myGLCD(A0,A1,A2,A3,A4);
extern uint8_t SmallFont[];
const int ServoA = 11;
const int ServoB = 10;
const int ServoC = 9;
const int ServoD = 6;
const int clockwise = 1700;
const int counterclockwise = 1300;
const int ButtonA = 8;
const int ButtonB = 7;
const int ButtonC = 5;
const int ButtonD = 4;
const int LEDready = 13;
const int coinInsert = 12;
long previousMillis = 0;
long intervalIdle = 500;
int LEDreadyState = LOW;
int y1= 0; int y2= 10; //position shifters for LCd txt
void setup() {

  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
   myGLCD.setContrast(70);

  pinMode(ButtonA, INPUT_PULLUP);
  pinMode(ButtonB, INPUT_PULLUP);
  pinMode(ButtonC, INPUT_PULLUP);
  pinMode(ButtonD, INPUT_PULLUP);
  pinMode(LEDready, OUTPUT);
  pinMode(coinInsert, INPUT_PULLUP);

  myGLCD.invert(true);
  myGLCD.print("VenDuino", CENTER, 1);
  myGLCD.print("by Ryan", CENTER, 10);
  myGLCD.print("(c) 2016", CENTER, 30);
  myGLCD.drawRoundRect(13, 0, 70, 8);
  myGLCD.drawRect(0, 20, 83, 47);
  myGLCD.update(); delay(1000); myGLCD.clrScr(); myGLCD.update();
}

void loop()
{
//--Blink Ready LED---------------------------------------------------
 unsigned long currentMillis = millis();
  if(currentMillis - previousMillis >= intervalIdle) { // save the last time you blinked the LED
   previousMillis = currentMillis;

   if (LEDreadyState == LOW){  // if the LED is off turn it on and vice-versa:
      LEDreadyState = HIGH;

      myGLCD.clrScr();
     myGLCD.print("Please insert", CENTER, y1);
     myGLCD.print(" $0.25. ", CENTER, y2);
     myGLCD.invert(false);
     myGLCD.update();      }

   else
     LEDreadyState = LOW;
     digitalWrite(LEDready, LEDreadyState);// set the LED with the ledState of the variable:
     y1=y1 +5; y2=y2+5; //shift the text position down
     if ((y1==35) && (y2== 45)) //when the text almost goes off-screen, move it back up
        {y1=0; y2=10; }
  }

//---Wait for Coin/Credit---------------------------------------------------------------
while (digitalRead(coinInsert)==LOW) { //if coin inserted stay in servo enable loop
  digitalWrite(LEDready, HIGH);
  myGLCD.clrScr();  myGLCD.update();
  myGLCD.print("Please make", CENTER, 0);
  myGLCD.print(" a selection. ", CENTER, 10);
  myGLCD.drawRect(20, 20, 63, 47);
  myGLCD.drawRect(20, 20, 41, 47);
  myGLCD.drawRect(20, 20, 63, 34);
  myGLCD.update();
  servoEnable();
                                      }


}
void servoEnable(){

while (digitalRead(ButtonA) == HIGH || digitalRead(ButtonB) == HIGH ||
digitalRead(ButtonC) == HIGH || digitalRead(ButtonD) == HIGH) {

 //---------Servo A----------------------------------------------------
  if ((digitalRead(ButtonA) == LOW) ) {
     for(int i=0; i<2; i++)
    {digitalWrite(LEDready, HIGH); delay(50); digitalWrite(LEDready, LOW); delay(50); }

 myGLCD.clrScr(); myGLCD.print("Vending", CENTER, 0);
 myGLCD.drawRect(20, 20, 63, 47); myGLCD.drawRect(20, 20, 41, 47);
 myGLCD.drawRect(20, 20, 63, 34); myGLCD.print("A1", 25, 24);
 myGLCD.update();

   for(int i=0; i<57; i++)  // change this to adjust +- full revolution
    {
    digitalWrite(ServoA,HIGH);
    delayMicroseconds(clockwise); // 1.7ms
    digitalWrite(ServoA,LOW);
    delay(18.5); // 18.5ms
    //delay(50); enable this line to slow the angular velcity of the servo rotation
    }
    break;                            } // when item is dispensed exit loop and return to wait for coin

  //---------Servo B----------------------------------------------------
  if ((digitalRead(ButtonB) == LOW) ) {
    for(int i=0; i<2; i++)
    {digitalWrite(LEDready, HIGH); delay(50); digitalWrite(LEDready, LOW); delay(50); }

 myGLCD.clrScr(); myGLCD.print("Vending", CENTER, 0);
 myGLCD.drawRect(20, 20, 63, 47); myGLCD.drawRect(20, 20, 41, 47);
 myGLCD.drawRect(20, 20, 63, 34); myGLCD.print("B1", 46, 24);
 myGLCD.update();

   for(int i=0; i<57; i++)
    {
    digitalWrite(ServoB,HIGH);
    delayMicroseconds(counterclockwise); // 1.7ms
    digitalWrite(ServoB,LOW);
    delay(18.5); // 18.5ms
    //delay(50);
    }

   break;                            }

  //---------Servo C----------------------------------------------------
  if ((digitalRead(ButtonC) == LOW) ) {
    for(int i=0; i<2; i++)
    {digitalWrite(LEDready, HIGH); delay(50); digitalWrite(LEDready, LOW); delay(50); }

 myGLCD.clrScr(); myGLCD.print("Vending", CENTER, 0);
 myGLCD.drawRect(20, 20, 63, 47); myGLCD.drawRect(20, 20, 41, 47);
 myGLCD.drawRect(20, 20, 63, 34); myGLCD.print("C2", 25, 37);
 myGLCD.update();

   for(int i=0; i<57; i++)
    {
    digitalWrite(ServoC,HIGH);
    delayMicroseconds(clockwise); // 1.7ms
    digitalWrite(ServoC,LOW);
    delay(18.5); // 18.5ms
    //delay(50);
    }
    break;                            }

  //---------Servo D----------------------------------------------------
  if ((digitalRead(ButtonD) == LOW) ) {
     for(int i=0; i<2; i++)
    {digitalWrite(LEDready, HIGH); delay(50); digitalWrite(LEDready, LOW); delay(50); }

myGLCD.clrScr(); myGLCD.print("Vending", CENTER, 0);
 myGLCD.drawRect(20, 20, 63, 47); myGLCD.drawRect(20, 20, 41, 47);
 myGLCD.drawRect(20, 20, 63, 34); myGLCD.print("D2", 46, 37);
 myGLCD.update();

   for(int i=0; i<57; i++)
    {
    digitalWrite(ServoD,HIGH);
    delayMicroseconds(clockwise); // 1.7ms
    digitalWrite(ServoD,LOW);
    delay(18.5); // 18.5ms
    //delay(50);
    }
    break;                            }
                                                                    }
}

Ссылки
Venduino

По теме
Arduino для автоматизации кофейного автомата
Arduino для автоматизации снекового автомата
Вендинговый автомат с Arduino!

Arduino как фреймворк
Ардуино что это и зачем?
Arduino, термины, начало работы
Разновидности плат Arduino, а также про клоны, оригиналы и совместимость
КМБ для начинающих ардуинщиков


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака телеприсутствие управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение