
Semestrálna práca VÝTAH Roman Ciesarík
Diff: main.cpp
- Revision:
- 10:346a5a5936b9
- Parent:
- 9:51cf1120b4f4
- Child:
- 11:a9918a8441a9
--- a/main.cpp Sun Jan 07 21:09:44 2018 +0000 +++ b/main.cpp Mon Jan 08 15:00:34 2018 +0000 @@ -8,40 +8,15 @@ unsigned int velkost; char crc=0x00; -char crc8table[256] = { - 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, - 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, - 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, - 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, - 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, - 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, - 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, - 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, - 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, - 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, - 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, - 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, - 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, - 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, - 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, - 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53 -}; - -// crc [0xA0, prijem, odosielatel, vrlkost dat , data (256),crc] -//char odosli[5+sizeof(DATA)]; DigitalOut myled(LED3); DigitalOut myled2(LED2); - - char prijemSpravy[30]; char diode_DATA[]={0x00,0x01}; int diode_cislo[]={0,0,0,0,0}; int stav=5; int poradie[]={0,0,0,0,0}; - - char buffer_kto[100]; char buffer_co[100]; int buff_index=0; @@ -50,127 +25,32 @@ int main() { pc.attach(&prijmemSpravu); - init_freeFall(); - //dole(); -while(true) -{ - //init_freeFall(); - rozhodni(); - if(freeFall_status()){ - zamkni(); - stop(); - myled=1; - myled2=1; - break; + init_freeFall(); + + while(true) + { + rozhodni(); + if(freeFall_status()) + { + zamkni(); + stop(); + myled=1; + myled2=1; + break; } - /* for(int i=0;i<5;i++) - if(diode_cislo[i]!=0) - { - if(i<stav){dole();break;} - else {hore();break;} - } - */ -/* - 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 pohyb(int kam) { zamkni(); - if (stav <kam) {hore();vytahDisplay(1,kam);} - if (stav >kam) {dole();vytahDisplay(2,kam);} + if (stav <kam) {hore();vytahDisplay(1,kam);} + if (stav >kam) {dole();vytahDisplay(2,kam);} -/* - switch(stav) - { - case 5: dole(); break; - case 4: - if(diode_cislo[4]==1) - break; - case 3: break; - case 2: break; - case 1: break; - case 0: break; - default: break; - }*/ -} -void vytahDisplay(int smer, int poschodie) -{ - char dPole [2]; - switch(smer) - { - - case 0: dPole[0]=0xFF; break; - case 1: dPole[0]=0x01; break;//hore - case 2: dPole[0]=0x02; break;//dole - } - switch(poschodie) - { - case 0: dPole[1]=0x50; break; - case 1: dPole[1]=0x31; break; - case 2: dPole[1]=0x32; break; - case 3: dPole[1]=0x33; break; - case 4: dPole[1]=0x34; break; - default: - dPole[1]=0x2D; - } - - poslemSpravu(DISPLAY, 0xcc, 0x02, dPole); -} - - -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() -{ - char DATA[]= {0x01}; - poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA); -} - -void hore() -{ - char DATA[]= {0x02,0x64,0x00,0x00,0x00}; - poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA); -} - -void dole() -{ - char DATA[]= {0x02,0x9c,0xff,0xff,0xff}; - poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA); } void prijmemSpravu() { - //pc.attach(&prijmemSpravu);§ myled=0; for (int j=0;j<4;j++) @@ -198,203 +78,196 @@ } } } - // 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); + buffer_kto[buff_index]=prijemSpravy[2]; + buffer_co[buff_index]=prijemSpravy[4]; + + myled=1; + pc.attach(&prijmemSpravu); } void rozhodni() { myled2=0; char bData=buffer_co[cyklus]; - switch(buffer_kto[cyklus]) + switch(buffer_kto[cyklus]) { case 0xb4: /* vytah tla4idlo 4 poschodie */ - poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]); - diode_cislo[4]=1; - - pohyb(4); - + poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]); + diode_cislo[4]=1; + pohyb(4); break; case 0xb3: /* vytah tla4idlo 3 poschodie */ - poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]); diode_cislo[3]=1; - pohyb(3); - + pohyb(3); break; case 0xb2: /* vytah tla4idlo 2 poschodie */ - poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[1]); - diode_cislo[2]=1; - pohyb(2); + 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]); + 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]); + poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[1]); diode_cislo[0]=1; - pohyb(0); + pohyb(0); break; case 0xc4: /* chodba tla4idlo 4 poschodie */ - poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]); diode_cislo[4]=1; pohyb(4); break; case 0xc3: /* chodba tla4idlo 3 poschodie */ - poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]); diode_cislo[3]=1; - pohyb(3); + pohyb(3); break; case 0xc2: /* chodba tla4idlo 2 poschodie */ - poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]); diode_cislo[2]=1; - pohyb(2); + pohyb(2); break; case 0xc1: /* chodba tla4idlo 1 poschodie */ - poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]); diode_cislo[1]=1; pohyb(1); break; case 0xc0: /* chodba tla4idlo pr9zemie */ - poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]); + poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]); diode_cislo[0]=1; - pohyb(0); + 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); - - + 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(); + + 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); + } 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(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 (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 (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[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();//} - - //vytahDisplay(2,2); - - 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(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[3]==1) pohyb(3); + else if (diode_cislo[4]==1) pohyb(4); + } 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(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);} + if (diode_cislo[0]==1) pohyb(0); + + 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 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();//} - - //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);} + 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(); + + 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 0xf: /* zachranna brzda */ - - break; - - case 0xfe: /* watchdog */ - - 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; } @@ -410,17 +283,20 @@ crc=crc8table[crc^adrRX]; crc=crc8table[crc^adrTX]; - for (i=0; i<velkost; i++) { + for (i=0; i<velkost; i++) + { odosli[4+i]=DATA[i]; } - for (i=0; i<velkost; i++) { + for (i=0; i<velkost; i++) + { crc=crc8table[crc^DATA[i]]; } odosli[velkost+4]=crc; - for (i=0; i<velkost+5; i++) { + for (i=0; i<velkost+5; i++) + { pc.putc(odosli[i]); }