Semestrálna práca VÝTAH Roman Ciesarík

Dependencies:   MMA8451Q mbed

Committer:
Ciesarik3
Date:
Mon Jan 08 17:47:48 2018 +0000
Revision:
11:a9918a8441a9
Parent:
10:346a5a5936b9
dorobena dokumentacia;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ciesarik3 0:40602b91b27f 1 #include "mbed.h"
Ciesarik3 1:6c18e74f3ff4 2 #include "headre.h"
Ciesarik3 9:51cf1120b4f4 3 #include "FreeFall.h"
Ciesarik3 0:40602b91b27f 4
Ciesarik3 1:6c18e74f3ff4 5 Serial pc(USBTX, USBRX, 57600);
Ciesarik3 0:40602b91b27f 6
Ciesarik3 0:40602b91b27f 7 int i;
Ciesarik3 1:6c18e74f3ff4 8 unsigned int velkost;
Ciesarik3 7:8786833154ff 9 char crc=0x00;
Ciesarik3 9:51cf1120b4f4 10
Ciesarik3 9:51cf1120b4f4 11 DigitalOut myled(LED3);
Ciesarik3 8:9686195ddf1d 12 DigitalOut myled2(LED2);
Ciesarik3 0:40602b91b27f 13
Ciesarik3 4:f2b6a3558671 14 char prijemSpravy[30];
Ciesarik3 8:9686195ddf1d 15 char diode_DATA[]={0x00,0x01};
Ciesarik3 8:9686195ddf1d 16 int diode_cislo[]={0,0,0,0,0};
Ciesarik3 2:84b5e49b4549 17 int stav=5;
Ciesarik3 8:9686195ddf1d 18 int poradie[]={0,0,0,0,0};
Ciesarik3 8:9686195ddf1d 19
Ciesarik3 8:9686195ddf1d 20 char buffer_kto[100];
Ciesarik3 8:9686195ddf1d 21 char buffer_co[100];
Ciesarik3 8:9686195ddf1d 22 int buff_index=0;
Ciesarik3 8:9686195ddf1d 23 int cyklus=0;
Ciesarik3 1:6c18e74f3ff4 24
Ciesarik3 0:40602b91b27f 25 int main()
Ciesarik3 0:40602b91b27f 26 {
Ciesarik3 4:f2b6a3558671 27 pc.attach(&prijmemSpravu);
Ciesarik3 10:346a5a5936b9 28 init_freeFall();
Ciesarik3 10:346a5a5936b9 29
Ciesarik3 10:346a5a5936b9 30 while(true)
Ciesarik3 10:346a5a5936b9 31 {
Ciesarik3 10:346a5a5936b9 32 rozhodni();
Ciesarik3 10:346a5a5936b9 33 if(freeFall_status())
Ciesarik3 10:346a5a5936b9 34 {
Ciesarik3 10:346a5a5936b9 35 zamkni();
Ciesarik3 10:346a5a5936b9 36 stop();
Ciesarik3 10:346a5a5936b9 37 myled=1;
Ciesarik3 10:346a5a5936b9 38 myled2=1;
Ciesarik3 10:346a5a5936b9 39 break;
Ciesarik3 9:51cf1120b4f4 40 }
Ciesarik3 10:346a5a5936b9 41 }
Ciesarik3 1:6c18e74f3ff4 42 }
Ciesarik3 5:c1952cbf8111 43
Ciesarik3 8:9686195ddf1d 44 void pohyb(int kam)
Ciesarik3 5:c1952cbf8111 45 {
Ciesarik3 5:c1952cbf8111 46 zamkni();
Ciesarik3 10:346a5a5936b9 47 if (stav <kam) {hore();vytahDisplay(1,kam);}
Ciesarik3 10:346a5a5936b9 48 if (stav >kam) {dole();vytahDisplay(2,kam);}
Ciesarik3 4:f2b6a3558671 49
Ciesarik3 1:6c18e74f3ff4 50 }
Ciesarik3 1:6c18e74f3ff4 51
Ciesarik3 2:84b5e49b4549 52 void prijmemSpravu()
Ciesarik3 2:84b5e49b4549 53 {
Ciesarik3 8:9686195ddf1d 54 myled=0;
Ciesarik3 6:83b531eead03 55
Ciesarik3 8:9686195ddf1d 56 for (int j=0;j<4;j++)
Ciesarik3 8:9686195ddf1d 57 {
Ciesarik3 8:9686195ddf1d 58 while(true)
Ciesarik3 8:9686195ddf1d 59 {
Ciesarik3 8:9686195ddf1d 60 if(pc.readable()==1)
Ciesarik3 8:9686195ddf1d 61 {
Ciesarik3 8:9686195ddf1d 62 prijemSpravy[j]=pc.getc();
Ciesarik3 8:9686195ddf1d 63 break;
Ciesarik3 6:83b531eead03 64 }
Ciesarik3 8:9686195ddf1d 65 }
Ciesarik3 2:84b5e49b4549 66 }
Ciesarik3 8:9686195ddf1d 67
Ciesarik3 8:9686195ddf1d 68 int pom= prijemSpravy[3] + 1;
Ciesarik3 2:84b5e49b4549 69
Ciesarik3 8:9686195ddf1d 70 for (int j=0;j<pom;j++)
Ciesarik3 8:9686195ddf1d 71 {
Ciesarik3 8:9686195ddf1d 72 while(true)
Ciesarik3 8:9686195ddf1d 73 {
Ciesarik3 8:9686195ddf1d 74 if(pc.readable()==1)
Ciesarik3 8:9686195ddf1d 75 {
Ciesarik3 8:9686195ddf1d 76 prijemSpravy[j+4]=pc.getc();
Ciesarik3 8:9686195ddf1d 77 break;
Ciesarik3 8:9686195ddf1d 78 }
Ciesarik3 8:9686195ddf1d 79 }
Ciesarik3 8:9686195ddf1d 80 }
Ciesarik3 10:346a5a5936b9 81 buffer_kto[buff_index]=prijemSpravy[2];
Ciesarik3 10:346a5a5936b9 82 buffer_co[buff_index]=prijemSpravy[4];
Ciesarik3 10:346a5a5936b9 83
Ciesarik3 10:346a5a5936b9 84 myled=1;
Ciesarik3 10:346a5a5936b9 85 pc.attach(&prijmemSpravu);
Ciesarik3 2:84b5e49b4549 86 }
Ciesarik3 1:6c18e74f3ff4 87
Ciesarik3 3:ac8b2de52239 88 void rozhodni()
Ciesarik3 8:9686195ddf1d 89 {
Ciesarik3 8:9686195ddf1d 90 myled2=0;
Ciesarik3 8:9686195ddf1d 91 char bData=buffer_co[cyklus];
Ciesarik3 10:346a5a5936b9 92 switch(buffer_kto[cyklus])
Ciesarik3 8:9686195ddf1d 93 {
Ciesarik3 3:ac8b2de52239 94 case 0xb4: /* vytah tla4idlo 4 poschodie */
Ciesarik3 10:346a5a5936b9 95 poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 10:346a5a5936b9 96 diode_cislo[4]=1;
Ciesarik3 10:346a5a5936b9 97 pohyb(4);
Ciesarik3 8:9686195ddf1d 98 break;
Ciesarik3 8:9686195ddf1d 99
Ciesarik3 6:83b531eead03 100 case 0xb3: /* vytah tla4idlo 3 poschodie */
Ciesarik3 10:346a5a5936b9 101 poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 6:83b531eead03 102 diode_cislo[3]=1;
Ciesarik3 10:346a5a5936b9 103 pohyb(3);
Ciesarik3 8:9686195ddf1d 104 break;
Ciesarik3 8:9686195ddf1d 105
Ciesarik3 8:9686195ddf1d 106 case 0xb2: /* vytah tla4idlo 2 poschodie */
Ciesarik3 10:346a5a5936b9 107 poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 10:346a5a5936b9 108 diode_cislo[2]=1;
Ciesarik3 10:346a5a5936b9 109 pohyb(2);
Ciesarik3 8:9686195ddf1d 110 break;
Ciesarik3 8:9686195ddf1d 111
Ciesarik3 8:9686195ddf1d 112 case 0xb1: /* vytah tla4idlo 1 poschodie */
Ciesarik3 10:346a5a5936b9 113 poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 8:9686195ddf1d 114 diode_cislo[1]=1;
Ciesarik3 8:9686195ddf1d 115 pohyb(1);
Ciesarik3 8:9686195ddf1d 116 break;
Ciesarik3 8:9686195ddf1d 117
Ciesarik3 8:9686195ddf1d 118 case 0xb0: /* vytah tla4idlo pr9zemie */
Ciesarik3 10:346a5a5936b9 119 poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 8:9686195ddf1d 120 diode_cislo[0]=1;
Ciesarik3 10:346a5a5936b9 121 pohyb(0);
Ciesarik3 8:9686195ddf1d 122 break;
Ciesarik3 8:9686195ddf1d 123
Ciesarik3 6:83b531eead03 124 case 0xc4: /* chodba tla4idlo 4 poschodie */
Ciesarik3 10:346a5a5936b9 125 poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 6:83b531eead03 126 diode_cislo[4]=1;
Ciesarik3 8:9686195ddf1d 127 pohyb(4);
Ciesarik3 8:9686195ddf1d 128 break;
Ciesarik3 8:9686195ddf1d 129
Ciesarik3 6:83b531eead03 130 case 0xc3: /* chodba tla4idlo 3 poschodie */
Ciesarik3 10:346a5a5936b9 131 poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 6:83b531eead03 132 diode_cislo[3]=1;
Ciesarik3 10:346a5a5936b9 133 pohyb(3);
Ciesarik3 8:9686195ddf1d 134 break;
Ciesarik3 8:9686195ddf1d 135
Ciesarik3 6:83b531eead03 136 case 0xc2: /* chodba tla4idlo 2 poschodie */
Ciesarik3 10:346a5a5936b9 137 poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 6:83b531eead03 138 diode_cislo[2]=1;
Ciesarik3 10:346a5a5936b9 139 pohyb(2);
Ciesarik3 8:9686195ddf1d 140 break;
Ciesarik3 8:9686195ddf1d 141
Ciesarik3 6:83b531eead03 142 case 0xc1: /* chodba tla4idlo 1 poschodie */
Ciesarik3 10:346a5a5936b9 143 poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 6:83b531eead03 144 diode_cislo[1]=1;
Ciesarik3 8:9686195ddf1d 145 pohyb(1);
Ciesarik3 8:9686195ddf1d 146 break;
Ciesarik3 8:9686195ddf1d 147
Ciesarik3 6:83b531eead03 148 case 0xc0: /* chodba tla4idlo pr9zemie */
Ciesarik3 10:346a5a5936b9 149 poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]);
Ciesarik3 6:83b531eead03 150 diode_cislo[0]=1;
Ciesarik3 10:346a5a5936b9 151 pohyb(0);
Ciesarik3 8:9686195ddf1d 152 break;
Ciesarik3 8:9686195ddf1d 153
Ciesarik3 8:9686195ddf1d 154
Ciesarik3 8:9686195ddf1d 155
Ciesarik3 8:9686195ddf1d 156
Ciesarik3 8:9686195ddf1d 157 case 0xe4: /* info pre odomknutie 4 poschodie */
Ciesarik3 10:346a5a5936b9 158 if(bData==0x01&&diode_cislo[4]==1)
Ciesarik3 10:346a5a5936b9 159 {
Ciesarik3 10:346a5a5936b9 160 stop();
Ciesarik3 10:346a5a5936b9 161 poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 162 poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 163 diode_cislo[4]=0;
Ciesarik3 10:346a5a5936b9 164 stav=4;
Ciesarik3 10:346a5a5936b9 165 }
Ciesarik3 10:346a5a5936b9 166
Ciesarik3 10:346a5a5936b9 167 if(bData==0x02&&stav==4)
Ciesarik3 10:346a5a5936b9 168 {
Ciesarik3 10:346a5a5936b9 169 wait(1);
Ciesarik3 10:346a5a5936b9 170 odomkni();
Ciesarik3 10:346a5a5936b9 171
Ciesarik3 11:a9918a8441a9 172 if (diode_cislo[3]==1) pohyb(0);
Ciesarik3 11:a9918a8441a9 173 else if (diode_cislo[2]==1) pohyb(1);
Ciesarik3 11:a9918a8441a9 174 else if (diode_cislo[1]==1) pohyb(2);
Ciesarik3 11:a9918a8441a9 175 else if (diode_cislo[0]==1) pohyb(3);
Ciesarik3 10:346a5a5936b9 176 }
Ciesarik3 8:9686195ddf1d 177 break;
Ciesarik3 8:9686195ddf1d 178
Ciesarik3 8:9686195ddf1d 179 case 0xe3: /* info pre odomknutie 3 poschodie */
Ciesarik3 10:346a5a5936b9 180 if(bData==0x01&&diode_cislo[3]==1)
Ciesarik3 10:346a5a5936b9 181 {
Ciesarik3 10:346a5a5936b9 182 stop();
Ciesarik3 10:346a5a5936b9 183 poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 184 poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 185 diode_cislo[3]=0;
Ciesarik3 10:346a5a5936b9 186 stav=3;
Ciesarik3 10:346a5a5936b9 187 }
Ciesarik3 10:346a5a5936b9 188
Ciesarik3 10:346a5a5936b9 189 if(bData==0x02&&stav==3)
Ciesarik3 10:346a5a5936b9 190 {
Ciesarik3 10:346a5a5936b9 191 wait(1);
Ciesarik3 10:346a5a5936b9 192 odomkni();
Ciesarik3 6:83b531eead03 193
Ciesarik3 11:a9918a8441a9 194 if (diode_cislo[4]==1) pohyb(0);
Ciesarik3 11:a9918a8441a9 195 else if (diode_cislo[2]==1) pohyb(1);
Ciesarik3 11:a9918a8441a9 196 else if (diode_cislo[1]==1) pohyb(2);
Ciesarik3 11:a9918a8441a9 197 else if (diode_cislo[0]==1) pohyb(4);
Ciesarik3 10:346a5a5936b9 198 }
Ciesarik3 8:9686195ddf1d 199 break;
Ciesarik3 8:9686195ddf1d 200
Ciesarik3 8:9686195ddf1d 201 case 0xe2: /* info pre odomknutie 2 poschodie */
Ciesarik3 10:346a5a5936b9 202 if(bData==0x01&&diode_cislo[2]==1)
Ciesarik3 10:346a5a5936b9 203 {
Ciesarik3 10:346a5a5936b9 204 stop();
Ciesarik3 10:346a5a5936b9 205 poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 206 poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 207 diode_cislo[2]=0;
Ciesarik3 10:346a5a5936b9 208 stav=2;
Ciesarik3 10:346a5a5936b9 209 }
Ciesarik3 10:346a5a5936b9 210
Ciesarik3 10:346a5a5936b9 211 if(bData==0x02&&stav==2)
Ciesarik3 10:346a5a5936b9 212 {
Ciesarik3 10:346a5a5936b9 213 wait(1);
Ciesarik3 10:346a5a5936b9 214 odomkni();
Ciesarik3 10:346a5a5936b9 215
Ciesarik3 10:346a5a5936b9 216 if (diode_cislo[0]==1) pohyb(0);
Ciesarik3 10:346a5a5936b9 217 else if (diode_cislo[1]==1) pohyb(1);
Ciesarik3 10:346a5a5936b9 218 else if (diode_cislo[3]==1) pohyb(3);
Ciesarik3 10:346a5a5936b9 219 else if (diode_cislo[4]==1) pohyb(4);
Ciesarik3 10:346a5a5936b9 220 }
Ciesarik3 8:9686195ddf1d 221 break;
Ciesarik3 8:9686195ddf1d 222
Ciesarik3 8:9686195ddf1d 223 case 0xe1: /* info pre odomknutie 1 poschodie */
Ciesarik3 10:346a5a5936b9 224 if(bData==0x01&&diode_cislo[1]==1)
Ciesarik3 10:346a5a5936b9 225 {
Ciesarik3 10:346a5a5936b9 226 stop();
Ciesarik3 10:346a5a5936b9 227 poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 228 poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 229 diode_cislo[1]=0;
Ciesarik3 10:346a5a5936b9 230 stav=1;
Ciesarik3 10:346a5a5936b9 231 }
Ciesarik3 10:346a5a5936b9 232
Ciesarik3 10:346a5a5936b9 233 if(bData==0x02&&stav==1)
Ciesarik3 10:346a5a5936b9 234 {
Ciesarik3 10:346a5a5936b9 235 wait(1);
Ciesarik3 10:346a5a5936b9 236 odomkni();
Ciesarik3 8:9686195ddf1d 237
Ciesarik3 10:346a5a5936b9 238 if (diode_cislo[0]==1) pohyb(0);
Ciesarik3 10:346a5a5936b9 239 else if (diode_cislo[2]==1) pohyb(2);
Ciesarik3 10:346a5a5936b9 240 else if (diode_cislo[3]==1) pohyb(3);
Ciesarik3 10:346a5a5936b9 241 else if (diode_cislo[4]==1) pohyb(4);
Ciesarik3 10:346a5a5936b9 242 }
Ciesarik3 6:83b531eead03 243
Ciesarik3 8:9686195ddf1d 244 break;
Ciesarik3 8:9686195ddf1d 245
Ciesarik3 8:9686195ddf1d 246 case 0xe0: /* info pre odomknutie prízemie */
Ciesarik3 10:346a5a5936b9 247 if(bData==0x01&&diode_cislo[0]==1)
Ciesarik3 10:346a5a5936b9 248 {
Ciesarik3 10:346a5a5936b9 249 stop();
Ciesarik3 10:346a5a5936b9 250 poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 251 poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[0]);
Ciesarik3 10:346a5a5936b9 252 diode_cislo[0]=0;
Ciesarik3 10:346a5a5936b9 253 stav=0;
Ciesarik3 10:346a5a5936b9 254 }
Ciesarik3 10:346a5a5936b9 255
Ciesarik3 10:346a5a5936b9 256 if(bData==0x02&&stav==0)
Ciesarik3 10:346a5a5936b9 257 {
Ciesarik3 10:346a5a5936b9 258 wait(1);
Ciesarik3 10:346a5a5936b9 259 odomkni();
Ciesarik3 10:346a5a5936b9 260
Ciesarik3 10:346a5a5936b9 261 if (diode_cislo[1]==1) pohyb(1);
Ciesarik3 10:346a5a5936b9 262 else if (diode_cislo[2]==1) pohyb(2);
Ciesarik3 10:346a5a5936b9 263 else if (diode_cislo[3]==1) pohyb(3);
Ciesarik3 10:346a5a5936b9 264 else if (diode_cislo[4]==1) pohyb(4);}
Ciesarik3 10:346a5a5936b9 265 break;
Ciesarik3 8:9686195ddf1d 266
Ciesarik3 8:9686195ddf1d 267 default: break;
Ciesarik3 8:9686195ddf1d 268 }
Ciesarik3 10:346a5a5936b9 269
Ciesarik3 8:9686195ddf1d 270 myled=1;
Ciesarik3 3:ac8b2de52239 271 }
Ciesarik3 3:ac8b2de52239 272
Ciesarik3 1:6c18e74f3ff4 273 void poslemSpravu(char adrRX, char adrTX, int velkost, char DATA[] )
Ciesarik3 1:6c18e74f3ff4 274 {
Ciesarik3 1:6c18e74f3ff4 275 crc=0x00;
Ciesarik3 1:6c18e74f3ff4 276 char odosli[5+velkost];
Ciesarik3 1:6c18e74f3ff4 277 odosli[0]=0xA0;
Ciesarik3 1:6c18e74f3ff4 278 odosli[1]=adrRX;
Ciesarik3 1:6c18e74f3ff4 279 odosli[2]=adrTX;
Ciesarik3 1:6c18e74f3ff4 280 odosli[3]=velkost;
Ciesarik3 1:6c18e74f3ff4 281
Ciesarik3 1:6c18e74f3ff4 282 crc=crc8table[crc^adrRX];
Ciesarik3 1:6c18e74f3ff4 283 crc=crc8table[crc^adrTX];
Ciesarik3 1:6c18e74f3ff4 284
Ciesarik3 10:346a5a5936b9 285 for (i=0; i<velkost; i++)
Ciesarik3 10:346a5a5936b9 286 {
Ciesarik3 1:6c18e74f3ff4 287 odosli[4+i]=DATA[i];
Ciesarik3 1:6c18e74f3ff4 288 }
Ciesarik3 1:6c18e74f3ff4 289
Ciesarik3 10:346a5a5936b9 290 for (i=0; i<velkost; i++)
Ciesarik3 10:346a5a5936b9 291 {
Ciesarik3 1:6c18e74f3ff4 292 crc=crc8table[crc^DATA[i]];
Ciesarik3 1:6c18e74f3ff4 293 }
Ciesarik3 1:6c18e74f3ff4 294
Ciesarik3 1:6c18e74f3ff4 295 odosli[velkost+4]=crc;
Ciesarik3 1:6c18e74f3ff4 296
Ciesarik3 10:346a5a5936b9 297 for (i=0; i<velkost+5; i++)
Ciesarik3 10:346a5a5936b9 298 {
Ciesarik3 1:6c18e74f3ff4 299 pc.putc(odosli[i]);
Ciesarik3 1:6c18e74f3ff4 300 }
Ciesarik3 1:6c18e74f3ff4 301
Ciesarik3 1:6c18e74f3ff4 302 }
Ciesarik3 1:6c18e74f3ff4 303