Simulacija crpne stanice s dvije crpke. Razina vode se prati pomocu četiri kruške (nivo suho, nivo nisko, srednji nivo i nivo visoko). Crpke se izmjenjuju prema satima rada. Postoji prva radna i druga radna. Prva radna se uključuje na srednjem nivou, a druga radna na visokom nivou. Ukoliko nivo i dalje raste, na razini visoko se uključuje alarm. Kada se razina spusti, alarm je moguće resetirati. Kada nivo padne na razinu nisko, crpke se isključuju s kratkom zadrškom.
main.cpp
00001 #include "mbed.h" 00002 #include "TextLCD.h" 00003 00004 TextLCD lcd(p19,p20,p21,p22,p23,p24); 00005 DigitalOut Q_M1_pumpa(p5); 00006 DigitalOut Q_M2_pumpa(p6); 00007 DigitalIn kruska1(p7); //zastita od rada na suho 00008 DigitalIn kruska2(p8); //razina uklopa prve pumpe 00009 DigitalIn kruska3(p9); //razina uklopa druge pumpe 00010 DigitalIn kruska4(p10); //razina alarm 00011 DigitalOut Q_Alarm (p11); 00012 InterruptIn Alarm_reset (p12); 00013 DigitalIn reset_sati(p13); 00014 Ticker Alarm_Led; 00015 Timer titranje; 00016 00017 bool Alarm_full; 00018 bool prva_radna (0); 00019 bool druga_radna (0); 00020 bool M1_prva_radna(0); 00021 bool M1_druga_radna(0); 00022 bool M2_prva_radna(0); 00023 bool M2_druga_radna(0); 00024 00025 00026 int M1_h (0); 00027 int M2_h (0); 00028 00029 void upravljanje() 00030 { 00031 kruska1.mode(PullUp); 00032 kruska2.mode(PullUp); 00033 kruska3.mode(PullUp); 00034 kruska4.mode(PullUp); 00035 { 00036 if (kruska2==1 or kruska3==1) { 00037 prva_radna = 1; 00038 } 00039 if (kruska3==1) { 00040 druga_radna = 1; 00041 } 00042 if (kruska2==0) { 00043 wait (1.0); 00044 prva_radna = 0; 00045 druga_radna = 0; 00046 } 00047 if (kruska1==0) { 00048 prva_radna = 0; 00049 druga_radna = 0; 00050 } 00051 if (kruska4==1) { 00052 Alarm_full = 1; 00053 wait(0.5); 00054 } 00055 } 00056 Q_M1_pumpa = ((prva_radna and M1_prva_radna) or (druga_radna and M1_druga_radna)); 00057 Q_M2_pumpa = ((prva_radna and M2_prva_radna) or (druga_radna and M2_druga_radna)); 00058 } 00059 00060 void sati_rada () 00061 { 00062 if (Q_M1_pumpa==1) { 00063 M1_h = M1_h + 1; 00064 wait (2.0); 00065 } 00066 if (Q_M2_pumpa==1) { 00067 M2_h = M2_h + 1; 00068 wait (2.0); 00069 } 00070 if (reset_sati==1) { 00071 M1_h = 0; 00072 M2_h = 0; 00073 } 00074 } 00075 00076 void izmjena_pumpi () 00077 { 00078 { 00079 if (M2_prva_radna==0 and (M1_h < (M2_h + 5))) { 00080 M1_prva_radna = 1; 00081 M2_druga_radna = 1; 00082 } else { 00083 M1_prva_radna = 0; 00084 M2_druga_radna = 0; 00085 } 00086 } 00087 { 00088 if (M1_prva_radna==0 and (M2_h < M1_h)) { 00089 M2_prva_radna = 1; 00090 M1_druga_radna = 1; 00091 } else { 00092 M2_prva_radna = 0; 00093 M1_druga_radna = 0; 00094 } 00095 } 00096 } 00097 00098 00099 void LCD_text () 00100 { 00101 if (kruska1==0&&kruska2==0&&kruska3==0&&kruska4==0) { 00102 lcd.cls(); 00103 lcd.locate(0,0); 00104 lcd.printf("Nivo suho"); 00105 lcd.locate(0,1); 00106 lcd.printf("M1-%ih", M1_h); 00107 lcd.locate(8,1); 00108 lcd.printf("M2-%ih", M2_h); 00109 wait(0.5); 00110 } 00111 if (kruska1==1&&kruska2==0&&kruska3==0&&kruska4==0) { 00112 lcd.cls(); 00113 lcd.locate(0,0); 00114 lcd.printf("Nizak nivo"); 00115 lcd.locate(0,1); 00116 lcd.printf("M1-%ih", M1_h); 00117 lcd.locate(8,1); 00118 lcd.printf("M2-%ih", M2_h); 00119 wait(0.5); 00120 } 00121 if (kruska1==1&&kruska2==1&&kruska3==0&&kruska4==0) { 00122 lcd.cls(); 00123 lcd.locate(0,0); 00124 lcd.printf("Srednji nivo"); 00125 lcd.locate(0,1); 00126 lcd.printf("M1-%ih", M1_h); 00127 lcd.locate(8,1); 00128 lcd.printf("M2-%ih", M2_h); 00129 wait(0.5); 00130 } 00131 if (kruska1==1&&kruska2==1&&kruska3==1&&kruska4==0) { 00132 lcd.cls(); 00133 lcd.locate(0,0); 00134 lcd.printf("Visok nivo"); 00135 lcd.locate(0,1); 00136 lcd.printf("M1-%ih", M1_h); 00137 lcd.locate(8,1); 00138 lcd.printf("M2-%ih", M2_h); 00139 wait(0.5); 00140 } 00141 if (kruska1==1&&kruska2==1&&kruska3==1&&kruska4==1) { 00142 lcd.cls(); 00143 lcd.locate(0,0); 00144 lcd.printf("Alarm-preljev"); 00145 lcd.locate(0,1); 00146 lcd.printf("M1-%ih", M1_h); 00147 lcd.locate(8,1); 00148 lcd.printf("M2-%ih", M2_h); 00149 wait(0.5); 00150 } 00151 } 00152 00153 00154 void alarm_prepunjenost () 00155 { 00156 if (Alarm_full==1) { 00157 Q_Alarm = !Q_Alarm; 00158 } 00159 if (Alarm_full==0) { 00160 Q_Alarm = 0; 00161 } 00162 } 00163 00164 void alarm_led_reset () 00165 { 00166 if (titranje.read_ms()>200) 00167 Alarm_full = 0; 00168 titranje.reset(); 00169 } 00170 00171 int main() 00172 { 00173 while(1) { 00174 upravljanje(); 00175 sati_rada (); 00176 izmjena_pumpi (); 00177 LCD_text (); 00178 00179 Alarm_Led.attach(&alarm_prepunjenost, 0.5); 00180 00181 titranje.start(); 00182 Alarm_reset.rise(&alarm_led_reset); 00183 } 00184 }
Generated on Thu Aug 11 2022 08:39:21 by
1.7.2