Konstrukcijski rad iz kolegija Mikroupravljaci

Dependencies:   mbed TextLCD ULN2003_StepperDriver

Revision:
1:a49b3c29aeb2
Parent:
0:e1ee9ea8436b
Child:
2:a8c9d4c65e58
diff -r e1ee9ea8436b -r a49b3c29aeb2 main.cpp
--- a/main.cpp	Thu Nov 14 16:39:38 2019 +0000
+++ b/main.cpp	Sat Nov 16 11:03:27 2019 +0000
@@ -19,6 +19,8 @@
 DigitalOut ledi(PC_2);  //LED stanja isključenja 
 DigitalOut ledu(PC_3);  //LED stanja uključeno
 DigitalOut ledk(PA_1);  //LED kvara
+DigitalOut leds(PA_0);  //LED kvara
+DigitalIn gp(PB_1);  //LED k
                             
                             //Analogni ulazi za mjerenje struje:
 AnalogIn strujaCS1(PC_0);
@@ -30,9 +32,11 @@
 InterruptIn k_uklj2(PA_14);     //uklj. kontakt 2
 InterruptIn k_isklj(PA_15);     //isklj. kontakt
 InterruptIn kv_isklj(PD_2);     //isključenje kvara (tipka)
+InterruptIn lom(PA_8);
 
 PwmOut zvono1(PC_6);              //pinovi za zvona
-PwmOut zvono2(PC_8);            
+PwmOut zvono2(PC_8);
+PwmOut alarm(PA_9);            
 
                         //Timeri:
 Timer osnovno;          //za vraćanje u osnovno nakon isključenja
@@ -62,6 +66,8 @@
 float struja4;
 bool U=0;           //pomoćna varijabla za uključenje
 bool aisk=0;        //pomoćna varijabla za automatsko isključenje (vremensko)
+bool kvar_l=0;
+bool alarm_i=0;
 
 void ukljucenje1();         //funkcija (potprogram) uključenja sa strane 1
 void ukljucenje2();         //funkcija (potprogram) za uključenje sa strane 2
@@ -77,6 +83,9 @@
 void mjerenja();            //funkcija za  struje LED 
 void T_iskljucenje();       //funkcija za automatsko isključenje (vremensko)
 void osnovno_st();
