Нужно подкорректировать код
- Войдите на сайт для отправки комментариев
Сб, 22/05/2021 - 03:24
Собрал вендинговый аппарат воды из реле, монетоприемника HX-616, датчика расхода воды YF-S201. Мой код не работает, нужно подкорректировать код или при необходимости, полностью переписать.
#include <LCD_1602_RUS.h> LCD_1602_RUS lcd(0x27, 16, 2); int coinpin=2; int relay = 13; int start_stop = 8; const int sensor_pulse =12; volatile int pulse = 0; volatile unsigned long timelastPulse = 0; boolean coinInsert = false; int buttonState = 0; int credits = 0; boolean currentstart_stop = LOW; boolean laststart_stop =LOW; boolean lastsensor_pulse = LOW; boolean currentsensor_pulse = LOW; boolean relayState = LOW; float cal = 2.5; float counter = 0.0; int TotalCount = 0; int set_point = 0; void setup(){ pinMode(relay, OUTPUT); pinMode(coinpin,INPUT_PULLUP); lcd.init(); lcd.backlight(); } boolean debounce(boolean last, int pin) { boolean current = digitalRead(pin); if (last != current) { delay(5); current = digitalRead(pin); } return current; } void loop(){ currentstart_stop = debounce(laststart_stop, start_stop); currentsensor_pulse = debounce(lastsensor_pulse, sensor_pulse); if (currentstart_stop == HIGH && laststart_stop == LOW){ if (relayState == HIGH){ digitalWrite(relay, LOW); relayState = LOW; } else{ digitalWrite(relay, HIGH); relayState = HIGH; } } laststart_stop = currentstart_stop; if(relayState == LOW){ attachInterrupt(digitalPinToInterrupt(coinpin),coinInterrupt,FALLING); unsigned long lastTime = millis() - timelastPulse; if((pulse > 0) && (lastTime > 24)){ coinInsert = false; credits += pulse; pulse = 0; } if (credits == 1){ set_point = set_point +500; } else if (credits == 2){ set_point = set_point +1000; } else if (credits == 3){ set_point = set_point +1500; } else if (credits == 4){ set_point = set_point +2000; } else if (credits == 5){ set_point = set_point +2500; } else if (credits == 6){ set_point = set_point +3000; } else if (credits == 7){ set_point = set_point +3500; } else if (credits == 8){ set_point = set_point +4000; } else if (credits == 9){ set_point = set_point +4500; } else if (credits == 10){ set_point = set_point +5000; } else { set_point = 0; counter = 0; TotalCount = 0; } if(relayState == HIGH){ if (lastsensor_pulse== LOW && currentsensor_pulse == HIGH){ counter = counter + cal; } } lastsensor_pulse = currentsensor_pulse; if(counter >= 10){ TotalCount = TotalCount + 10; counter = 0; } lcd.setCursor(3, 0); lcd.print(set_point); lcd.setCursor(4, 1); lcd.print(TotalCount); if(set_point <= TotalCount){ relayState = LOW; digitalWrite(relay, LOW); TotalCount=0; counter=0; } } } void coinInterrupt(){ pulse++ ; timelastPulse = millis(); }
3тр, если монетник рабочий и подключен правильно
man9913@mail.ru