
Semestrálna práca VÝTAH Roman Ciesarík
Diff: main.cpp
- Revision:
- 1:6c18e74f3ff4
- Parent:
- 0:40602b91b27f
- Child:
- 2:84b5e49b4549
--- a/main.cpp Thu Dec 07 10:39:01 2017 +0000 +++ b/main.cpp Mon Dec 11 14:24:45 2017 +0000 @@ -1,14 +1,15 @@ #include "mbed.h" +#include "headre.h" #define DISPLAY 0x30 // DATA smer 0x01-> UP 0x02-> DOWN , text (string) #define TERMINAL 0xD0 // Vypise vsetko - + #define VYTAH_BUTTON_P 0xb0 // ┌-----------┐ #define VYTAH_BUTTON_1 0xb1 // | DATA 0xFF | #define VYTAH_BUTTON_2 0xb2 // |-----------| #define VYTAH_BUTTON_3 0xb3 // |-----------| #define VYTAH_BUTTON_4 0xb4 // |-----------| - + #define POSCHODIE_BUTTON_P 0xc0 // |-----------| #define POSCHODIE_BUTTON_1 0xc1 // |-----------| #define POSCHODIE_BUTTON_2 0xc2 // |-----------| @@ -39,12 +40,12 @@ #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); +Serial pc(USBTX, USBRX, 57600); int i; +unsigned int velkost; char crc=0x00; -char crc8table[256] = - { +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, @@ -61,22 +62,227 @@ 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)]; -char demo[]={1,2,3,4,5,6}; +char demo[]= {1,2,3,4,5,6}; +char prijemSpravy[15]; + + int main() { - pc.printf("Start!\r\n"); - pc.printf("velkost! %d\r\n",sizeof(demo)); - - for (i=0;i<sizeof(demo);i++) + + for (int j=0;j<4;j++) + { + while(true) + { + if(pc.readable()==1) + { + prijemSpravy[j]=pc.getc; + break; + } + } + } + + int pom= prijemSpravy[3] + 1; + + for (int j=0;j<pom;j++) + { + while(true) { - // crc^ demo[i]= new crc hodnota v tabulke crc8table[] - //protokol simulatoru [1] 3tart bit adresa prijemcu adresa odosialetela , velkost dat, data, crc - crc=crc8table[crc^demo[i]]; - pc.printf(" %d .crc: %x\r\n",i,crc); + if(pc.readable()==1) + { + prijemSpravy[j+4]=pc.getc; + break; + } + } + } + + switch(prijemSpravy[2]) + { + case 0xb4: /* vytah tla4idlo 4 poschodie */ + + break; + + case 0xb3: /* vytah tla4idlo 3 poschodie */ + + break; + + case 0xb2: /* vytah tla4idlo 2 poschodie */ + + break; + + case 0xb1: /* vytah tla4idlo 1 poschodie */ + + break; + + case 0xb0: /* vytah tla4idlo pr9zemie */ + + break; + + case 0xc4: /* chodba tla4idlo 4 poschodie */ + + break; + + case 0xc3: /* chodba tla4idlo 3 poschodie */ + + break; + + case 0xc2: /* chodba tla4idlo 2 poschodie */ + + break; + + case 0xc1: /* chodba tla4idlo 1 poschodie */ + + break; + + case 0xc0: /* chodba tla4idlo pr9zemie */ + + break; + + + + + case 0xe4: /* info pre odomknutie 4 poschodie */ + + break; + + case 0xe3: /* info pre odomknutie 3 poschodie */ + + break; + + case 0xe2: /* info pre odomknutie 2 poschodie */ + + break; + + case 0xe1: /* info pre odomknutie 1 poschodie */ + + break; + + case 0xe0: /* info pre odomknutie pr9zemie */ + + break; + + + + + + case 0xf: /* zachranna brzda */ + + break; + + case 0xfe: /* watchdog */ + + break; + } + + //poslemSpravu(TERMINAL,0xCC, 6, demo); + /* zamkni(); + wait(1); + odomkni(); + wait(1); + zamkni(); + wait(1); + dole(); + wait(1); + dole(); + dole(); + wait(2); + stop(); + + wait(5); + odomkni(); + wait(1); + zamkni(); + hore(); + wait(2); + stop(); + wait(5); + odomkni(); */ + +} +void zamkni() +{ + char DATA[]= {0x01}; + poslemSpravu(VYTAH,0xcc,sizeof(DATA),DATA); +} + +void odomkni() +{ + char DATA[]= {0x00}; + poslemSpravu(VYTAH,0xcc,sizeof(DATA),DATA); +} + +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 poslemSpravu(char adrRX, char adrTX, int velkost, char DATA[] ) +{ + crc=0x00; + char odosli[5+velkost]; + odosli[0]=0xA0; + odosli[1]=adrRX; + odosli[2]=adrTX; + odosli[3]=velkost; + + crc=crc8table[crc^adrRX]; + crc=crc8table[crc^adrTX]; + + for (i=0; i<velkost; i++) { + odosli[4+i]=DATA[i]; + } + + for (i=0; i<velkost; i++) { + crc=crc8table[crc^DATA[i]]; + } + + odosli[velkost+4]=crc; + + for (i=0; i<velkost+5; i++) { + pc.putc(odosli[i]); + } + +} + +void kontrola() +{ + char kontrola[4]; + + for(int i=0;i<5;i++) + { + while(true) + { + if(pc.readable()==1) + { + kontola[i]=pc.getc(); + break; + } + } } - + + if(kontrola[0]!=0xA0&&kontrola[1]!=0x00&&kontrola[2]!=0x00&&kontrola[3]!=0x00&&kontrola[4]!=0x00) + { + poslemSpravu(); + } } \ No newline at end of file