+void lom_m();
+void lom_m_k();
+void alarm_u();
  
 int main() {
      lcd.setBacklight(TextLCD::LightOn);    //uključenje pozadinskog svjetla na LCD
@@ -96,10 +105,17 @@
        k_uklj2.rise(&ukljucenje2);
        k_isklj.fall(&iskljucenje);
        kv_isklj.fall(&kvar_isklj);
+       lom.fall(&lom_m);
+       lom.rise(&lom_m_k);
    
         lcd.cls();   //čišćenje displeja
         lcd.printf("Kvar %i\nSmetnja %i", bkvar, bsmetnja); //prikaz broja kvara i smetnje na lcd 
          
+         if(gp==0){
+               postav_gore();
+               wait(8);
+               }
+               
                //glavna petlja
    while(1) {
                             //uvjeti za LED uključenja, isključenja i kvara
@@ -118,7 +134,12 @@
         if(kvar==1) {
             ledk=1;}
             else {
-                    ledk=0;}
+                    ledk=0;
+                    alarm_i=0;}
+        if(smetnja==1) {
+            leds=1;}
+            else {
+                    leds=0;}
                     
                                
                                 //uključenje:
@@ -130,12 +151,13 @@
             if(U==0){
                 
                 zvona();
+                led3=1;
                 led1=1;
             tcs.attach(&cs, 0.5); 
              //mjere.attach(&mjerenja, 1.5); 
              //start tickera za CS, treptanje dioda
-            Tukljucenje.attach(&T_iskljucenje, 20.0);
-            wait(6); //predzvonjenje
+            Tukljucenje.attach(&T_iskljucenje, 40.0);
+            wait(8); //predzvonjenje
             postav_dolje();
              pr_zv(); 
              U=1;
@@ -145,6 +167,7 @@
           if(aisk==1) {
                
             smetnja=1;
+            leds=1;
             bsmetnja=bsmetnja+1;
             postav_gore();  
             wait(0.2);        
@@ -152,35 +175,49 @@
             //mjere.detach();
             tcs.detach();           //isključenje signala
             led1=0; 
-            led2=0;  
+            led2=0; 
+            led3=0;
+            led4=0; 
             uklj1=0;
             uklj2=0;
             U=0;
             aisk=0;
+            alarm_u();
+            if(gp==0){
+                kvar=1;
+                }
         }
                         //Isključenje na isključnom kontaktu
                         
        if((uklj1==1 || uklj2==1) && (isklj==1)) {   //isključenje za stranu 1
-                Tukljucenje.detach();
+                
+                wait(2);
                 if(p_gore==0) {
                 postav_gore();
                 wait(0.1);
                 p_gore=1;
+                if(gp==0){
+                   kvar=1;
                    }
-                
+                   }
+                Tukljucenje.detach();
                  tcs.detach();         //isključenje signala
                    led1=0; 
-                   led2=0;  
+                   led2=0;
+                   led3=0;
+                   led4=0;  
                     
                   osnovno.start();  //pokretanje timera osnovno
                 }
                          //Dovođenje u osnovno stanje               
                 
-           if(osnovno.read()>=20 || (uklj2==1 && uklj1==1)) {
-            if(osnovno.read()>=20) {
+           if(osnovno.read()>=40 || (uklj2==1 && uklj1==1)) {
+            if(osnovno.read()>=40) {
                 smetnja=1;
+                leds=1;
                 bsmetnja=bsmetnja+1;
                 osnovno_st();
+                alarm_u();
                 }
                 else {
                     osovine.start();
@@ -193,9 +230,12 @@
              wait(0.1);   
                             //Uključenje kvara kod aktivacije isklj. kontakta bez uključenja:
                               
-        if((uklj1==0 && uklj2==0) && (isklj==1)) {      //kvar kod isključnog kontakta bez uključenja
+        if(((uklj1==0 && uklj2==0) && (isklj==1)) || lom==0){      //kvar kod isključnog kontakta bez uključenja
               kvar=1;
+              alarm_u();
+              
               }
+              
         kvar_lcd();
                   } //kraj while(1)
             }    //kraj int main()
@@ -265,11 +305,17 @@
            
                        
   void kvar_isklj(void) {
-        if(uklj1==0 && uklj2==0)
-        kvar=0;
+        
+        if(uklj1==0 && uklj2==0) {
+        if(kvar_l==0) {
+            kvar=0;
+            }
         smetnja=0;
         wait(0.2);
         deaktiv_lcd=1;
+        //alarm=0;
+        alarm_u();
+        }
            }
  
  void postav_dolje() {
@@ -284,6 +330,8 @@
 void cs(void) {
     led1=!led1;
     led2=!led2;
+    led3=!led3;
+    led4=!led4;
     mjerenja();
        }
     
@@ -304,18 +352,21 @@
 if(led1==1) {
     struja1=strujaCS1;
     struja3=strujaCS3;
-   if(struja1<=0.2f || struja1>=0.8f || struja3<=0.2f || struja3>=0.8f) {
+   if(struja1<=0.2f || struja1>=0.55f || struja3<=0.2f || struja3>=0.55f) {
     kvar=1;
     ledk=1;
+    alarm_u();
       }
        }
        
     if(led2==1) {
     struja2=strujaCS2;
     struja4=strujaCS4;
-        if(struja2<=0.2f || struja2>=0.8f || struja4<=0.2f || struja4>=0.8f) {
+        if(struja2<=0.2f || struja2>=0.55f || struja4<=0.2f || struja4>=0.55f) {
     kvar=1;
     ledk=1;
+    alarm_i=1;
+    alarm_u();
      }
        }
        if(uklj1==0 && uklj2==0){
@@ -337,6 +388,30 @@
             osnovno.reset();
             p_gore=0;
             osovine.stop();
-                 }      
+                 }   
+                 
+void lom_m() {
+    kvar=1;
+    kvar_l=1;
+    alarm_u();
+    }   
+    
+void lom_m_k() {
+    kvar_l=0;
+    }
+    
+void alarm_u() {
         
+        if(kvar==1 && alarm_i==0) {
+            alarm.period(2); // set PWM period to 10 ms
+            alarm=0.9;
+            wait(0.1);
+             }
+                
+            else {
+                alarm=0;}
+            
+            }
+        
+
             
\ No newline at end of file