Benedikt Kičin
/
kicin2vytah
main.cpp
- Committer:
- kicin2
- Date:
- 2018-01-24
- Revision:
- 1:5e6b55099364
- Parent:
- 0:2574b54351ed
File content as of revision 1:5e6b55099364:
/*! * \file main.cpp * \author Benedikt Kicin * subor main.cpp je hlavny subor aplikacie, inicializacia, reset, spustenie*/ #include "mbed.h" #include "komunikacia.h" #include "vytah.h" #include "riadenie.h" #include "nastavenia.h" #include "MMA8451Q.h" /** *Hlavna funkcia riadenia celeho vytahu/programu */ int main(void) { Ticker t; //na prerusenie aby mohol watchdog posielat spravy initCommunication();//nastavenie rychlosti komunikacie pc.attach(&prijmiPaket,Serial::RxIrq); //prijimanie paketu cez prerusenie resetujSpravuWD();//obnovi watchdog pri opatovnom spusteni vypniBrzdu();//vypne ochrannu/nudzovu brzdu NVIC_SetPriority(LPTimer_IRQn, 255);//nastavenie priority, nastav tickeru najnizsiu prioritu aby vedel dostat ACK na prerusenie t.attach(&posliSpravuWD, 1.4);//kazdu 1,5s odosle spravu watchdogu (+testovane na 1,4s) //NVIC_SetPriority(PORTC_PORTD_IRQn, 255);//nastavenie priority acc.MotionDetection(&zapniBrzdu);//prerusenie ma detekciu pohybu pociatocneNastavenieDispleja();//nastavi displej na stvrte/vychodzie poschodie while(1){ rozsvietenieLED();//ak je stlacene tlacidlo rozsvieti sa ledka zmenDisplej();//zmeni hodnot na displeji if(spravnePoschodie == true){ //ked je na spravnom poschodi caka na dalsie pokyny(pociatocny stav) if(ostan == true){//ked je na spravnom poschodi vykona potrebne operacie, zastan stop();//zastavenie vytahu unsigned char vypniLedku = 16 + poschodie; unsigned char vypniLedku2 = 32 + poschodie; posliBajt(vypniLedku, 0x00);//poslanie bajtu na vypnutie ledky posliBajt(vypniLedku2, 0x00);//poslanie bajtu na vypnutie ledky2 zmenDisplejNa(0x00, 48 + poschodie);//zmeni displej na prislusne poschodie Timer t; t.start(); while (t.read() <= 3) {}//caka 3 sekundy aby dobehol motor t.stop(); odomkni();//odomknutie vytahu po 3 sek cakania - nemoze sa hybat aktPoschodie = poschodie; ostan = false; poschodie = 0xFF;//aktualizacia poschodia na ktorom som } if((poschodie != 0xFF) && (poschodie != aktPoschodie)){ //ak nie som na rovnakom poschodi ako sa vytah prave nachadza chodNaPoschodie(poschodie);//pojde na prislusne poschodie zmenDisplejNa(smer, 48 + aktPoschodie);//nastavi displej spravnePoschodie = false;//vyskoci z hlavnej podmienky kym nedojde na spravne poschodie } } } }