Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed TextLCD ULN2003_StepperDriver
Revision 1:a49b3c29aeb2, committed 2019-11-16
- Comitter:
- dkrajacic
- Date:
- Sat Nov 16 11:03:27 2019 +0000
- Parent:
- 0:e1ee9ea8436b
- Commit message:
- Konstrukcijski rad - zadnja verzija
Changed in this revision
| ULN2003_StepperDriver.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/ULN2003_StepperDriver.lib Thu Nov 14 16:39:38 2019 +0000 +++ b/ULN2003_StepperDriver.lib Sat Nov 16 11:03:27 2019 +0000 @@ -1,1 +1,1 @@ -https://os.mbed.com/users/dkrajacic/code/ULN2003_StepperDriver/#ab23c6e49545 +https://os.mbed.com/teams/TVZ2019/code/ULN2003_StepperDriver/#e1500f54f6a4
--- 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