/Designs/Measuring_instruments/ABL01A/SW/Pozemni stanice/Zkouska - STM32L152-DISCOVERY/main.c
21,6 → 21,8
#include "gpt.h"
#include <string.h>
#include "keil/GPS_dekoduj.h"
#include <../../os/various/chprintf.h>
#include <chstreams.h.>
 
/*MAX delka prikazu, ktery uzivatel muze zadat*/
#define MAX_DELKA_PRIKAZU 10
27,11 → 29,27
 
/*Velikost GPS bufferu*/
#define GPS_BUFFER 500
#define PWM_PERIODA_NORMAL 20000
#define PWM_SIRKA_NORMAL PWM_PERIODA_NORMAL/2
 
extern NMEA_GPGGA GPGGA_informace;
Thread *tp_odpal = NULL;
uint8_t uvitaci_zprava[] = "\r\n\r\n* * * * * * * * * * * * * * * * * * * * * * * * * *\r\nVita vas Automaticky Vypoustec Meteobalonu 1.1\r\nZapojeni vyvodu:\r\n\tGPIOB10 - ventil\r\n\tGPIOB11 - lis\r\n\tGPIOB12 - zataveni balonu\r\n\tGPIOB13 - otevreni krytu\r\nPrikazy:\r\n\t<odpal> zahajeni sekvence vypousteni\n\r\t<zrus> zruseni vypousteni\n\r\t<help> napoveda\r\n* * * * * * * * * * * * * * * * * * * * * * * * * *\r\n\r\n";
 
static PWMConfig pwmcfg = {
10000, /* 10kHz PWM clock frequency. */
PWM_PERIODA_NORMAL, /* PWM period 1S (in ticks). */
NULL,
{
{PWM_OUTPUT_ACTIVE_HIGH, NULL},
{PWM_OUTPUT_ACTIVE_HIGH, NULL},
{PWM_OUTPUT_DISABLED, NULL},
{PWM_OUTPUT_DISABLED, NULL}
},
/* HW dependent part.*/
0
};
 
/*
* Konfigurace USART2
*/
48,13 → 66,13
0
};
 
/*
* GPT2 callback.
*/
 
