Radovan Zubaľ
/
RadovanZubalsemestralnapraca
funkcny vytah
main.cpp@1:e01c270c9add, 2017-12-21 (annotated)
- Committer:
- radovan
- Date:
- Thu Dec 21 10:22:07 2017 +0000
- Revision:
- 1:e01c270c9add
- Parent:
- 0:5c88ad74f3fe
vytah funkcny
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
radovan | 0:5c88ad74f3fe | 1 | #include "mbed.h" |
radovan | 0:5c88ad74f3fe | 2 | #include "MMA8451Q.h" |
radovan | 0:5c88ad74f3fe | 3 | |
radovan | 0:5c88ad74f3fe | 4 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
radovan | 0:5c88ad74f3fe | 5 | PinName const SDA = PTE25; |
radovan | 0:5c88ad74f3fe | 6 | PinName const SCL = PTE24; |
radovan | 0:5c88ad74f3fe | 7 | #elif defined (TARGET_KL05Z) |
radovan | 0:5c88ad74f3fe | 8 | PinName const SDA = PTB4; |
radovan | 0:5c88ad74f3fe | 9 | PinName const SCL = PTB3; |
radovan | 0:5c88ad74f3fe | 10 | #elif defined (TARGET_K20D50M) |
radovan | 0:5c88ad74f3fe | 11 | PinName const SDA = PTB1; |
radovan | 0:5c88ad74f3fe | 12 | PinName const SCL = PTB0; |
radovan | 0:5c88ad74f3fe | 13 | #else |
radovan | 0:5c88ad74f3fe | 14 | #error TARGET NOT DEFINED |
radovan | 0:5c88ad74f3fe | 15 | #endif |
radovan | 0:5c88ad74f3fe | 16 | |
radovan | 0:5c88ad74f3fe | 17 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
radovan | 0:5c88ad74f3fe | 18 | /////////////////////////////////////// |
radovan | 0:5c88ad74f3fe | 19 | #define ELEVATOR_BUTTONf_FAMILY 0xc0 |
radovan | 0:5c88ad74f3fe | 20 | #define DIODEf_FAMILY 0x10 |
radovan | 0:5c88ad74f3fe | 21 | #define LIMIT_SWITCH_FAMILY 0xe0 |
radovan | 0:5c88ad74f3fe | 22 | #define ELEVATOR_BUTTONc_FAMILY 0xb0 |
radovan | 0:5c88ad74f3fe | 23 | #define DIODEc_FAMILY 0x20 |
radovan | 0:5c88ad74f3fe | 24 | |
radovan | 0:5c88ad74f3fe | 25 | #define ELEVATOR_CABIN 0xf0 |
radovan | 0:5c88ad74f3fe | 26 | #define MOTOR 0xf1 |
radovan | 0:5c88ad74f3fe | 27 | #define WATCHDOG_TIMER 0xfe |
radovan | 0:5c88ad74f3fe | 28 | |
radovan | 0:5c88ad74f3fe | 29 | #define INFORMATION_DISPLAY 0x30 |
radovan | 0:5c88ad74f3fe | 30 | //crc pri mojej adrese 0xAA |
radovan | 0:5c88ad74f3fe | 31 | #define CRC_LEDc2OFF 0xd2 |
radovan | 0:5c88ad74f3fe | 32 | #define CRC_LEDc2ON 0x8c |
radovan | 0:5c88ad74f3fe | 33 | #define CRC_LEDc3OFF 0x79 |
radovan | 0:5c88ad74f3fe | 34 | #define CRC_LEDc3ON 0x27 |
radovan | 0:5c88ad74f3fe | 35 | #define CRC_LEDc1OFF 0x36 |
radovan | 0:5c88ad74f3fe | 36 | #define CRC_LEDc1ON 0x68 |
radovan | 0:5c88ad74f3fe | 37 | #define CRC_LEDc0OFF 0x9d |
radovan | 0:5c88ad74f3fe | 38 | #define CRC_LEDc0ON 0xc3 |
radovan | 0:5c88ad74f3fe | 39 | #define CRC_LEDc4OFF 0x03 |
radovan | 0:5c88ad74f3fe | 40 | #define CRC_LEDc4ON 0x5d |
radovan | 0:5c88ad74f3fe | 41 | |
radovan | 0:5c88ad74f3fe | 42 | #define CRC_ELElock 0xda |
radovan | 0:5c88ad74f3fe | 43 | #define CRC_ELEunlock 0x84 |
radovan | 0:5c88ad74f3fe | 44 | |
radovan | 0:5c88ad74f3fe | 45 | #define CRC_MOTORdown 0xfc |
radovan | 0:5c88ad74f3fe | 46 | #define CRC_MOTORstop 0x71 |
radovan | 0:5c88ad74f3fe | 47 | #define CRC_MOTORup 0xf7 |
radovan | 0:5c88ad74f3fe | 48 | |
radovan | 0:5c88ad74f3fe | 49 | #define CRC_INFDd4 0x9a |
radovan | 0:5c88ad74f3fe | 50 | #define CRC_INFDd3 0x19 |
radovan | 0:5c88ad74f3fe | 51 | #define CRC_INFDd2 0x47 |
radovan | 0:5c88ad74f3fe | 52 | #define CRC_INFDd1 0xa5 |
radovan | 0:5c88ad74f3fe | 53 | |
radovan | 0:5c88ad74f3fe | 54 | #define CRC_INFDn3 0xdd |
radovan | 0:5c88ad74f3fe | 55 | #define CRC_INFDn4 0x5e |
radovan | 0:5c88ad74f3fe | 56 | #define CRC_INFDn2 0x83 |
radovan | 0:5c88ad74f3fe | 57 | #define CRC_INFDn1 0x61 |
radovan | 0:5c88ad74f3fe | 58 | #define CRC_INFDn0 0x5a |
radovan | 0:5c88ad74f3fe | 59 | |
radovan | 0:5c88ad74f3fe | 60 | #define CRC_INFDu0 0xcb |
radovan | 0:5c88ad74f3fe | 61 | #define CRC_INFDu1 0xf0 |
radovan | 0:5c88ad74f3fe | 62 | #define CRC_INFDu2 0x12 |
radovan | 0:5c88ad74f3fe | 63 | #define CRC_INFDu3 0x4c |
radovan | 0:5c88ad74f3fe | 64 | |
radovan | 0:5c88ad74f3fe | 65 | #define CRC_LEDf3OFF 0xa7 |
radovan | 0:5c88ad74f3fe | 66 | #define CRC_LEDf3ON 0xf9 |
radovan | 0:5c88ad74f3fe | 67 | #define CRC_LEDf4OFF 0xdd |
radovan | 0:5c88ad74f3fe | 68 | #define CRC_LEDf4ON 0x83 |
radovan | 0:5c88ad74f3fe | 69 | #define CRC_LEDf2OFF 0x0c |
radovan | 0:5c88ad74f3fe | 70 | #define CRC_LEDf2ON 0x52 |
radovan | 0:5c88ad74f3fe | 71 | #define CRC_LEDf1OFF 0xe8 |
radovan | 0:5c88ad74f3fe | 72 | #define CRC_LEDf1ON 0xb6 |
radovan | 0:5c88ad74f3fe | 73 | #define CRC_LEDf0OFF 0x43 |
radovan | 0:5c88ad74f3fe | 74 | #define CRC_LEDf0ON 0x1d |
radovan | 0:5c88ad74f3fe | 75 | |
radovan | 0:5c88ad74f3fe | 76 | #define CRC_WATCHDOG 0x4f |
radovan | 0:5c88ad74f3fe | 77 | |
radovan | 0:5c88ad74f3fe | 78 | InterruptIn intin(PTA15); |
radovan | 0:5c88ad74f3fe | 79 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
radovan | 0:5c88ad74f3fe | 80 | Serial pc(USBTX, USBRX,57600); |
radovan | 0:5c88ad74f3fe | 81 | char odpovedzac[4]; |
radovan | 0:5c88ad74f3fe | 82 | char poziadavky[5]= {'N','N','N','N','N'}; |
radovan | 0:5c88ad74f3fe | 83 | char poziciaVytahu=0x04; |
radovan | 0:5c88ad74f3fe | 84 | char bufpole[200]; |
radovan | 0:5c88ad74f3fe | 85 | int zb=0; |
radovan | 0:5c88ad74f3fe | 86 | int kb=0; |
radovan | 0:5c88ad74f3fe | 87 | char smerPohybu=0x03; |
radovan | 0:5c88ad74f3fe | 88 | char aktualnePoschodie='4'; |
radovan | 0:5c88ad74f3fe | 89 | unsigned char spravaVS[10]; |
radovan | 0:5c88ad74f3fe | 90 | |
radovan | 0:5c88ad74f3fe | 91 | void posli(int pokial); |
radovan | 0:5c88ad74f3fe | 92 | void watchdogReset(); |
radovan | 0:5c88ad74f3fe | 93 | /** |
radovan | 0:5c88ad74f3fe | 94 | *void citaj() |
radovan | 0:5c88ad74f3fe | 95 | *funkcia volana pri vzniknuti prerusenia pre citanie od serioveho portu |
radovan | 0:5c88ad74f3fe | 96 | *do kruhoveho buffera "bufpole" nacita 1 znak. |
radovan | 0:5c88ad74f3fe | 97 | */ |
radovan | 0:5c88ad74f3fe | 98 | void citaj() |
radovan | 0:5c88ad74f3fe | 99 | { |
radovan | 0:5c88ad74f3fe | 100 | while(pc.readable()==1) { |
radovan | 0:5c88ad74f3fe | 101 | bufpole[kb]=pc.getc(); |
radovan | 0:5c88ad74f3fe | 102 | kb=(kb+1)%200; |
radovan | 0:5c88ad74f3fe | 103 | } |
radovan | 0:5c88ad74f3fe | 104 | } |
radovan | 0:5c88ad74f3fe | 105 | /** |
radovan | 0:5c88ad74f3fe | 106 | *void prerusenieACC() |
radovan | 0:5c88ad74f3fe | 107 | *funkcia volana pri vzniknuti prerusenia od accelerometra |
radovan | 0:5c88ad74f3fe | 108 | *posle simulatoru spravu pre zastavenie vytahu |
radovan | 0:5c88ad74f3fe | 109 | */ |
radovan | 0:5c88ad74f3fe | 110 | void prerusenieACC() |
radovan | 0:5c88ad74f3fe | 111 | { |
radovan | 0:5c88ad74f3fe | 112 | uint8_t datan[1]; |
radovan | 0:5c88ad74f3fe | 113 | acc.readRegs(0x0C,datan,1); |
radovan | 0:5c88ad74f3fe | 114 | |
radovan | 0:5c88ad74f3fe | 115 | if((datan[0]&0x04)==0x04) { |
radovan | 0:5c88ad74f3fe | 116 | acc.readRegs(0x16,datan,1); |
radovan | 0:5c88ad74f3fe | 117 | char breakOn[6]= {0xA0,0xf,0xAA,0x01,0x01,0x08}; |
radovan | 0:5c88ad74f3fe | 118 | //poslem spravu |
radovan | 0:5c88ad74f3fe | 119 | for(int ind=0; ind<6; ind++) { |
radovan | 0:5c88ad74f3fe | 120 | while(pc.writable()==0) {} |
radovan | 0:5c88ad74f3fe | 121 | pc.putc(breakOn[ind]); |
radovan | 0:5c88ad74f3fe | 122 | } |
radovan | 0:5c88ad74f3fe | 123 | |
radovan | 0:5c88ad74f3fe | 124 | } |
radovan | 0:5c88ad74f3fe | 125 | } |
radovan | 0:5c88ad74f3fe | 126 | /** |
radovan | 0:5c88ad74f3fe | 127 | *void main() |
radovan | 0:5c88ad74f3fe | 128 | *nastavuje akcelerometer pre vytvaranie prerusenia pre freefall |
radovan | 0:5c88ad74f3fe | 129 | *spracovava v nekonecnej slucke spravy z kruhoveho buffera |
radovan | 0:5c88ad74f3fe | 130 | *v pravidelnych intervaloch resetuje watchdog |
radovan | 0:5c88ad74f3fe | 131 | */ |
radovan | 0:5c88ad74f3fe | 132 | int main() |
radovan | 0:5c88ad74f3fe | 133 | { |
radovan | 0:5c88ad74f3fe | 134 | spravaVS[0]=0xA0;//zaciatok |
radovan | 0:5c88ad74f3fe | 135 | spravaVS[2]=0xAA;//ja |
radovan | 0:5c88ad74f3fe | 136 | |
radovan | 0:5c88ad74f3fe | 137 | Timer timerReset; |
radovan | 0:5c88ad74f3fe | 138 | |
radovan | 0:5c88ad74f3fe | 139 | pc.attach(&citaj,pc.RxIrq); |
radovan | 0:5c88ad74f3fe | 140 | timerReset.start(); |
radovan | 0:5c88ad74f3fe | 141 | intin.fall(&prerusenieACC); |
radovan | 0:5c88ad74f3fe | 142 | |
radovan | 0:5c88ad74f3fe | 143 | uint8_t pomPole[2] = {0x2A, 0x20}; |
radovan | 0:5c88ad74f3fe | 144 | acc.writeRegs(pomPole, 2); |
radovan | 0:5c88ad74f3fe | 145 | |
radovan | 0:5c88ad74f3fe | 146 | pomPole[0]=0x15; |
radovan | 0:5c88ad74f3fe | 147 | pomPole[1]=0xB8; |
radovan | 0:5c88ad74f3fe | 148 | acc.writeRegs(pomPole,2); |
radovan | 0:5c88ad74f3fe | 149 | |
radovan | 0:5c88ad74f3fe | 150 | pomPole[0]=0x17; |
radovan | 0:5c88ad74f3fe | 151 | pomPole[1]=0x03; |
radovan | 0:5c88ad74f3fe | 152 | acc.writeRegs(pomPole,2); |
radovan | 0:5c88ad74f3fe | 153 | |
radovan | 0:5c88ad74f3fe | 154 | pomPole[0]=0x18; |
radovan | 0:5c88ad74f3fe | 155 | pomPole[1]=0x06; |
radovan | 0:5c88ad74f3fe | 156 | acc.writeRegs(pomPole,2); |
radovan | 0:5c88ad74f3fe | 157 | |
radovan | 0:5c88ad74f3fe | 158 | pomPole[0]=0x2D; |
radovan | 0:5c88ad74f3fe | 159 | pomPole[1]=0x04; |
radovan | 0:5c88ad74f3fe | 160 | acc.writeRegs(pomPole,2); |
radovan | 0:5c88ad74f3fe | 161 | |
radovan | 0:5c88ad74f3fe | 162 | pomPole[0]=0x2E; |
radovan | 0:5c88ad74f3fe | 163 | pomPole[1]=0x00; |
radovan | 0:5c88ad74f3fe | 164 | acc.writeRegs(pomPole,2); |
radovan | 0:5c88ad74f3fe | 165 | |
radovan | 0:5c88ad74f3fe | 166 | uint8_t data[1]; |
radovan | 0:5c88ad74f3fe | 167 | acc.readRegs(0x2A,data,1); |
radovan | 0:5c88ad74f3fe | 168 | data[0]=data[0]| 0x01; |
radovan | 0:5c88ad74f3fe | 169 | |
radovan | 0:5c88ad74f3fe | 170 | pomPole[0]=0x2A; |
radovan | 0:5c88ad74f3fe | 171 | pomPole[1]=data[0]; |
radovan | 0:5c88ad74f3fe | 172 | acc.writeRegs(pomPole,2); |
radovan | 0:5c88ad74f3fe | 173 | |
radovan | 0:5c88ad74f3fe | 174 | watchdogReset(); |
radovan | 0:5c88ad74f3fe | 175 | int cas=timerReset.read_ms(); |
radovan | 0:5c88ad74f3fe | 176 | while(true) { |
radovan | 0:5c88ad74f3fe | 177 | |
radovan | 0:5c88ad74f3fe | 178 | int pocetdat=0; |
radovan | 0:5c88ad74f3fe | 179 | if(zb<=kb) { |
radovan | 0:5c88ad74f3fe | 180 | pocetdat=kb-zb; |
radovan | 0:5c88ad74f3fe | 181 | } else { |
radovan | 0:5c88ad74f3fe | 182 | pocetdat=(199-zb)+1+kb; |
radovan | 0:5c88ad74f3fe | 183 | } |
radovan | 0:5c88ad74f3fe | 184 | |
radovan | 0:5c88ad74f3fe | 185 | if(pocetdat>4&&pocetdat>=4+bufpole[zb+3]+1) {//spracuvavam spravu |
radovan | 0:5c88ad74f3fe | 186 | odpovedzac[0]=bufpole[zb]; |
radovan | 0:5c88ad74f3fe | 187 | zb=(zb+1)%200; |
radovan | 0:5c88ad74f3fe | 188 | |
radovan | 0:5c88ad74f3fe | 189 | odpovedzac[1]=bufpole[zb]; |
radovan | 0:5c88ad74f3fe | 190 | zb=(zb+1)%200; |
radovan | 0:5c88ad74f3fe | 191 | |
radovan | 0:5c88ad74f3fe | 192 | odpovedzac[2]=bufpole[zb]; |
radovan | 0:5c88ad74f3fe | 193 | zb=(zb+1)%200; |
radovan | 0:5c88ad74f3fe | 194 | |
radovan | 0:5c88ad74f3fe | 195 | odpovedzac[3]=bufpole[zb]; |
radovan | 0:5c88ad74f3fe | 196 | |
radovan | 0:5c88ad74f3fe | 197 | int v=odpovedzac[3]+1; |
radovan | 0:5c88ad74f3fe | 198 | char data; |
radovan | 0:5c88ad74f3fe | 199 | for(int ind=0; ind<v; ind++) { |
radovan | 0:5c88ad74f3fe | 200 | zb=(zb+1)%200; |
radovan | 0:5c88ad74f3fe | 201 | if(ind==0) { |
radovan | 0:5c88ad74f3fe | 202 | data= bufpole[zb]; |
radovan | 0:5c88ad74f3fe | 203 | } |
radovan | 0:5c88ad74f3fe | 204 | } |
radovan | 0:5c88ad74f3fe | 205 | zb=(zb+1)%200; |
radovan | 0:5c88ad74f3fe | 206 | |
radovan | 0:5c88ad74f3fe | 207 | char rodina=(odpovedzac[2]&0xf0); |
radovan | 0:5c88ad74f3fe | 208 | char jedinec=(odpovedzac[2]&0x0f); |
radovan | 0:5c88ad74f3fe | 209 | watchdogReset(); |
radovan | 0:5c88ad74f3fe | 210 | |
radovan | 0:5c88ad74f3fe | 211 | if(rodina==ELEVATOR_BUTTONf_FAMILY) { |
radovan | 0:5c88ad74f3fe | 212 | |
radovan | 0:5c88ad74f3fe | 213 | if(poziadavky[0]=='N'&&jedinec!=poziciaVytahu) { |
radovan | 0:5c88ad74f3fe | 214 | |
radovan | 0:5c88ad74f3fe | 215 | poziadavky[0]=jedinec;//ulozim na ktore poschodie ma vytah ist |
radovan | 0:5c88ad74f3fe | 216 | //svietim diodu na poschodi |
radovan | 0:5c88ad74f3fe | 217 | spravaVS[1]=DIODEf_FAMILY|jedinec;//prijimatel |
radovan | 0:5c88ad74f3fe | 218 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 219 | spravaVS[4]=0x01;//data |
radovan | 0:5c88ad74f3fe | 220 | |
radovan | 0:5c88ad74f3fe | 221 | if(jedinec==0x04) { |
radovan | 0:5c88ad74f3fe | 222 | spravaVS[5]=CRC_LEDf4ON; |
radovan | 0:5c88ad74f3fe | 223 | } else if(jedinec==0x03) { |
radovan | 0:5c88ad74f3fe | 224 | spravaVS[5]=CRC_LEDf3ON; |
radovan | 0:5c88ad74f3fe | 225 | } else if(jedinec==0x02) { |
radovan | 0:5c88ad74f3fe | 226 | spravaVS[5]=CRC_LEDf2ON; |
radovan | 0:5c88ad74f3fe | 227 | } else if(jedinec==0x01) { |
radovan | 0:5c88ad74f3fe | 228 | spravaVS[5]=CRC_LEDf1ON; |
radovan | 0:5c88ad74f3fe | 229 | } else { |
radovan | 0:5c88ad74f3fe | 230 | spravaVS[5]=CRC_LEDf0ON; |
radovan | 0:5c88ad74f3fe | 231 | } |
radovan | 0:5c88ad74f3fe | 232 | posli(6); |
radovan | 0:5c88ad74f3fe | 233 | |
radovan | 0:5c88ad74f3fe | 234 | //zamykam vytah |
radovan | 0:5c88ad74f3fe | 235 | spravaVS[1]=ELEVATOR_CABIN;//prijimatel |
radovan | 0:5c88ad74f3fe | 236 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 237 | spravaVS[4]=0x01;//data |
radovan | 0:5c88ad74f3fe | 238 | spravaVS[5]=CRC_ELElock; |
radovan | 0:5c88ad74f3fe | 239 | posli(6); |
radovan | 0:5c88ad74f3fe | 240 | |
radovan | 0:5c88ad74f3fe | 241 | //uved motor do pohybu |
radovan | 0:5c88ad74f3fe | 242 | spravaVS[1]=MOTOR;//prijimatel |
radovan | 0:5c88ad74f3fe | 243 | spravaVS[3]=5;//pocet dat |
radovan | 0:5c88ad74f3fe | 244 | spravaVS[4]=0x2;//pohni vytah |
radovan | 0:5c88ad74f3fe | 245 | |
radovan | 0:5c88ad74f3fe | 246 | if(poziadavky[0]>poziciaVytahu) { |
radovan | 0:5c88ad74f3fe | 247 | smerPohybu=0x01; |
radovan | 0:5c88ad74f3fe | 248 | spravaVS[5]=0x64; |
radovan | 0:5c88ad74f3fe | 249 | spravaVS[6]=0x00; |
radovan | 0:5c88ad74f3fe | 250 | spravaVS[7]=0x00; |
radovan | 0:5c88ad74f3fe | 251 | spravaVS[8]=0x00; |
radovan | 0:5c88ad74f3fe | 252 | spravaVS[9]=CRC_MOTORup; |
radovan | 0:5c88ad74f3fe | 253 | } else { |
radovan | 0:5c88ad74f3fe | 254 | smerPohybu=0x02; |
radovan | 0:5c88ad74f3fe | 255 | spravaVS[5]=0x9C; |
radovan | 0:5c88ad74f3fe | 256 | spravaVS[6]=0xFF; |
radovan | 0:5c88ad74f3fe | 257 | spravaVS[7]=0xFF; |
radovan | 0:5c88ad74f3fe | 258 | spravaVS[8]=0xFF; |
radovan | 0:5c88ad74f3fe | 259 | spravaVS[9]=CRC_MOTORdown; |
radovan | 0:5c88ad74f3fe | 260 | } |
radovan | 0:5c88ad74f3fe | 261 | posli(10); |
radovan | 0:5c88ad74f3fe | 262 | |
radovan | 0:5c88ad74f3fe | 263 | //zobrazenie pohybu |
radovan | 0:5c88ad74f3fe | 264 | spravaVS[1]=INFORMATION_DISPLAY;//prijimatel |
radovan | 0:5c88ad74f3fe | 265 | spravaVS[3]=2;//pocet dat |
radovan | 0:5c88ad74f3fe | 266 | spravaVS[4]=smerPohybu;//data |
radovan | 0:5c88ad74f3fe | 267 | spravaVS[5]=aktualnePoschodie;//data |
radovan | 0:5c88ad74f3fe | 268 | |
radovan | 0:5c88ad74f3fe | 269 | if(smerPohybu==0x02) { //smer pohybu dole |
radovan | 0:5c88ad74f3fe | 270 | if(aktualnePoschodie=='4') { |
radovan | 0:5c88ad74f3fe | 271 | spravaVS[6]=CRC_INFDd4; |
radovan | 0:5c88ad74f3fe | 272 | } else if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 273 | spravaVS[6]=CRC_INFDd3; |
radovan | 0:5c88ad74f3fe | 274 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 275 | spravaVS[6]=CRC_INFDd2; |
radovan | 0:5c88ad74f3fe | 276 | } else { |
radovan | 0:5c88ad74f3fe | 277 | spravaVS[6]=CRC_INFDd1; |
radovan | 0:5c88ad74f3fe | 278 | } |
radovan | 0:5c88ad74f3fe | 279 | } else {//smer pohybu hore |
radovan | 0:5c88ad74f3fe | 280 | if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 281 | spravaVS[6]=CRC_INFDu3; |
radovan | 0:5c88ad74f3fe | 282 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 283 | spravaVS[6]=CRC_INFDu2; |
radovan | 0:5c88ad74f3fe | 284 | } else if(aktualnePoschodie=='1') { |
radovan | 0:5c88ad74f3fe | 285 | spravaVS[6]=CRC_INFDu1; |
radovan | 0:5c88ad74f3fe | 286 | } else { |
radovan | 0:5c88ad74f3fe | 287 | spravaVS[6]=CRC_INFDu0; |
radovan | 0:5c88ad74f3fe | 288 | } |
radovan | 0:5c88ad74f3fe | 289 | } |
radovan | 0:5c88ad74f3fe | 290 | posli(7); |
radovan | 0:5c88ad74f3fe | 291 | |
radovan | 0:5c88ad74f3fe | 292 | }//if poziadavky[0]=='N'&&poziadavky[0]!=poziciaVytahu |
radovan | 0:5c88ad74f3fe | 293 | |
radovan | 0:5c88ad74f3fe | 294 | } else if(rodina==ELEVATOR_BUTTONc_FAMILY) { |
radovan | 0:5c88ad74f3fe | 295 | |
radovan | 0:5c88ad74f3fe | 296 | //ak bolo stlacene tlacidlo na inom poschodi ako akualnom a tato poziadavka este nie je v poli |
radovan | 0:5c88ad74f3fe | 297 | if(poziciaVytahu!=jedinec) { |
radovan | 0:5c88ad74f3fe | 298 | char pom=0x00; |
radovan | 0:5c88ad74f3fe | 299 | char pohni=0x00; |
radovan | 0:5c88ad74f3fe | 300 | for(int i=0; i<5; i++) { |
radovan | 0:5c88ad74f3fe | 301 | if(poziadavky[i]==jedinec) { |
radovan | 0:5c88ad74f3fe | 302 | pom=0x01; |
radovan | 0:5c88ad74f3fe | 303 | } |
radovan | 0:5c88ad74f3fe | 304 | if(poziadavky[i]=='N'&&pom==0x00) { |
radovan | 0:5c88ad74f3fe | 305 | poziadavky[i]=jedinec; |
radovan | 0:5c88ad74f3fe | 306 | pom=0x02; |
radovan | 0:5c88ad74f3fe | 307 | if(i==0) { |
radovan | 0:5c88ad74f3fe | 308 | pohni=0x03; |
radovan | 0:5c88ad74f3fe | 309 | } |
radovan | 0:5c88ad74f3fe | 310 | break; |
radovan | 0:5c88ad74f3fe | 311 | } |
radovan | 0:5c88ad74f3fe | 312 | } |
radovan | 0:5c88ad74f3fe | 313 | if(pom==0x02) { |
radovan | 0:5c88ad74f3fe | 314 | //zasvieti diodu vnutri vytahu |
radovan | 0:5c88ad74f3fe | 315 | spravaVS[1]=DIODEc_FAMILY|jedinec;//prijimatel |
radovan | 0:5c88ad74f3fe | 316 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 317 | spravaVS[4]=0x01;//data |
radovan | 0:5c88ad74f3fe | 318 | |
radovan | 0:5c88ad74f3fe | 319 | if(jedinec==0x04) { |
radovan | 0:5c88ad74f3fe | 320 | spravaVS[5]=CRC_LEDc4ON; |
radovan | 0:5c88ad74f3fe | 321 | } else if(jedinec==0x03) { |
radovan | 0:5c88ad74f3fe | 322 | spravaVS[5]=CRC_LEDc3ON; |
radovan | 0:5c88ad74f3fe | 323 | } else if(jedinec==0x02) { |
radovan | 0:5c88ad74f3fe | 324 | spravaVS[5]=CRC_LEDc2ON; |
radovan | 0:5c88ad74f3fe | 325 | } else if(jedinec==0x01) { |
radovan | 0:5c88ad74f3fe | 326 | spravaVS[5]=CRC_LEDc1ON; |
radovan | 0:5c88ad74f3fe | 327 | } else { |
radovan | 0:5c88ad74f3fe | 328 | spravaVS[5]=CRC_LEDc0ON; |
radovan | 0:5c88ad74f3fe | 329 | } |
radovan | 0:5c88ad74f3fe | 330 | posli(6); |
radovan | 0:5c88ad74f3fe | 331 | |
radovan | 0:5c88ad74f3fe | 332 | } |
radovan | 0:5c88ad74f3fe | 333 | |
radovan | 0:5c88ad74f3fe | 334 | if(pohni==0x03) { |
radovan | 0:5c88ad74f3fe | 335 | //uzamknutie vytahu |
radovan | 0:5c88ad74f3fe | 336 | spravaVS[1]=ELEVATOR_CABIN;//prijimatel |
radovan | 0:5c88ad74f3fe | 337 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 338 | spravaVS[4]=0x01;//data |
radovan | 0:5c88ad74f3fe | 339 | spravaVS[5]=CRC_ELElock; |
radovan | 0:5c88ad74f3fe | 340 | posli(6); |
radovan | 0:5c88ad74f3fe | 341 | |
radovan | 0:5c88ad74f3fe | 342 | //uved motor do pohybu |
radovan | 0:5c88ad74f3fe | 343 | spravaVS[1]=MOTOR;//prijimatel |
radovan | 0:5c88ad74f3fe | 344 | spravaVS[3]=5;//pocet dat |
radovan | 0:5c88ad74f3fe | 345 | spravaVS[4]=0x2;//data |
radovan | 0:5c88ad74f3fe | 346 | |
radovan | 0:5c88ad74f3fe | 347 | if(poziadavky[0]>poziciaVytahu) { |
radovan | 0:5c88ad74f3fe | 348 | smerPohybu=0x01; |
radovan | 0:5c88ad74f3fe | 349 | spravaVS[5]=0x64; |
radovan | 0:5c88ad74f3fe | 350 | spravaVS[6]=0x00; |
radovan | 0:5c88ad74f3fe | 351 | spravaVS[7]=0x00; |
radovan | 0:5c88ad74f3fe | 352 | spravaVS[8]=0x00; |
radovan | 0:5c88ad74f3fe | 353 | spravaVS[9]=CRC_MOTORup; |
radovan | 0:5c88ad74f3fe | 354 | |
radovan | 0:5c88ad74f3fe | 355 | } else { |
radovan | 0:5c88ad74f3fe | 356 | smerPohybu=0x02; |
radovan | 0:5c88ad74f3fe | 357 | spravaVS[5]=0x9C; |
radovan | 0:5c88ad74f3fe | 358 | spravaVS[6]=0xFF; |
radovan | 0:5c88ad74f3fe | 359 | spravaVS[7]=0xFF; |
radovan | 0:5c88ad74f3fe | 360 | spravaVS[8]=0xFF; |
radovan | 0:5c88ad74f3fe | 361 | spravaVS[9]=CRC_MOTORdown; |
radovan | 0:5c88ad74f3fe | 362 | } |
radovan | 0:5c88ad74f3fe | 363 | posli(10); |
radovan | 0:5c88ad74f3fe | 364 | |
radovan | 0:5c88ad74f3fe | 365 | //zobrazenie pohybu |
radovan | 0:5c88ad74f3fe | 366 | spravaVS[1]=INFORMATION_DISPLAY;//prijimatel |
radovan | 0:5c88ad74f3fe | 367 | spravaVS[3]=2;//pocet dat |
radovan | 0:5c88ad74f3fe | 368 | spravaVS[4]=smerPohybu;//data |
radovan | 0:5c88ad74f3fe | 369 | spravaVS[5]=aktualnePoschodie;//data |
radovan | 0:5c88ad74f3fe | 370 | |
radovan | 0:5c88ad74f3fe | 371 | if(smerPohybu==0x02) { //smer pohybu dole |
radovan | 0:5c88ad74f3fe | 372 | if(aktualnePoschodie=='4') { |
radovan | 0:5c88ad74f3fe | 373 | spravaVS[6]=CRC_INFDd4; |
radovan | 0:5c88ad74f3fe | 374 | } else if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 375 | spravaVS[6]=CRC_INFDd3; |
radovan | 0:5c88ad74f3fe | 376 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 377 | spravaVS[6]=CRC_INFDd2; |
radovan | 0:5c88ad74f3fe | 378 | } else { |
radovan | 0:5c88ad74f3fe | 379 | spravaVS[6]=CRC_INFDd1; |
radovan | 0:5c88ad74f3fe | 380 | } |
radovan | 0:5c88ad74f3fe | 381 | } else {//smer pohybu hore |
radovan | 0:5c88ad74f3fe | 382 | if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 383 | spravaVS[6]=CRC_INFDu3; |
radovan | 0:5c88ad74f3fe | 384 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 385 | spravaVS[6]=CRC_INFDu2; |
radovan | 0:5c88ad74f3fe | 386 | } else if(aktualnePoschodie=='1') { |
radovan | 0:5c88ad74f3fe | 387 | spravaVS[6]=CRC_INFDu1; |
radovan | 0:5c88ad74f3fe | 388 | } else { |
radovan | 0:5c88ad74f3fe | 389 | spravaVS[6]=CRC_INFDu0; |
radovan | 0:5c88ad74f3fe | 390 | } |
radovan | 0:5c88ad74f3fe | 391 | } |
radovan | 0:5c88ad74f3fe | 392 | posli(7); |
radovan | 0:5c88ad74f3fe | 393 | } |
radovan | 0:5c88ad74f3fe | 394 | } |
radovan | 0:5c88ad74f3fe | 395 | |
radovan | 0:5c88ad74f3fe | 396 | } else if(rodina==LIMIT_SWITCH_FAMILY) { |
radovan | 0:5c88ad74f3fe | 397 | |
radovan | 0:5c88ad74f3fe | 398 | if(data==0x01&&poziadavky[0]==jedinec) { //dalej od switchu |
radovan | 0:5c88ad74f3fe | 399 | //zastavenie vytahu |
radovan | 0:5c88ad74f3fe | 400 | spravaVS[1]=MOTOR;//prijimatel |
radovan | 0:5c88ad74f3fe | 401 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 402 | spravaVS[4]=0x1;//data |
radovan | 0:5c88ad74f3fe | 403 | spravaVS[5]=CRC_MOTORstop; |
radovan | 0:5c88ad74f3fe | 404 | posli(6); |
radovan | 0:5c88ad74f3fe | 405 | |
radovan | 0:5c88ad74f3fe | 406 | } else if(data==0x02&&poziadavky[0]==jedinec) { //blizko pri switchi spravne poschodie |
radovan | 0:5c88ad74f3fe | 407 | //posunutie poziadaviek |
radovan | 0:5c88ad74f3fe | 408 | for(int i=0; i<4; i++) { |
radovan | 0:5c88ad74f3fe | 409 | poziadavky[i]=poziadavky[i+1]; |
radovan | 0:5c88ad74f3fe | 410 | } |
radovan | 0:5c88ad74f3fe | 411 | poziadavky[4]='N'; |
radovan | 0:5c88ad74f3fe | 412 | poziciaVytahu=jedinec; |
radovan | 0:5c88ad74f3fe | 413 | //odomknutie vytahu |
radovan | 0:5c88ad74f3fe | 414 | spravaVS[1]=ELEVATOR_CABIN;//prijimatel |
radovan | 0:5c88ad74f3fe | 415 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 416 | spravaVS[4]=0x00;//data |
radovan | 0:5c88ad74f3fe | 417 | spravaVS[5]=CRC_ELEunlock; |
radovan | 0:5c88ad74f3fe | 418 | posli(6); |
radovan | 0:5c88ad74f3fe | 419 | |
radovan | 0:5c88ad74f3fe | 420 | //zhasnutie diody na poschodi |
radovan | 0:5c88ad74f3fe | 421 | spravaVS[1]=DIODEf_FAMILY|jedinec;//prijimatel |
radovan | 0:5c88ad74f3fe | 422 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 423 | spravaVS[4]=0x00;//data |
radovan | 0:5c88ad74f3fe | 424 | |
radovan | 0:5c88ad74f3fe | 425 | if(jedinec==0x04) { |
radovan | 0:5c88ad74f3fe | 426 | spravaVS[5]=CRC_LEDf4OFF; |
radovan | 0:5c88ad74f3fe | 427 | } else if(jedinec==0x03) { |
radovan | 0:5c88ad74f3fe | 428 | spravaVS[5]=CRC_LEDf3OFF; |
radovan | 0:5c88ad74f3fe | 429 | } else if(jedinec==0x02) { |
radovan | 0:5c88ad74f3fe | 430 | spravaVS[5]=CRC_LEDf2OFF; |
radovan | 0:5c88ad74f3fe | 431 | } else if(jedinec==0x01) { |
radovan | 0:5c88ad74f3fe | 432 | spravaVS[5]=CRC_LEDf1OFF; |
radovan | 0:5c88ad74f3fe | 433 | } else { |
radovan | 0:5c88ad74f3fe | 434 | spravaVS[5]=CRC_LEDf0OFF; |
radovan | 0:5c88ad74f3fe | 435 | } |
radovan | 0:5c88ad74f3fe | 436 | |
radovan | 0:5c88ad74f3fe | 437 | posli(6); |
radovan | 0:5c88ad74f3fe | 438 | |
radovan | 0:5c88ad74f3fe | 439 | //zhasne diodu vnutri vytahu |
radovan | 0:5c88ad74f3fe | 440 | spravaVS[1]=DIODEc_FAMILY|jedinec;//prijimatel |
radovan | 0:5c88ad74f3fe | 441 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 442 | spravaVS[4]=0x00;//data |
radovan | 0:5c88ad74f3fe | 443 | |
radovan | 0:5c88ad74f3fe | 444 | if(jedinec==0x04) { |
radovan | 0:5c88ad74f3fe | 445 | spravaVS[5]=CRC_LEDc4OFF; |
radovan | 0:5c88ad74f3fe | 446 | aktualnePoschodie='4'; |
radovan | 0:5c88ad74f3fe | 447 | } else if(jedinec==0x03) { |
radovan | 0:5c88ad74f3fe | 448 | spravaVS[5]=CRC_LEDc3OFF; |
radovan | 0:5c88ad74f3fe | 449 | aktualnePoschodie='3'; |
radovan | 0:5c88ad74f3fe | 450 | } else if(jedinec==0x02) { |
radovan | 0:5c88ad74f3fe | 451 | spravaVS[5]=CRC_LEDc2OFF; |
radovan | 0:5c88ad74f3fe | 452 | aktualnePoschodie='2'; |
radovan | 0:5c88ad74f3fe | 453 | } else if(jedinec==0x01) { |
radovan | 0:5c88ad74f3fe | 454 | spravaVS[5]=CRC_LEDc1OFF; |
radovan | 0:5c88ad74f3fe | 455 | aktualnePoschodie='1'; |
radovan | 0:5c88ad74f3fe | 456 | } else { |
radovan | 0:5c88ad74f3fe | 457 | spravaVS[5]=CRC_LEDc0OFF; |
radovan | 0:5c88ad74f3fe | 458 | aktualnePoschodie='P'; |
radovan | 0:5c88ad74f3fe | 459 | } |
radovan | 0:5c88ad74f3fe | 460 | |
radovan | 0:5c88ad74f3fe | 461 | posli(6); |
radovan | 0:5c88ad74f3fe | 462 | |
radovan | 0:5c88ad74f3fe | 463 | smerPohybu=0x03; |
radovan | 0:5c88ad74f3fe | 464 | //zobrazenie pohybu |
radovan | 0:5c88ad74f3fe | 465 | spravaVS[1]=INFORMATION_DISPLAY;//prijimatel |
radovan | 0:5c88ad74f3fe | 466 | spravaVS[3]=2;//pocet dat |
radovan | 0:5c88ad74f3fe | 467 | spravaVS[4]=smerPohybu;//data |
radovan | 0:5c88ad74f3fe | 468 | spravaVS[5]=aktualnePoschodie;//data |
radovan | 0:5c88ad74f3fe | 469 | |
radovan | 0:5c88ad74f3fe | 470 | if(jedinec==0x04) { |
radovan | 0:5c88ad74f3fe | 471 | spravaVS[6]=CRC_INFDn4; |
radovan | 0:5c88ad74f3fe | 472 | } else if(jedinec==0x03) { |
radovan | 0:5c88ad74f3fe | 473 | spravaVS[6]=CRC_INFDn3; |
radovan | 0:5c88ad74f3fe | 474 | } else if(jedinec==0x02) { |
radovan | 0:5c88ad74f3fe | 475 | spravaVS[6]=CRC_INFDn2; |
radovan | 0:5c88ad74f3fe | 476 | } else if(jedinec==0x01) { |
radovan | 0:5c88ad74f3fe | 477 | spravaVS[6]=CRC_INFDn1; |
radovan | 0:5c88ad74f3fe | 478 | } else { |
radovan | 0:5c88ad74f3fe | 479 | spravaVS[6]=CRC_INFDn0; |
radovan | 0:5c88ad74f3fe | 480 | } |
radovan | 0:5c88ad74f3fe | 481 | posli(7); |
radovan | 0:5c88ad74f3fe | 482 | watchdogReset(); |
radovan | 0:5c88ad74f3fe | 483 | |
radovan | 0:5c88ad74f3fe | 484 | //cakam vzdy po zastaveni vytahu |
radovan | 0:5c88ad74f3fe | 485 | int zac; |
radovan | 0:5c88ad74f3fe | 486 | Timer cakaj; |
radovan | 0:5c88ad74f3fe | 487 | for(int t=0; t<=10; t++) { |
radovan | 0:5c88ad74f3fe | 488 | cakaj.start(); |
radovan | 0:5c88ad74f3fe | 489 | zac=cakaj.read_ms(); |
radovan | 0:5c88ad74f3fe | 490 | while(true) { |
radovan | 0:5c88ad74f3fe | 491 | if((cakaj.read_ms()-zac)>=500) { |
radovan | 0:5c88ad74f3fe | 492 | watchdogReset(); |
radovan | 0:5c88ad74f3fe | 493 | break; |
radovan | 0:5c88ad74f3fe | 494 | } |
radovan | 0:5c88ad74f3fe | 495 | } |
radovan | 0:5c88ad74f3fe | 496 | |
radovan | 0:5c88ad74f3fe | 497 | cakaj.stop(); |
radovan | 0:5c88ad74f3fe | 498 | cakaj.reset(); |
radovan | 0:5c88ad74f3fe | 499 | } |
radovan | 0:5c88ad74f3fe | 500 | |
radovan | 0:5c88ad74f3fe | 501 | if(poziadavky[0]!='N') { //ak este mam niekde ist tak spustim vytah |
radovan | 0:5c88ad74f3fe | 502 | |
radovan | 0:5c88ad74f3fe | 503 | //uzamknutie vytahu |
radovan | 0:5c88ad74f3fe | 504 | spravaVS[1]=ELEVATOR_CABIN;//prijimatel |
radovan | 0:5c88ad74f3fe | 505 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 506 | spravaVS[4]=0x01;//data |
radovan | 0:5c88ad74f3fe | 507 | spravaVS[5]=CRC_ELElock; |
radovan | 0:5c88ad74f3fe | 508 | posli(6); |
radovan | 0:5c88ad74f3fe | 509 | |
radovan | 0:5c88ad74f3fe | 510 | //uved motor do pohybu |
radovan | 0:5c88ad74f3fe | 511 | spravaVS[1]=MOTOR;//prijimatel |
radovan | 0:5c88ad74f3fe | 512 | spravaVS[3]=5;//pocet dat |
radovan | 0:5c88ad74f3fe | 513 | spravaVS[4]=0x2;//data |
radovan | 0:5c88ad74f3fe | 514 | |
radovan | 0:5c88ad74f3fe | 515 | if(poziadavky[0]>poziciaVytahu) { |
radovan | 0:5c88ad74f3fe | 516 | smerPohybu=0x01; |
radovan | 0:5c88ad74f3fe | 517 | spravaVS[5]=0x64; |
radovan | 0:5c88ad74f3fe | 518 | spravaVS[6]=0x00; |
radovan | 0:5c88ad74f3fe | 519 | spravaVS[7]=0x00; |
radovan | 0:5c88ad74f3fe | 520 | spravaVS[8]=0x00; |
radovan | 0:5c88ad74f3fe | 521 | spravaVS[9]=CRC_MOTORup; |
radovan | 0:5c88ad74f3fe | 522 | |
radovan | 0:5c88ad74f3fe | 523 | } else { |
radovan | 0:5c88ad74f3fe | 524 | smerPohybu=0x02; |
radovan | 0:5c88ad74f3fe | 525 | spravaVS[5]=0x9C; |
radovan | 0:5c88ad74f3fe | 526 | spravaVS[6]=0xFF; |
radovan | 0:5c88ad74f3fe | 527 | spravaVS[7]=0xFF; |
radovan | 0:5c88ad74f3fe | 528 | spravaVS[8]=0xFF; |
radovan | 0:5c88ad74f3fe | 529 | spravaVS[9]=CRC_MOTORdown; |
radovan | 0:5c88ad74f3fe | 530 | } |
radovan | 0:5c88ad74f3fe | 531 | posli(10); |
radovan | 0:5c88ad74f3fe | 532 | |
radovan | 0:5c88ad74f3fe | 533 | //zobrazenie pohybu |
radovan | 0:5c88ad74f3fe | 534 | spravaVS[1]=INFORMATION_DISPLAY;//prijimatel |
radovan | 0:5c88ad74f3fe | 535 | spravaVS[3]=2;//pocet dat |
radovan | 0:5c88ad74f3fe | 536 | spravaVS[4]=smerPohybu;//data |
radovan | 0:5c88ad74f3fe | 537 | spravaVS[5]=aktualnePoschodie;//data |
radovan | 0:5c88ad74f3fe | 538 | |
radovan | 0:5c88ad74f3fe | 539 | if(smerPohybu==0x02) { //smer pohybu dole |
radovan | 0:5c88ad74f3fe | 540 | if(aktualnePoschodie=='4') { |
radovan | 0:5c88ad74f3fe | 541 | spravaVS[6]=CRC_INFDd4; |
radovan | 0:5c88ad74f3fe | 542 | } else if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 543 | spravaVS[6]=CRC_INFDd3; |
radovan | 0:5c88ad74f3fe | 544 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 545 | spravaVS[6]=CRC_INFDd2; |
radovan | 0:5c88ad74f3fe | 546 | } else { |
radovan | 0:5c88ad74f3fe | 547 | spravaVS[6]=CRC_INFDd1; |
radovan | 0:5c88ad74f3fe | 548 | } |
radovan | 0:5c88ad74f3fe | 549 | } else {//smer pohybu hore |
radovan | 0:5c88ad74f3fe | 550 | if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 551 | spravaVS[6]=CRC_INFDu3; |
radovan | 0:5c88ad74f3fe | 552 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 553 | spravaVS[6]=CRC_INFDu2; |
radovan | 0:5c88ad74f3fe | 554 | } else if(aktualnePoschodie=='1') { |
radovan | 0:5c88ad74f3fe | 555 | spravaVS[6]=CRC_INFDu1; |
radovan | 0:5c88ad74f3fe | 556 | } else { |
radovan | 0:5c88ad74f3fe | 557 | spravaVS[6]=CRC_INFDu0; |
radovan | 0:5c88ad74f3fe | 558 | } |
radovan | 0:5c88ad74f3fe | 559 | } |
radovan | 0:5c88ad74f3fe | 560 | posli(7); |
radovan | 0:5c88ad74f3fe | 561 | } |
radovan | 0:5c88ad74f3fe | 562 | |
radovan | 0:5c88ad74f3fe | 563 | } else if(data==0x02&&poziadavky[0]!=jedinec) {//blizko ale nezastavujem |
radovan | 0:5c88ad74f3fe | 564 | |
radovan | 0:5c88ad74f3fe | 565 | if(jedinec==0x04) { |
radovan | 0:5c88ad74f3fe | 566 | aktualnePoschodie='4'; |
radovan | 0:5c88ad74f3fe | 567 | } else if(jedinec==0x03) { |
radovan | 0:5c88ad74f3fe | 568 | aktualnePoschodie='3'; |
radovan | 0:5c88ad74f3fe | 569 | } else if(jedinec==0x02) { |
radovan | 0:5c88ad74f3fe | 570 | aktualnePoschodie='2'; |
radovan | 0:5c88ad74f3fe | 571 | } else if(jedinec==0x01) { |
radovan | 0:5c88ad74f3fe | 572 | aktualnePoschodie='1'; |
radovan | 0:5c88ad74f3fe | 573 | } else { |
radovan | 0:5c88ad74f3fe | 574 | aktualnePoschodie='P'; |
radovan | 0:5c88ad74f3fe | 575 | } |
radovan | 0:5c88ad74f3fe | 576 | |
radovan | 0:5c88ad74f3fe | 577 | //zobrazenie pohybu |
radovan | 0:5c88ad74f3fe | 578 | spravaVS[1]=INFORMATION_DISPLAY;//prijimatel |
radovan | 0:5c88ad74f3fe | 579 | spravaVS[3]=2;//pocet dat |
radovan | 0:5c88ad74f3fe | 580 | spravaVS[4]=smerPohybu;//data |
radovan | 0:5c88ad74f3fe | 581 | spravaVS[5]=aktualnePoschodie;//data |
radovan | 0:5c88ad74f3fe | 582 | |
radovan | 0:5c88ad74f3fe | 583 | if(smerPohybu==0x02) { //smer pohybu dole |
radovan | 0:5c88ad74f3fe | 584 | if(aktualnePoschodie=='4') { |
radovan | 0:5c88ad74f3fe | 585 | spravaVS[6]=CRC_INFDd4; |
radovan | 0:5c88ad74f3fe | 586 | } else if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 587 | spravaVS[6]=CRC_INFDd3; |
radovan | 0:5c88ad74f3fe | 588 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 589 | spravaVS[6]=CRC_INFDd2; |
radovan | 0:5c88ad74f3fe | 590 | } else { |
radovan | 0:5c88ad74f3fe | 591 | spravaVS[6]=CRC_INFDd1; |
radovan | 0:5c88ad74f3fe | 592 | } |
radovan | 0:5c88ad74f3fe | 593 | } else {//smer pohybu hore |
radovan | 0:5c88ad74f3fe | 594 | if(aktualnePoschodie=='3') { |
radovan | 0:5c88ad74f3fe | 595 | spravaVS[6]=CRC_INFDu3; |
radovan | 0:5c88ad74f3fe | 596 | } else if(aktualnePoschodie=='2') { |
radovan | 0:5c88ad74f3fe | 597 | spravaVS[6]=CRC_INFDu2; |
radovan | 0:5c88ad74f3fe | 598 | } else if(aktualnePoschodie=='1') { |
radovan | 0:5c88ad74f3fe | 599 | spravaVS[6]=CRC_INFDu1; |
radovan | 0:5c88ad74f3fe | 600 | } else { |
radovan | 0:5c88ad74f3fe | 601 | spravaVS[6]=CRC_INFDu0; |
radovan | 0:5c88ad74f3fe | 602 | } |
radovan | 0:5c88ad74f3fe | 603 | } |
radovan | 0:5c88ad74f3fe | 604 | posli(7); |
radovan | 0:5c88ad74f3fe | 605 | } |
radovan | 0:5c88ad74f3fe | 606 | }//LIMIT_SWITCH_FAMILY |
radovan | 0:5c88ad74f3fe | 607 | }//sprava dostatocne velka |
radovan | 0:5c88ad74f3fe | 608 | if((timerReset.read_ms()-cas)>=600) { |
radovan | 0:5c88ad74f3fe | 609 | watchdogReset(); |
radovan | 0:5c88ad74f3fe | 610 | cas=timerReset.read_ms(); |
radovan | 0:5c88ad74f3fe | 611 | } |
radovan | 0:5c88ad74f3fe | 612 | }//while true |
radovan | 0:5c88ad74f3fe | 613 | }//main |
radovan | 0:5c88ad74f3fe | 614 | /** |
radovan | 0:5c88ad74f3fe | 615 | *void posli() |
radovan | 0:5c88ad74f3fe | 616 | *posle spravu z pola spravaVS pokial nedostane potvrdzujucu odpoved do 200ms posiela spravu znova |
radovan | 0:5c88ad74f3fe | 617 | *@param <pokial> pocet znakov na odoslanie |
radovan | 0:5c88ad74f3fe | 618 | */ |
radovan | 0:5c88ad74f3fe | 619 | void posli(int pokial) |
radovan | 0:5c88ad74f3fe | 620 | { |
radovan | 0:5c88ad74f3fe | 621 | Timer timer; |
radovan | 0:5c88ad74f3fe | 622 | int potvrdenie=0; |
radovan | 0:5c88ad74f3fe | 623 | timer.start(); |
radovan | 0:5c88ad74f3fe | 624 | while(potvrdenie==0) { |
radovan | 0:5c88ad74f3fe | 625 | //poslem spravu |
radovan | 0:5c88ad74f3fe | 626 | for(int ind=0; ind<pokial; ind++) { |
radovan | 0:5c88ad74f3fe | 627 | while(pc.writable()==0) {} |
radovan | 0:5c88ad74f3fe | 628 | pc.putc(spravaVS[ind]); |
radovan | 0:5c88ad74f3fe | 629 | } |
radovan | 0:5c88ad74f3fe | 630 | int pocdat=0; |
radovan | 0:5c88ad74f3fe | 631 | int begin=timer.read_ms(); |
radovan | 0:5c88ad74f3fe | 632 | while((timer.read_ms()-begin)<200) { |
radovan | 0:5c88ad74f3fe | 633 | if(zb<=kb) { |
radovan | 0:5c88ad74f3fe | 634 | pocdat=kb-zb; |
radovan | 0:5c88ad74f3fe | 635 | } else { |
radovan | 0:5c88ad74f3fe | 636 | pocdat=200-zb+kb; |
radovan | 0:5c88ad74f3fe | 637 | } |
radovan | 0:5c88ad74f3fe | 638 | char prerus=0x00; |
radovan | 0:5c88ad74f3fe | 639 | for(int t=0; t<=pocdat-5; t++) { |
radovan | 0:5c88ad74f3fe | 640 | if(bufpole[(zb+t)%200]==0xA0&&bufpole[(zb+t+3)%200]==0x00) { |
radovan | 0:5c88ad74f3fe | 641 | int k=(zb+t-1)%200;//index dat od ktoreho treba zacat presuvat |
radovan | 0:5c88ad74f3fe | 642 | if(t==0) { |
radovan | 0:5c88ad74f3fe | 643 | zb=(zb+5)%200; |
radovan | 0:5c88ad74f3fe | 644 | prerus=0x01; |
radovan | 0:5c88ad74f3fe | 645 | break; |
radovan | 0:5c88ad74f3fe | 646 | } |
radovan | 0:5c88ad74f3fe | 647 | while(true) { |
radovan | 0:5c88ad74f3fe | 648 | bufpole[(k+5)%200]=bufpole[k]; |
radovan | 0:5c88ad74f3fe | 649 | if(k==zb) { |
radovan | 0:5c88ad74f3fe | 650 | zb=(zb+5)%200; |
radovan | 0:5c88ad74f3fe | 651 | break; |
radovan | 0:5c88ad74f3fe | 652 | } |
radovan | 0:5c88ad74f3fe | 653 | k--; |
radovan | 0:5c88ad74f3fe | 654 | if(k<0) { |
radovan | 0:5c88ad74f3fe | 655 | k=199; |
radovan | 0:5c88ad74f3fe | 656 | } |
radovan | 0:5c88ad74f3fe | 657 | }//while |
radovan | 0:5c88ad74f3fe | 658 | prerus=0x01; |
radovan | 0:5c88ad74f3fe | 659 | break; |
radovan | 0:5c88ad74f3fe | 660 | } //if |
radovan | 0:5c88ad74f3fe | 661 | }//for |
radovan | 0:5c88ad74f3fe | 662 | if(prerus==0x01) { |
radovan | 0:5c88ad74f3fe | 663 | potvrdenie=1; |
radovan | 0:5c88ad74f3fe | 664 | break; |
radovan | 0:5c88ad74f3fe | 665 | } |
radovan | 0:5c88ad74f3fe | 666 | }//while timer |
radovan | 0:5c88ad74f3fe | 667 | }//while potvrdenie==0 |
radovan | 0:5c88ad74f3fe | 668 | timer.stop(); |
radovan | 0:5c88ad74f3fe | 669 | timer.reset(); |
radovan | 0:5c88ad74f3fe | 670 | |
radovan | 0:5c88ad74f3fe | 671 | }//koniec posli |
radovan | 0:5c88ad74f3fe | 672 | /* |
radovan | 0:5c88ad74f3fe | 673 | *void watchdogReset() |
radovan | 0:5c88ad74f3fe | 674 | *psole spravu pre resetovanie watchdogu caka na potvrdenie |
radovan | 0:5c88ad74f3fe | 675 | */ |
radovan | 0:5c88ad74f3fe | 676 | void watchdogReset() |
radovan | 0:5c88ad74f3fe | 677 | { |
radovan | 0:5c88ad74f3fe | 678 | spravaVS[1]=WATCHDOG_TIMER;//prijimatel |
radovan | 0:5c88ad74f3fe | 679 | spravaVS[3]=1;//pocet dat |
radovan | 0:5c88ad74f3fe | 680 | spravaVS[4]=0x05;//data |
radovan | 0:5c88ad74f3fe | 681 | spravaVS[5]=CRC_WATCHDOG;//data |
radovan | 0:5c88ad74f3fe | 682 | posli(6); |
radovan | 0:5c88ad74f3fe | 683 | } |