100 рублей на телефон тому кто подскажет
- Войдите на сайт для отправки комментариев
Ср, 24/05/2017 - 23:00
Есть скетч, считает не все импульсы с счетчика. Стоит датчик скорости вращения двигателя. (светодиод-оптопара). Если что-то не понятно спрашивайте.
// купюроприемник IC A7 V7 const int moneyPin1 = 2; // монетоприемник CH-926 const int moneyPin2 = 3; int pulse1 = 0; int pulse2 = 0; unsigned long timeAllPulse1 = 2000; // макс. время приема купюры unsigned long timeAllPulse2 = 1800; // макс. время приема монеты unsigned long timeCount1 = 0; unsigned long timeCount2 = 0; unsigned long duration; float ostatok = 0.0; int klapan = 13; //клапан int shetchik = 14; // счетчик воды int val = 0;// переменная импульсов от счетчика int ostval = 0; int var = 0; float litr = 0.0; int rbut = 10; //кнопка ручного управления float nominals2[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; float sum = 0.0; // дисплей WH1602 #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 7, 6, 5, 4); void setup() { Serial.begin(9600); pinMode(rbut, INPUT); pinMode(shetchik, INPUT); pinMode(klapan, OUTPUT); digitalWrite(klapan, LOW); pinMode(moneyPin1, INPUT); pinMode(moneyPin2, INPUT); //attachInterrupt(0,count_pulse,FALLING); attachInterrupt(1, count_pulse2, FALLING); //Serial.println("coin ready"); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("coin ok!"); } void loop() { duration = pulseIn(shetchik, HIGH); if (duration > 0) { // если переменная дуратион больше нуля, а по сути количество импульсов больше 0 val++; // то импулься плюсуются Serial.println(val); } // прошло максимальное время приема монеты? if (pulse2 > 0 && (millis() - timeCount2) > timeAllPulse2) { sum += nominals2[pulse2]; //Serial.print("pulse2="); //Serial.println(pulse2); //Serial.print("money2="); Serial.println(nominals2[pulse2]); lcd.clear(); lcd.setCursor(0, 0); lcd.print("1="); lcd.setCursor(2, 0); lcd.print(nominals2[pulse2]); lcd.setCursor(0, 1); lcd.print("*="); lcd.setCursor(2, 1); lcd.print(sum); pulse2 = 0; } if (digitalRead(rbut) == HIGH) { // если кнопка ручного разлива нажата if (sum >= 1.40) { // если сумма больше либо равно 1,40 litr = sum / 1.40; //переменная литр равна сумма деленое на 1.40 (при сумме 2 рабля = 1,43) //Serial.println(litr); // выводим в монитор количество литров var = litr * 5; // переменная ВАР равна литр множенное на 5 (от балды взято) импульсов (ВАР = 1,43*5=7,15) ostatok = sum - (litr * 1.40); // остаток равен сумма - (литр * 1,40) (остаток = 2-(1,43*1,40)=0) //Serial.println(var); //Serial.println(ostatok); digitalWrite(klapan, HIGH); // включаем клапан если соблюдено условие нажатой кнопки и сумме более 1,4 //Serial.println("start001"); if (var == val) { //если количество поступивших импульсов равно ВАР digitalWrite(klapan, LOW); // выключаем клапан Serial.println("stop001"); //пишем в монитор СТОП 001 if (ostatok != 1) { // если остаток не равен 1 var = 0; // то устанавливаем ВАР в ноль (это количество импульсов равное внесенной сумме) val = 0; // и устанавливаем ВАЛ в ноль (ВАЛ это бегущие импульсы от счетчика ) sum = ostatok; } } //Serial.println(var); } } else { digitalWrite(klapan, LOW); val = var - val; } } /* else if (val == var) { digitalWrite(klapan, LOW); Serial.println("stop001"); }*/ //else digitalWrite(klapan, LOW); //Serial.println("stop002"); // обработка прерывания монетоприемника - получить кол-во импульсов // void count_pulse2() { //detachInterrupt(0); detachInterrupt(1); pulse2++; if (pulse2 == 1) timeCount2 = millis(); //attachInterrupt(0,count_pulse,FALLING); attachInterrupt(1, count_pulse2, FALLING); }
... там королевич mimoxodom пленяет грозного царя...
Непонятно чего барину непонятно
зачем в обработчике детач и аттач? Поставьте cli и sei
Или noInterrupts и Interrupts
И ишшо вдогоночку
Внутри функции обработки прерывания не работает delay(), значения возвращаемые millis() не изменяются. Возможна потеря данный передаваемых по последовательному соединению (Serial data) в момент выполнения функциии обработки прерывания. Переменные, изменяемые в функции, должным быть объявлены как volatile.
Есть скетч, считает не все импульсы с счетчика. Стоит датчик скорости вращения двигателя. (светодиод-оптопара). Если что-то не понятно спрашивайте.
Опубликуй здесь номер своего телефона, я пришлю на него один руболь чтобы барин не писал ерунду на форуме.
Опубликуй здесь номер своего телефона, я пришлю на него один руболь чтобы барин не писал ерунду на форуме.
И я присоединюсь.
Тоже рупь закину! ТС пиши номер!
Вона оно как!
Ужо выходит прибыльное дело.
PS. Интересно, что надо написать, чтобы народ скинулся минимум рублей по 10?
Вона оно как!
Ужо выходит прибыльное дело.
PS. Интересно, что надо написать, чтобы народ скинулся минимум рублей по 10?
Ник на Клапауций поменяй :)
Ник на Клапауций поменяй :)
А если я поменяю на sss - мне чёнить перепадёт?
Ник на Клапауций поменяй :)
А если я поменяю на sss - мне чёнить перепадёт?
Только если на SS то точно перепадёт )))