/*
* GPT2 callback.
*/
static void gpt2cb(GPTDriver *gptp)
{
(void)gptp;
palTogglePad(GPIOB, GPIOB_LED4);
/* Wakes up the thread.*/
chSysLockFromIsr();
if (tp_odpal != NULL) {
65,6 → 83,7
chSysUnlockFromIsr();
}
 
 
/*
*Konfigurace casovace 2
*/
82,8 → 101,9
static msg_t Thread_odpal(void *arg) {
uint8_t stav = 0; // rika, ve ktere fazi je odpalovani
uint8_t odpal_povolen = 0;
uint8_t msg_zrusen[] = "Odpal zrusen uzivatelem.\r\n";
uint8_t odpal_pomocna = 0;
uint8_t pocet_opakovani = 1;
uint16_t perioda_casovace = 500;
(void)arg;
chRegSetThreadName("Odpal_vlakno");
103,8 → 123,10
{
odpal_povolen = 1;
odpal_pomocna++;
stav = 0;
pocet_opakovani = 1;
}
else if (msg == 2) //Pokud se ma odpal zrusit v prubehu
else if (msg == 2) //Pokud se ma odpal zrusit v prubehu vypousteni
{
/*
* Pro jistotu se vypnou vsechny vystupy pri zruseni odpalu
114,10 → 136,15
palClearPad(GPIOB, GPIOB_PIN12);
palClearPad(GPIOB, GPIOB_PIN13);
if(odpal_povolen == 1)
chprintf((BaseSequentialStream *)&SD1,"\r\nOdpal zrusen uzivatelem.\r\n");
else
chprintf((BaseSequentialStream *)&SD1,"Odpal nebyl aktivovan.\r\n");
odpal_povolen = 0;
odpal_pomocna = 0;
stav = 0;
sdWrite(&SD1, msg_zrusen, sizeof(msg_zrusen)/sizeof(uint8_t));
pocet_opakovani = 1;
}
else if (msg == 50 && odpal_povolen == 1) // preruseni od GPT
{
129,32 → 156,75
switch (stav)
{
case 0:
sdWrite(&SD1,"Vypousteni zahajeno!\r\n",sizeof("Vypousteni zahajeno!\r\n")/sizeof(char));
sdWrite(&SD1,"(1/4)\tVentil otevren -> nafukovani balonu\r\n",sizeof("1/4)\tVentil otevren -> nafukovani balonu\r\n")/sizeof(char));
palSetPad(GPIOB, GPIOB_PIN10);
gptStartOneShot(&GPTD2,10000);
if (pocet_opakovani == 1)
chprintf((BaseSequentialStream *)&SD1,"Vypousteni zahajeno!\r\n");
if (pocet_opakovani <= 20)
{
//sdWrite(&SD1,,sizeof("1/4)\tVentil otevren -> nafukovani balonu\r\n")/sizeof(char));
chprintf((BaseSequentialStream *)&SD1,"(1/4)\tVentil otevren -> nafukovani balonu %d%%\r",pocet_opakovani*5);
palSetPad(GPIOB, GPIOB_PIN10);
gptStartOneShot(&GPTD2,perioda_casovace);
pocet_opakovani++;
if (pocet_opakovani == 21)
{
chprintf((BaseSequentialStream *)&SD1,"\r\n");
stav++;
pocet_opakovani = 1;
}
}
break;
case 1:
palClearPad(GPIOB, GPIOB_PIN10);
palSetPad(GPIOB, GPIOB_PIN11);
sdWrite(&SD1,"(2/4)\tPrepalovani lisu...\r\n",sizeof("(2/4)\tPrepalovani lisu...\r\n")/sizeof(char));
gptStartOneShot(&GPTD2,5000);
if (pocet_opakovani <= 10)
{
palClearPad(GPIOB, GPIOB_PIN10);
palSetPad(GPIOB, GPIOB_PIN11);
chprintf((BaseSequentialStream *)&SD1,"(2/4)\tPrepalovani lisu... %d%%\r",pocet_opakovani*10);
gptStartOneShot(&GPTD2,perioda_casovace);
pocet_opakovani++;
if (pocet_opakovani == 11)
{
chprintf((BaseSequentialStream *)&SD1,"\r\n");
stav++;
pocet_opakovani = 1;
}
}
break;
case 2:
palClearPad(GPIOB, GPIOB_PIN11);
palSetPad(GPIOB, GPIOB_PIN12);
sdWrite(&SD1,"(3/4)\tZatavovani balonu...\r\n",sizeof("(3/4)\tZatavovani balonu...\r\n")/sizeof(char));
gptStartOneShot(&GPTD2,5000);
if (pocet_opakovani <= 10)
{
palClearPad(GPIOB, GPIOB_PIN11);
palSetPad(GPIOB, GPIOB_PIN12);
chprintf((BaseSequentialStream *)&SD1,"(3/4)\tZatavovani balonu... %d%%\r",pocet_opakovani*10);
gptStartOneShot(&GPTD2,perioda_casovace);
pocet_opakovani++;
if (pocet_opakovani == 11)
{
chprintf((BaseSequentialStream *)&SD1,"\r\n");
stav++;
pocet_opakovani = 1;
}
}
break;
case 3:
palClearPad(GPIOB, GPIOB_PIN12);
palSetPad(GPIOB, GPIOB_PIN13);
sdWrite(&SD1,"(4/4)\tOtevirani vika...\r\n",sizeof("(4/4)\tOtevirani vika...\r\n")/sizeof(char));
gptStartOneShot(&GPTD2,3000);
if (pocet_opakovani <= 20)
{
palClearPad(GPIOB, GPIOB_PIN12);
palSetPad(GPIOB, GPIOB_PIN13);
chprintf((BaseSequentialStream *)&SD1,"(4/4)\tOtevirani vika... %d%%\r",pocet_opakovani*5);
gptStartOneShot(&GPTD2,perioda_casovace);
pocet_opakovani++;
if (pocet_opakovani == 21)
{
chprintf((BaseSequentialStream *)&SD1,"\r\n");
stav++;
pocet_opakovani = 1;
}
}
break;
case 4:
palClearPad(GPIOB, GPIOB_PIN13);
sdWrite(&SD1,"Vypousteni ukonceno!\r\n",sizeof("Vypousteni ukonceno!\r\n")/sizeof(char));
chprintf((BaseSequentialStream *)&SD1,"Vypousteni ukonceno!\r\n");
odpal_povolen = 0;
odpal_pomocna = 0;
stav = 0;
162,7 → 232,6
default:
break;
}
stav++;
}
}
}
245,8 → 314,8
chSchReadyI(tp_odpal);
tp_odpal = NULL;
}
chSysUnlockFromIsr();
palTogglePad(GPIOB, GPIOB_LED4);
chSysUnlockFromIsr();
 
}
else if (strcmp(prikaz,"zrus") == 0)
{
257,7 → 326,7
chSchReadyI(tp_odpal);
tp_odpal = NULL;
}
chSysUnlockFromIsr();
chSysUnlockFromIsr();
}
else if (strcmp(prikaz,"help") == 0)
{
265,7 → 334,7
}
else
{
uint8_t zp_neplatny[] = "Neplatny prikaz, napiste <odpal> pro zahajeni sekvence\n\r ci <zrus> pro zruseni vypousteni\n\r";
uint8_t zp_neplatny[] = "Neplatny prikaz!\r\n\t<odpal> pro zahajeni sekvence\n\r\t<zrus> pro zruseni vypousteni\n\r";
sdWrite(&SD1,zp_neplatny,sizeof(zp_neplatny)/sizeof(uint8_t));
palTogglePad(GPIOB, GPIOB_LED3);
}
311,22 → 380,31
/*
* LED na vyvojove desce
*/
palSetPadMode(GPIOB, GPIOB_LED4, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, GPIOB_LED3, PAL_MODE_OUTPUT_PUSHPULL);
/*
* Porty pro vypousteci sekvenci
*/
palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, 12, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, 13, PAL_MODE_OUTPUT_PUSHPULL);
/*
* Initializes the PWM driver 4, routes the TIM4 outputs to the board LEDs.
*/
pwmStart(&PWMD4, &pwmcfg);
palSetPadMode(GPIOB, GPIOB_LED4, PAL_MODE_ALTERNATE(2));
pwmEnableChannel(&PWMD4,0,PWM_SIRKA_NORMAL);
 
/*
* Aktivuje timer2 a prejde tak do aktivniho stavu
* Porty pro vypousteci sekvenci
*/
gptStart(&GPTD2,&gpt2cfg);
 
 
palSetPadMode(GPIOB, GPIOB_PIN10, PAL_MODE_OUTPUT_PUSHPULL);
palClearPad(GPIOB, GPIOB_PIN10);
palSetPadMode(GPIOB, GPIOB_PIN11, PAL_MODE_OUTPUT_PUSHPULL);
palClearPad(GPIOB, GPIOB_PIN11);
palSetPadMode(GPIOB, GPIOB_PIN12, PAL_MODE_OUTPUT_PUSHPULL);
palClearPad(GPIOB, GPIOB_PIN12);
palSetPadMode(GPIOB, GPIOB_PIN13, PAL_MODE_OUTPUT_PUSHPULL);
palClearPad(GPIOB, GPIOB_PIN13);
/*
* Aktivuje timer2 a timer3 prejde tak do aktivniho stavu
*/
gptStart(&GPTD2,&gpt2cfg);
/*
* Vytvori vlakno pro prijem dat z GPS modulu
*/
344,7 → 422,9
* pressed the test procedure is launched with output on the serial
* driver 1.
*/
 
while (TRUE) {
 
sdRead(&SD1,znaky,1);
/*Kdyz uzivatel stiskne enter -> dekoduj a vykonej prikaz, nebo pokud je prikaz delsi, nez by mel byt,
*prestane ukladat a upozorni uzivatele