Arduino uno + купюроприемник ICT A7

frostterm
Offline
Зарегистрирован: 08.07.2019

Друзья, добрый день! У меня следующий вопрос: не получается нормально написать скетч для управления купюроприемником ICT A7 в режиме pulse. Переключатели на купюрнике выставлены так: с 1 по 8 (on-off-off-on-on-on-off-on), с 9 по 12 (все off), которые внутри под крышкой с 1 по 4 (on-on-off-off). Логика такова: к выходу 7 ардуино подключен релейный модуль. Ко входу 2 ардуино через подтягивающий резистор к +5В подключен синий провод купюрника (signal+). INHIBIT+ подключен к 4 выходу ардуино. Необходимо, чтобы принимались только купюры 50 и 100 рублей. При подаче купюры, ардуино считает импульсы и если купюра в 50 рублей, то на релейный модуль должен пойти высокий уровень и реле включится на время 5 минут (при этом купюрник должен заблокировать возможность приема денег), если купюра в 100 рублей, то на релейный модуль должен пойти высокий уровень и реле включится на время 10 минут (при этом купюрник должен заблокировать возможность приема денег). Во всех остальных случаях реле долно быть выключено и купюрник ожидает прием денег. За основу был взят скетч из книги Виктора Петина 2014 и доработан, однако скетч не работает как хотелось бы. Выручите пожалуйста.

Скетч:

Moderator : пожалуйста, вставьте код правильно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016
frostterm
Offline
Зарегистрирован: 08.07.2019
const int moneyPin=2; // подключение SIGNAL+
int money=0; // номинал принятой купюры
const int relePin = 7; // реле выходное
const int zapretPin = 4; // запрет приема купюр
unsigned long timeAllPulse=3000; // макс. время приема купюры
unsigned long timeCount=0;
void setup()
{
Serial.begin(9600);
pinMode(relePin, OUTPUT);
pinMode(moneyPin,INPUT);
pinMode(zapretPin,OUTPUT);
attachInterrupt(0,count_pulse,FALLING);
Serial.println("ready");
}
void loop()
{
  digitalWrite(relePin, LOW);
  digitalWrite(zapretPin, LOW);
// прошло максимальное время приема купюры? – вывести номинал
if(money=5 && (millis()-timeCount)>timeAllPulse)
{
Serial.print("money=");
Serial.println(10*money);
digitalWrite(relePin, HIGH);
digitalWrite(zapretPin, HIGH);
delay(300000);
money=0;
}
if(money=10 && (millis()-timeCount)>timeAllPulse)
{
Serial.print("money=");
Serial.println(10*money);
money=0;
digitalWrite(relePin, HIGH);
digitalWrite(zapretPin, HIGH);
delay(600000);
}
digitalWrite(zapretPin, HIGH);
digitalWrite(relePin, HIGH);
}
// обработка прерывания - получить кол-во импульсов
//
void count_pulse()
{
detachInterrupt(0);
money++;
if(money==1)
timeCount=millis();
attachInterrupt(0,count_pulse,FALLING);
}

 

frostterm
Offline
Зарегистрирован: 08.07.2019

Ребят, ну помогите разобраться

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

frostterm пишет:

Ребят, ну помогите разобраться

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

Почитай первую тему в разделе "Песочница", а потом попробуй описать задачу не в терминах купюр, а в терминах сигналов и реакций на них (например, не просто "считает импульсы", а хотя бы что там за импульсы и сколько их нужно насчитать и так по всем пунктам). Затем, описать свою программу (что делает тот или иной кусок) в терминах описанной задачи. Ну, и наконец опиши проблему не фразой "скетч не работает как хотелось бы", а опиши как именно он работает и чем это отличается от "хотелось бы". 

Тогда твои шансы резко повысятся.