Нужно подкорректировать код

Aidos Sadak
Offline
Зарегистрирован: 22.05.2021

Собрал вендинговый аппарат воды из реле, монетоприемника HX-616, датчика расхода воды YF-S201. Мой код не работает, нужно подкорректировать код или при необходимости, полностью переписать.

001#include <LCD_1602_RUS.h>
002LCD_1602_RUS lcd(0x27, 16, 2);
003 
004int coinpin=2;
005int relay = 13;                
006int start_stop = 8;            
007const int sensor_pulse =12;    
008 
009 
010 
011volatile int pulse = 0;
012volatile unsigned long timelastPulse = 0;
013boolean coinInsert = false;
014int buttonState = 0;
015int credits = 0;
016boolean currentstart_stop = LOW;        
017boolean laststart_stop =LOW;            
018boolean lastsensor_pulse = LOW;
019boolean currentsensor_pulse = LOW;
020boolean relayState = LOW;               
021 
022 
023float cal = 2.5;                       
024float counter = 0.0;
025int TotalCount = 0;
026int set_point = 0; 
027 
028void setup(){
029  pinMode(relay, OUTPUT);    
030  pinMode(coinpin,INPUT_PULLUP);
031  lcd.init();                     
032  lcd.backlight();
033}
034 
035 
036    
037boolean debounce(boolean last, int pin)
038{
039boolean current = digitalRead(pin);
040if (last != current)
041{
042delay(5);
043current = digitalRead(pin);
044}
045return current;
046}
047 
048 
049 
050 
051void loop(){
052 
053  currentstart_stop = debounce(laststart_stop, start_stop);   
054  currentsensor_pulse = debounce(lastsensor_pulse, sensor_pulse);
055 
056 
057  
058  if (currentstart_stop == HIGH && laststart_stop == LOW){
059     
060    if (relayState == HIGH){        
061      digitalWrite(relay, LOW);
062      relayState = LOW;
063    }
064    else{
065      digitalWrite(relay, HIGH);
066      relayState = HIGH;
067    }
068  }
069   
070  laststart_stop = currentstart_stop;
071 
072 
073 
074 
075 
076if(relayState == LOW){ 
077 
078attachInterrupt(digitalPinToInterrupt(coinpin),coinInterrupt,FALLING);
079 
080 unsigned long lastTime = millis() - timelastPulse;
081 if((pulse > 0) && (lastTime > 24)){
082  coinInsert = false;
083  credits += pulse;
084  pulse = 0;
085 }
086  
087if (credits == 1){ 
088    set_point = set_point +500;
089  
090 
091else if  (credits == 2){ 
092    set_point = set_point +1000;
093  
094 
095else if  (credits == 3){ 
096    set_point = set_point +1500;
097  
098 
099else if  (credits == 4){ 
100    set_point = set_point +2000;
101  }       
102 
103else if  (credits == 5){ 
104    set_point = set_point +2500;
105  
106 
107else if  (credits == 6){
108    set_point = set_point +3000;
109  
110 
111else if  (credits == 7){ 
112    set_point = set_point +3500;
113  
114 
115else if  (credits == 8){ 
116    set_point = set_point +4000;
117  }   
118 
119else if  (credits == 9){ 
120    set_point = set_point +4500;
121  
122 
123else if  (credits == 10){ 
124    set_point = set_point +5000;
125  }   
126 
127else {
128  set_point = 0;
129counter = 0;        
130TotalCount = 0;
131  }       
132    
133 
134    
135 
136  if(relayState == HIGH){   
137  if (lastsensor_pulse== LOW && currentsensor_pulse == HIGH){
138      counter = counter + cal;
139  }
140  }
141 lastsensor_pulse = currentsensor_pulse;
142  
143 
144if(counter >= 10){
145  TotalCount = TotalCount + 10;
146  counter = 0;                    
147  }
148 
149 lcd.setCursor(3, 0);          
150 lcd.print(set_point);
151 lcd.setCursor(4, 1);          
152 lcd.print(TotalCount);
153 
154  
155 if(set_point <= TotalCount){
156  relayState = LOW;
157  digitalWrite(relay, LOW);
158  TotalCount=0;
159  counter=0;
160 }
161 
162}
163}
164 
165void coinInterrupt(){
166  pulse++ ;
167  timelastPulse = millis();
168}

 

man9913
Offline
Зарегистрирован: 19.03.2016

3тр, если монетник рабочий и подключен правильно

man9913@mail.ru