СоХабр закрыт.
С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.
// WEI-YA HI-07
const int moneyPin3=3;
const int button1Pin = 2; //Кнопка 1 пин 2
const int add5V = 10;
const int ledPin = 13; //Реле
float sum=0.0; //Сумма
int time; //Время
int button1State;
int moneyPin;
int pulse1=0;
unsigned long timeCount1=0;
// дисплей WH1602
#include <LiquidCrystal.h> //Библиотека
LiquidCrystal lcd(12,11,7,6,5,4);
byte p20[8] = { //Создаем символы для анимации заряда
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte p40[8] = {
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
byte p60[8] = {
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
};
byte p80[8] = {
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
};
byte p100[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
void setup()
{
Serial.begin(9600); //Подключаем монитор порта для просмотра данных на компьютере
pinMode(button1Pin, INPUT); //Кнопка, на прием
pinMode(ledPin, OUTPUT); //13, на подачу
pinMode(moneyPin3,INPUT); //Монетник, на прием
pinMode(add5V,INPUT); //+5V pin
attachInterrupt(1,count_pulse1,FALLING);
Serial.println("Coin ready!");
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Coin ready!");
lcd.setCursor(0,0);
lcd.print("Hello=)");
lcd.createChar(0, p20); //Создаем перемение для анимации заряда (j)
lcd.createChar(1, p40);
lcd.createChar(2, p60);
lcd.createChar(3, p80);
lcd.createChar(4, p100);
}
void loop()
{
moneyPin = digitalRead(moneyPin3);//Cчитываем
if (pulse1=0) //Проверка
{
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Coin ready!");
lcd.setCursor(0,0);
lcd.print("Hello=)");
delay(200);
}
if (pulse1>0 && timeCount1<300) //Проверка
{
lcd.clear();
lcd.setCursor(0,0);lcd.print("Error:/");
lcd.setCursor(0,1);lcd.print("Fast pulse!");
delay(1100);
pulse1=0;
lcd.clear();
lcd.setCursor(0,0);lcd.print("Waiting!");
lcd.setCursor(0,1);lcd.print("Check the power!");
delay(1100);
pulse1=0;
}
if(pulse1>0 && timeCount1>300) //Проверка условий
{
sum+=0.25;
time=sum*4;
lcd.clear();
lcd.setCursor(0,0);lcd.print(time);
lcd.setCursor(4,0);lcd.print("minute"); //Вывод показателей на ЖКД.
lcd.setCursor(0,1);lcd.print("Total="); //Вывод показателей на ЖКД.
lcd.setCursor(6,1);lcd.print(sum);
}
button1State = digitalRead(button1Pin); //Запись показателей кнопки в переменную
digitalWrite(add5V, HIGH ); //Задаем значение
digitalWrite(ledPin, HIGH ); //Задаем значение
if ((button1State == LOW) && (sum != 0))// если жмём на кнопку и сумма не 0
// тогда
{
digitalWrite(ledPin, LOW);
lcd.clear();
lcd.setCursor(0,0);lcd.print("Power ok!");
for (int i = 0; i<16; i++) // Запуск анимации (16 раз)
{
for (int j=0; j<5; j++) {
lcd.setCursor(i, 1); //Определяем блок ЖКД
lcd.write(j); //Определяем символ в блоке
delay(sum*3200); //в суме = 64 сек ((0.25*3100/1000)*(16*5))
}
}
digitalWrite(ledPin, HIGH );
lcd.clear();
lcd.setCursor(0,0);lcd.print("Power off!");
sum=0;
}
//Проверка на переполнение
if (sum==20 || sum>20){
lcd.clear();
lcd.setCursor(0,0);lcd.print("It's too much!!!");
lcd.setCursor(0,1);lcd.print("Start Now!!!");
delay(1000);
}
if (sum<0){
lcd.clear();
lcd.setCursor(0,0);lcd.print("Error=(");
sum=0.0;
delay(1000);
}
}
void count_pulse1(){
//detachInterrupt(0);
detachInterrupt(1);
pulse1++;
if(pulse1==1)
timeCount1=millis();
//attachInterrupt(0,count_pulse,FALLING);
attachInterrupt(1,count_pulse1,FALLING);
}
комментарии (10)