
Semestrálna práca VÝTAH Roman Ciesarík
Diff: main.cpp
- Revision:
- 8:9686195ddf1d
- Parent:
- 7:8786833154ff
- Child:
- 9:51cf1120b4f4
--- a/main.cpp Fri Jan 05 22:00:44 2018 +0000 +++ b/main.cpp Sat Jan 06 19:06:35 2018 +0000 @@ -1,9 +1,5 @@ #include "mbed.h" #include "headre.h" -//#include "definicie.h" - - - #define DISPLAY 0x30 // DATA smer 0x01-> UP 0x02-> DOWN , text (string) #define TERMINAL 0xD0 // Vypise vsetko @@ -20,7 +16,7 @@ #define POSCHODIE_BUTTON_3 0xc3 // |-----------| #define POSCHODIE_BUTTON_4 0xc4 // └-----------┘ -#define VYTAH_DIODA_P 0x20 // ┌--------------------------┐ +#define VYTAH_DIODA_P 0x20 // ┌--------------------------┐ #define VYTAH_DIODA_1 0x21 // | DATA 0x00-> OFF 0x01->ON | #define VYTAH_DIODA_2 0x22 // |--------------------------| #define VYTAH_DIODA_3 0x23 // |--------------------------| @@ -35,7 +31,7 @@ #define VYTAH 0xf0 // DATA 0x00-> UNLOCK 0x01-> LOCK #define BRZDA 0xf // DATA 0x00-> DEACTIVATE 0x01-> ACTIVATE -#define FLOOR_LIMIT_SWITCH_P 0xe0 // ┌------------------------------------------┐ +#define FLOOR_LIMIT_SWITCH_P 0xe0 // ┌------------------------------------------┐ #define FLOOR_LIMIT_SWITCH_1 0xe1 // | DATA 0x00-> LOW 0x01->WIDE 0x02-> NARROW | #define FLOOR_LIMIT_SWITCH_2 0xe2 // |------------------------------------------| #define FLOOR_LIMIT_SWITCH_3 0xe3 // |------------------------------------------| @@ -44,7 +40,6 @@ #define MOTOR 0xf1 // DATA 0x1-> STOP 0x02-> UP/DOWN 32bit <-100,100> 0x3-> MOTOR ENCODER COUNT (double) #define WATCHDOG 0xfe // DATA 0x01-> time out ELSE regular reset ( 1500ms ) - Serial pc(USBTX, USBRX, 57600); int i; @@ -71,76 +66,70 @@ // crc [0xA0, prijem, odosielatel, vrlkost dat , data (256),crc] //char odosli[5+sizeof(DATA)]; - +DigitalOut myled(LED1); +DigitalOut myled2(LED2); char demo[]= {1,2,3,4,5,6}; char prijemSpravy[30]; -char diode_DATA[]= {0x00,0x01}; -int diode_cislo[]= {0,0,0,0,0}; +char diode_DATA[]={0x00,0x01}; +int diode_cislo[]={0,0,0,0,0}; int stav=5; +int poradie[]={0,0,0,0,0}; + -int poradie[]= {0,0,0,0,0}; -int zar=0; -int por=0; -//int kk=0; +char buffer_kto[100]; +char buffer_co[100]; +int buff_index=0; +int cyklus=0; int main() { pc.attach(&prijmemSpravu); //dole(); - while(true) { - - //rozhodni(); - /* for(int i=0;i<5;i++) - if(diode_cislo[i]!=0) - { - if(i<stav){dole();break;} - else {hore();break;} - } - */ +while(true) +{ + + rozhodni(); + /* for(int i=0;i<5;i++) + if(diode_cislo[i]!=0) + { + if(i<stav){dole();break;} + else {hore();break;} + } + */ /* - while(true) { - - if (por<5) { - // pc.attach(&prijmemSpravu); - pohyb(poradie[por]); - - por++; - } else { - por=0; - pohyb(poradie[por]); - } - }*/ - - - + if(cyklus<100) + { + rozhodni(buffer_kto[cyklus], buffer_co[cyklus]); + cyklus++; + } + else + { + cyklus=0; + rozhodni(buffer_kto[cyklus], buffer_co[cyklus]); + cyklus++; } +*/ + + /*stop(); + wait(1); + hore();*/ +} } -void zarad(int co) -{ - if (zar<5) { - poradie[zar]=co; - zar++; - } else { - poradie[0]=co; - zar=1; - } -} - -void pohyb(int kam ) +void pohyb(int kam) { zamkni(); - if (stav < kam) { pc.attach(&prijmemSpravu);hore();} - if (stav > kam) { pc.attach(&prijmemSpravu);dole();} + if (stav <kam) hore(); + if (stav >kam) dole(); - /* +/* switch(stav) { case 5: dole(); break; - case 4: + case 4: if(diode_cislo[4]==1) break; case 3: break; @@ -148,21 +137,23 @@ case 1: break; case 0: break; default: break; - } - */ + }*/ } void zamkni() -{ +{ + char DATA[]= {0x01}; poslemSpravu(VYTAH,0xcc,sizeof(DATA),DATA); } void odomkni() { + wait(1); char DATA[]= {0x00}; poslemSpravu(VYTAH,0xcc,sizeof(DATA),DATA); + wait(1); } void stop() @@ -174,283 +165,241 @@ void hore() { char DATA[]= {0x02,0x64,0x00,0x00,0x00}; - poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA); + poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA); } void dole() { char DATA[]= {0x02,0x9c,0xff,0xff,0xff}; poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA); - pc.attach(&prijmemSpravu); } void prijmemSpravu() { - for (int j=0; j<4; j++) { - while(true) { - if(pc.readable()==1) { - prijemSpravy[j]=pc.getc(); - break; - } - } - } + //pc.attach(&prijmemSpravu);§ + myled=0; - int pom= prijemSpravy[3] + 1; - - for (int j=0; j<pom; j++) { - while(true) { - if(pc.readable()==1) { - prijemSpravy[j+4]=pc.getc(); - break; + for (int j=0;j<4;j++) + { + while(true) + { + if(pc.readable()==1) + { + prijemSpravy[j]=pc.getc(); + break; } - } + } } - pc.attach(&prijmemSpravu); - rozhodni(); - if (por<5) { - // pc.attach(&prijmemSpravu); - pohyb(poradie[por]); - - por++; - } else { - por=0; - pohyb(poradie[por]); - } + + int pom= prijemSpravy[3] + 1; - pc.attach(&prijmemSpravu); + for (int j=0;j<pom;j++) + { + while(true) + { + if(pc.readable()==1) + { + prijemSpravy[j+4]=pc.getc(); + break; + } + } + } + // if(buff_index<100) + // { + buffer_kto[buff_index]=prijemSpravy[2]; + buffer_co[buff_index]=prijemSpravy[4]; + // buff_index++; + /*} + else + { + buff_index=0; + buffer_kto[buff_index]=prijemSpravy[2]; + buffer_co[buff_index]=prijemSpravy[4]; + buff_index++; + }*/ +myled=1; + pc.attach(&prijmemSpravu); } -/* -void obsluz(int cislo) -{ - poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]); - diode_cislo[4]=1; - zamkni(); - -} -*/ void rozhodni() -{ - switch(prijemSpravy[2]) { - +{ + myled2=0; + char bData=buffer_co[cyklus]; + switch(buffer_kto[cyklus]) + { case 0xb4: /* vytah tla4idlo 4 poschodie */ - if (diode_cislo[4]==0) { - zarad(4); - } - poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]); - diode_cislo[4]=1; - - break; - + poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]); + diode_cislo[4]=1; + + pohyb(4); + + break; + case 0xb3: /* vytah tla4idlo 3 poschodie */ - - if (diode_cislo[3]==0) { - zarad(3); - } - poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]); diode_cislo[3]=1; - - break; - - case 0xb2: /* vytah tla4idlo 2 poschodie */ - - if (diode_cislo[2]==0) { - zarad(2); - } - poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[1]); - diode_cislo[2]=1; - - break; - - case 0xb1: /* vytah tla4idlo 1 poschodie */ - - if (diode_cislo[1]==0) { - zarad(1); - } - poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[1]); - diode_cislo[1]=1; - - break; - - case 0xb0: /* vytah tla4idlo pr9zemie */ - - if (diode_cislo[0]==0) { - zarad(0); - } - poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[1]); - diode_cislo[0]=1; - - break; + pohyb(3); + break; + + case 0xb2: /* vytah tla4idlo 2 poschodie */ + poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[1]); + diode_cislo[2]=1; + pohyb(2); + break; + + case 0xb1: /* vytah tla4idlo 1 poschodie */ + poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[1]); + diode_cislo[1]=1; + pohyb(1); + break; + + case 0xb0: /* vytah tla4idlo pr9zemie */ + poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[1]); + diode_cislo[0]=1; + pohyb(0); + break; + case 0xc4: /* chodba tla4idlo 4 poschodie */ - - if (diode_cislo[4]==0) { - zarad(4); - } - poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]); diode_cislo[4]=1; - - break; - + pohyb(4); + break; + case 0xc3: /* chodba tla4idlo 3 poschodie */ - - if (diode_cislo[3]==0) { - zarad(3); - } - poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]); diode_cislo[3]=1; - - break; - + pohyb(3); + break; + case 0xc2: /* chodba tla4idlo 2 poschodie */ - - if (diode_cislo[2]==0) { - zarad(2); - } - poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]); diode_cislo[2]=1; - - break; - + pohyb(2); + break; + case 0xc1: /* chodba tla4idlo 1 poschodie */ - - if (diode_cislo[1]==0) { - zarad(1); - } - poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]); diode_cislo[1]=1; - - break; - + pohyb(1); + break; + case 0xc0: /* chodba tla4idlo pr9zemie */ - - if (diode_cislo[0]==0) { - zarad(0); - } - poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]); diode_cislo[0]=1; - - break; - - + pohyb(0); + break; + + + + + case 0xe4: /* info pre odomknutie 4 poschodie */ + if(bData==0x01&&diode_cislo[4]==1){stop(); + poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[0]); + poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[0]); + diode_cislo[4]=0; + stav=4;} + if(bData==0x02&&stav==4){wait(1);odomkni();//} + /*for (int kk=0;kk<5;kk++) + {}*/ + if (diode_cislo[0]==1) pohyb(0); + else if (diode_cislo[1]==1) pohyb(1); + else if (diode_cislo[2]==1) pohyb(2); + else if (diode_cislo[3]==1) pohyb(3);} + //else if (diode_cislo[4]==1) pohyb(4); - case 0xe4: /* info pre odomknutie 4 poschodie */ + break; + + case 0xe3: /* info pre odomknutie 3 poschodie */ + if(bData==0x01&&diode_cislo[3]==1){stop(); + poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[0]); + poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[0]); + diode_cislo[3]=0; + stav=3;} + if(bData==0x02&&stav==3){wait(1);odomkni(); - if(poradie[por]==4) { + if (diode_cislo[0]==1) pohyb(0); + else if (diode_cislo[1]==1) pohyb(1); + else if (diode_cislo[2]==1) pohyb(2); + //else if (diode_cislo[3]==1) pohyb(3); + else if (diode_cislo[4]==1) pohyb(4);} + break; + + case 0xe2: /* info pre odomknutie 2 poschodie */ + if(bData==0x01&&diode_cislo[2]==1){stop(); + poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[0]); + poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[0]); + diode_cislo[2]=0; + stav=2;} + if(bData==0x02&&stav==2){wait(1);odomkni();//} + + if (diode_cislo[0]==1) pohyb(0); + else if (diode_cislo[1]==1) pohyb(1); + // else if (diode_cislo[2]==1) pohyb(2); + else if (diode_cislo[3]==1) pohyb(3); + else if (diode_cislo[4]==1) pohyb(4);} - if(prijemSpravy[4]==0x01&&diode_cislo[4]==1) { - stop(); - poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[0]); - poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[0]); - diode_cislo[4]=0; - stav=4; - } - if(prijemSpravy[4]==0x02&&stav==4) { - wait(1); - odomkni(); - //por++; - } - } + break; + + case 0xe1: /* info pre odomknutie 1 poschodie */ + if(bData==0x01&&diode_cislo[1]==1){stop(); + poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[0]); + poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[0]); + diode_cislo[1]=0; + stav=1;} + if(bData==0x02&&stav==1){wait(1);odomkni();//} + + if (diode_cislo[0]==1) pohyb(0); + // else if (diode_cislo[1]==1) pohyb(1); + else if (diode_cislo[2]==1) pohyb(2); + else if (diode_cislo[3]==1) pohyb(3); + else if (diode_cislo[4]==1) pohyb(4);} - break; + break; + + case 0xe0: /* info pre odomknutie prízemie */ + if(bData==0x01&&diode_cislo[0]==1){stop(); + poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[0]); + poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[0]); + diode_cislo[0]=0; + stav=0;} + if(bData==0x02&&stav==0){wait(1);odomkni();//} - case 0xe3: /* info pre odomknutie 3 poschodie */ + //if (diode_cislo[0]==1) pohyb(0); + if (diode_cislo[1]==1) pohyb(1); + else if (diode_cislo[2]==1) pohyb(2); + else if (diode_cislo[3]==1) pohyb(3); + else if (diode_cislo[4]==1) pohyb(4);} + + break; - if(poradie[por]==3) { - // por++; + - if(prijemSpravy[4]==0x01&&diode_cislo[3]==1) { - stop(); - poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[0]); - poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[0]); - diode_cislo[3]=0; - stav=3; - } - if(prijemSpravy[4]==0x02&&stav==3) { - wait(1); - odomkni(); - - } - + + case 0xf: /* zachranna brzda */ - } - break; - - case 0xe2: /* info pre odomknutie 2 poschodie */ + break; - if(poradie[por]==2) { - - if(prijemSpravy[4]==0x01&&diode_cislo[2]==1) { - stop(); - poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[0]); - poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[0]); - diode_cislo[2]=0; - stav=2; - } - if(prijemSpravy[4]==0x02&&stav==2) { - wait(1); - odomkni(); - } - - } - - break; - - case 0xe1: /* info pre odomknutie 1 poschodie */ - if(poradie[por]==1) { + case 0xfe: /* watchdog */ - if(prijemSpravy[4]==0x01&&diode_cislo[1]==1) { - stop(); - poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[0]); - poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[0]); - diode_cislo[1]=0; - stav=1; - } - if(prijemSpravy[4]==0x02&&stav==1) { - wait(1); - odomkni(); - } - - } - - break; - - case 0xe0: /* info pre odomknutie prízemie */ - - if(poradie[por]==0) { - - if(prijemSpravy[4]==0x01&&diode_cislo[0]==1) { - stop(); - poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[0]); - poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[0]); - diode_cislo[0]=0; - stav=0; - } - if(prijemSpravy[4]==0x02&&stav==0) { - wait(1); - odomkni(); - } - - } - - break; - - - - - - case 0xf: /* zachranna brzda */ - - break; - - case 0xfe: /* watchdog */ - - break; - default: - break; + break; + default: break; + } + /*if(cyklus<100) + { + //rozhodni(buffer_kto[cyklus], buffer_co[cyklus]); + cyklus++; + } + else + { + cyklus=0; + //rozhodni(buffer_kto[cyklus], buffer_co[cyklus]); + //cyklus++; } +*/ //pc.attach(&prijmemSpravu); + myled=1; } void poslemSpravu(char adrRX, char adrTX, int velkost, char DATA[] )