Аркадный автомат код таймера

Vitab
Offline
Зарегистрирован: 06.04.2016

Делаем с сыном аркадный автомат, ну и решили сделать его полностью "аркадным" т.е. заказали манетоприемник. Увидев цены на таймеры к манетоприемникам решили сделать на Ардуино. Накопал в интернете схему и скетч, Но скетч почему то не работает  пишет на экране Hello и Coin Ready и все не реагирует на импульсы с манетоприемника (имитирую). Прошу помощи!

// 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);
  }

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

этот раздел для готовых проектов.  для вопросов есть другие разделы