Arduino uno + купюроприемник ICT A7
- Войдите на сайт для отправки комментариев
Друзья, добрый день! У меня следующий вопрос: не получается нормально написать скетч для управления купюроприемником 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 и доработан, однако скетч не работает как хотелось бы. Выручите пожалуйста.
Скетч:
А скетч-то где?
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); }Ребят, ну помогите разобраться
Ребят, ну помогите разобраться
Тебе очень трудно помочь - ты сделал всё, чтобы затруднить жизнь помогающим.
Почитай первую тему в разделе "Песочница", а потом попробуй описать задачу не в терминах купюр, а в терминах сигналов и реакций на них (например, не просто "считает импульсы", а хотя бы что там за импульсы и сколько их нужно насчитать и так по всем пунктам). Затем, описать свою программу (что делает тот или иной кусок) в терминах описанной задачи. Ну, и наконец опиши проблему не фразой "скетч не работает как хотелось бы", а опиши как именно он работает и чем это отличается от "хотелось бы".
Тогда твои шансы резко повысятся.
У Петина ошибка в книге
attachInterrupt(0,count_pulse,FALLING);
прерывание стоит на пине 0,хотя объявлен
constintmoneyPin=2;// подключение SIGNAL+Нет там ошибки. Цифра 0 означает не номер пина, а номер прерывания. Прерывание int.0 находится на пине 2.
http://arduino.ru/Reference/AttachInterrupt