o: ActiveSupport::Cache::Entry :@compressedF:@value"D±">±
| main.c | ||
|---|---|---|
| 21 | 21 |
#include "gpt.h" |
| 22 | 22 |
#include <string.h> |
| 23 | 23 |
#include "keil/GPS_dekoduj.h" |
| 24 |
#include <../../os/various/chprintf.h> |
|
| 25 |
#include <chstreams.h.> |
|
| 24 | 26 |
|
| 25 | 27 |
/*MAX delka prikazu, ktery uzivatel muze zadat*/ |
| 26 | 28 |
#define MAX_DELKA_PRIKAZU 10 |
| 27 | 29 |
|
| 28 | 30 |
/*Velikost GPS bufferu*/ |
| 29 | 31 |
#define GPS_BUFFER 500 |
| 32 |
#define PWM_PERIODA_NORMAL 20000 |
|
| 33 |
#define PWM_SIRKA_NORMAL PWM_PERIODA_NORMAL/2 |
|
| 30 | 34 |
|
| 31 | 35 |
extern NMEA_GPGGA GPGGA_informace; |
| 32 | 36 |
Thread *tp_odpal = NULL; |
| 33 | 37 |
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"; |
| 34 | 38 |
|
| 39 |
static PWMConfig pwmcfg = {
|
|
| 40 |
10000, /* 10kHz PWM clock frequency. */ |
|
| 41 |
PWM_PERIODA_NORMAL, /* PWM period 1S (in ticks). */ |
|
| 42 |
NULL, |
|
| 43 |
{
|
|
| 44 |
{PWM_OUTPUT_ACTIVE_HIGH, NULL},
|
|
| 45 |
{PWM_OUTPUT_ACTIVE_HIGH, NULL},
|
|
| 46 |
{PWM_OUTPUT_DISABLED, NULL},
|
|
| 47 |
{PWM_OUTPUT_DISABLED, NULL}
|
|
| 48 |
}, |
|
| 49 |
/* HW dependent part.*/ |
|
| 50 |
0 |
|
| 51 |
}; |
|
| 52 |
|
|
| 35 | 53 |
/* |
| 36 | 54 |
* Konfigurace USART2 |
| 37 | 55 |
*/ |
| ... | ... | |
| 48 | 66 |
0 |
| 49 | 67 |
}; |
| 50 | 68 |
|
| 51 |
/* |
|
| 52 |
* GPT2 callback. |
|
| 53 |
*/ |
|
| 69 |
|
|
| 70 |
/* |
|
| 71 |
* GPT2 callback. |
|
| 72 |
*/ |
|
| 54 | 73 |
static void gpt2cb(GPTDriver *gptp) |
| 55 | 74 |
{
|
| 56 | 75 |
(void)gptp; |
| 57 |
palTogglePad(GPIOB, GPIOB_LED4); |
|
| 58 | 76 |
/* Wakes up the thread.*/ |
| 59 | 77 |
chSysLockFromIsr(); |
| 60 | 78 |
if (tp_odpal != NULL) {
|
| ... | ... | |
| 65 | 83 |
chSysUnlockFromIsr(); |
| 66 | 84 |
} |
| 67 | 85 |
|
| 86 |
|
|
| 68 | 87 |
/* |
| 69 | 88 |
*Konfigurace casovace 2 |
| 70 | 89 |
*/ |
| ... | ... | |
| 82 | 101 |
static msg_t Thread_odpal(void *arg) {
|
| 83 | 102 |
uint8_t stav = 0; // rika, ve ktere fazi je odpalovani |
| 84 | 103 |
uint8_t odpal_povolen = 0; |
| 85 |
uint8_t msg_zrusen[] = "Odpal zrusen uzivatelem.\r\n"; |
|
| 86 | 104 |
uint8_t odpal_pomocna = 0; |
| 105 |
uint8_t pocet_opakovani = 1; |
|
| 106 |
uint16_t perioda_casovace = 500; |
|
| 87 | 107 |
(void)arg; |
| 88 | 108 |
chRegSetThreadName("Odpal_vlakno");
|
| 89 | 109 |
|
| ... | ... | |
| 103 | 123 |
{
|
| 104 | 124 |
odpal_povolen = 1; |
| 105 | 125 |
odpal_pomocna++; |
| 126 |
stav = 0; |
|
| 127 |
pocet_opakovani = 1; |
|
| 106 | 128 |
} |
| 107 |
else if (msg == 2) //Pokud se ma odpal zrusit v prubehu |
|
| 129 |
else if (msg == 2) //Pokud se ma odpal zrusit v prubehu vypousteni
|
|
| 108 | 130 |
{
|
| 109 | 131 |
/* |
| 110 | 132 |
* Pro jistotu se vypnou vsechny vystupy pri zruseni odpalu |
| ... | ... | |
| 114 | 136 |
palClearPad(GPIOB, GPIOB_PIN12); |
| 115 | 137 |
palClearPad(GPIOB, GPIOB_PIN13); |
| 116 | 138 |
|
| 139 |
if(odpal_povolen == 1) |
|
| 140 |
chprintf((BaseSequentialStream *)&SD1,"\r\nOdpal zrusen uzivatelem.\r\n"); |
|
| 141 |
else |
|
| 142 |
chprintf((BaseSequentialStream *)&SD1,"Odpal nebyl aktivovan.\r\n"); |
|
| 143 |
|
|
| 117 | 144 |
odpal_povolen = 0; |
| 118 | 145 |
odpal_pomocna = 0; |
| 119 | 146 |
stav = 0; |
| 120 |
sdWrite(&SD1, msg_zrusen, sizeof(msg_zrusen)/sizeof(uint8_t));
|
|
| 147 |
pocet_opakovani = 1;
|
|
| 121 | 148 |
} |
| 122 | 149 |
else if (msg == 50 && odpal_povolen == 1) // preruseni od GPT |
| 123 | 150 |
{
|
| ... | ... | |
| 129 | 156 |
switch (stav) |
| 130 | 157 |
{
|
| 131 | 158 |
case 0: |
| 132 |
sdWrite(&SD1,"Vypousteni zahajeno!\r\n",sizeof("Vypousteni zahajeno!\r\n")/sizeof(char));
|
|
| 133 |
sdWrite(&SD1,"(1/4)\tVentil otevren -> nafukovani balonu\r\n",sizeof("1/4)\tVentil otevren -> nafukovani balonu\r\n")/sizeof(char));
|
|
| 134 |
palSetPad(GPIOB, GPIOB_PIN10); |
|
| 135 |
gptStartOneShot(&GPTD2,10000); |
|
| 159 |
if (pocet_opakovani == 1) |
|
| 160 |
chprintf((BaseSequentialStream *)&SD1,"Vypousteni zahajeno!\r\n"); |
|
| 161 |
|
|
| 162 |
if (pocet_opakovani <= 20) |
|
| 163 |
{
|
|
| 164 |
//sdWrite(&SD1,,sizeof("1/4)\tVentil otevren -> nafukovani balonu\r\n")/sizeof(char));
|
|
| 165 |
chprintf((BaseSequentialStream *)&SD1,"(1/4)\tVentil otevren -> nafukovani balonu %d%%\r",pocet_opakovani*5); |
|
| 166 |
palSetPad(GPIOB, GPIOB_PIN10); |
|
| 167 |
gptStartOneShot(&GPTD2,perioda_casovace); |
|
| 168 |
pocet_opakovani++; |
|
| 169 |
if (pocet_opakovani == 21) |
|
| 170 |
{
|
|
| 171 |
chprintf((BaseSequentialStream *)&SD1,"\r\n"); |
|
| 172 |
stav++; |
|
| 173 |
pocet_opakovani = 1; |
|
| 174 |
} |
|
| 175 |
} |
|
| 136 | 176 |
break; |
| 137 | 177 |
case 1: |
| 138 |
palClearPad(GPIOB, GPIOB_PIN10); |
|
| 139 |
palSetPad(GPIOB, GPIOB_PIN11); |
|
| 140 |
sdWrite(&SD1,"(2/4)\tPrepalovani lisu...\r\n",sizeof("(2/4)\tPrepalovani lisu...\r\n")/sizeof(char));
|
|
| 141 |
gptStartOneShot(&GPTD2,5000); |
|
| 178 |
if (pocet_opakovani <= 10) |
|
| 179 |
{
|
|
| 180 |
palClearPad(GPIOB, GPIOB_PIN10); |
|
| 181 |
palSetPad(GPIOB, GPIOB_PIN11); |
|
| 182 |
chprintf((BaseSequentialStream *)&SD1,"(2/4)\tPrepalovani lisu... %d%%\r",pocet_opakovani*10); |
|
| 183 |
gptStartOneShot(&GPTD2,perioda_casovace); |
|
| 184 |
pocet_opakovani++; |
|
| 185 |
if (pocet_opakovani == 11) |
|
| 186 |
{
|
|
| 187 |
chprintf((BaseSequentialStream *)&SD1,"\r\n"); |
|
| 188 |
stav++; |
|
| 189 |
pocet_opakovani = 1; |
|
| 190 |
} |
|
| 191 |
} |
|
| 142 | 192 |
break; |
| 143 | 193 |
case 2: |
| 144 |
palClearPad(GPIOB, GPIOB_PIN11); |
|
| 145 |
palSetPad(GPIOB, GPIOB_PIN12); |
|
| 146 |
sdWrite(&SD1,"(3/4)\tZatavovani balonu...\r\n",sizeof("(3/4)\tZatavovani balonu...\r\n")/sizeof(char));
|
|
| 147 |
gptStartOneShot(&GPTD2,5000); |
|
| 194 |
if (pocet_opakovani <= 10) |
|
| 195 |
{
|
|
| 196 |
palClearPad(GPIOB, GPIOB_PIN11); |
|
| 197 |
palSetPad(GPIOB, GPIOB_PIN12); |
|
| 198 |
chprintf((BaseSequentialStream *)&SD1,"(3/4)\tZatavovani balonu... %d%%\r",pocet_opakovani*10); |
|
| 199 |
gptStartOneShot(&GPTD2,perioda_casovace); |
|
| 200 |
pocet_opakovani++; |
|
| 201 |
if (pocet_opakovani == 11) |
|
| 202 |
{
|
|
| 203 |
chprintf((BaseSequentialStream *)&SD1,"\r\n"); |
|
| 204 |
stav++; |
|
| 205 |
pocet_opakovani = 1; |
|
| 206 |
} |
|
| 207 |
} |
|
| 148 | 208 |
break; |
| 149 | 209 |
case 3: |
| 150 |
palClearPad(GPIOB, GPIOB_PIN12); |
|
| 151 |
palSetPad(GPIOB, GPIOB_PIN13); |
|
| 152 |
sdWrite(&SD1,"(4/4)\tOtevirani vika...\r\n",sizeof("(4/4)\tOtevirani vika...\r\n")/sizeof(char));
|
|
| 153 |
gptStartOneShot(&GPTD2,3000); |
|
| 210 |
if (pocet_opakovani <= 20) |
|
| 211 |
{
|
|
| 212 |
palClearPad(GPIOB, GPIOB_PIN12); |
|
| 213 |
palSetPad(GPIOB, GPIOB_PIN13); |
|
| 214 |
chprintf((BaseSequentialStream *)&SD1,"(4/4)\tOtevirani vika... %d%%\r",pocet_opakovani*5); |
|
| 215 |
gptStartOneShot(&GPTD2,perioda_casovace); |
|
| 216 |
pocet_opakovani++; |
|
| 217 |
if (pocet_opakovani == 21) |
|
| 218 |
{
|
|
| 219 |
chprintf((BaseSequentialStream *)&SD1,"\r\n"); |
|
| 220 |
stav++; |
|
| 221 |
pocet_opakovani = 1; |
|
| 222 |
} |
|
| 223 |
} |
|
| 154 | 224 |
break; |
| 155 | 225 |
case 4: |
| 156 | 226 |
palClearPad(GPIOB, GPIOB_PIN13); |
| 157 |
sdWrite(&SD1,"Vypousteni ukonceno!\r\n",sizeof("Vypousteni ukonceno!\r\n")/sizeof(char));
|
|
| 227 |
chprintf((BaseSequentialStream *)&SD1,"Vypousteni ukonceno!\r\n");
|
|
| 158 | 228 |
odpal_povolen = 0; |
| 159 | 229 |
odpal_pomocna = 0; |
| 160 | 230 |
stav = 0; |
| ... | ... | |
| 162 | 232 |
default: |
| 163 | 233 |
break; |
| 164 | 234 |
} |
| 165 |
stav++; |
|
| 166 | 235 |
} |
| 167 | 236 |
} |
| 168 | 237 |
} |
| ... | ... | |
| 245 | 314 |
chSchReadyI(tp_odpal); |
| 246 | 315 |
tp_odpal = NULL; |
| 247 | 316 |
} |
| 248 |
chSysUnlockFromIsr();
|
|
| 249 |
palTogglePad(GPIOB, GPIOB_LED4); |
|
| 317 |
chSysUnlockFromIsr(); |
|
| 318 |
|
|
| 250 | 319 |
} |
| 251 | 320 |
else if (strcmp(prikaz,"zrus") == 0) |
| 252 | 321 |
{
|
| ... | ... | |
| 257 | 326 |
chSchReadyI(tp_odpal); |
| 258 | 327 |
tp_odpal = NULL; |
| 259 | 328 |
} |
| 260 |
chSysUnlockFromIsr();
|
|
| 329 |
chSysUnlockFromIsr(); |
|
| 261 | 330 |
} |
| 262 | 331 |
else if (strcmp(prikaz,"help") == 0) |
| 263 | 332 |
{
|
| ... | ... | |
| 265 | 334 |
} |
| 266 | 335 |
else |
| 267 | 336 |
{
|
| 268 |
uint8_t zp_neplatny[] = "Neplatny prikaz, napiste <odpal> pro zahajeni sekvence\n\r ci <zrus> pro zruseni vypousteni\n\r";
|
|
| 337 |
uint8_t zp_neplatny[] = "Neplatny prikaz!\r\n\t<odpal> pro zahajeni sekvence\n\r\t<zrus> pro zruseni vypousteni\n\r";
|
|
| 269 | 338 |
sdWrite(&SD1,zp_neplatny,sizeof(zp_neplatny)/sizeof(uint8_t)); |
| 270 | 339 |
palTogglePad(GPIOB, GPIOB_LED3); |
| 271 | 340 |
} |
| ... | ... | |
| 311 | 380 |
/* |
| 312 | 381 |
* LED na vyvojove desce |
| 313 | 382 |
*/ |
| 314 |
palSetPadMode(GPIOB, GPIOB_LED4, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 315 | 383 |
palSetPadMode(GPIOB, GPIOB_LED3, PAL_MODE_OUTPUT_PUSHPULL); |
| 316 | 384 |
|
| 317 |
/* |
|
| 318 |
* Porty pro vypousteci sekvenci |
|
| 319 |
*/ |
|
| 320 |
palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 321 |
palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 322 |
palSetPadMode(GPIOB, 12, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 323 |
palSetPadMode(GPIOB, 13, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 385 |
/* |
|
| 386 |
* Initializes the PWM driver 4, routes the TIM4 outputs to the board LEDs. |
|
| 387 |
*/ |
|
| 388 |
pwmStart(&PWMD4, &pwmcfg); |
|
| 389 |
palSetPadMode(GPIOB, GPIOB_LED4, PAL_MODE_ALTERNATE(2)); |
|
| 390 |
pwmEnableChannel(&PWMD4,0,PWM_SIRKA_NORMAL); |
|
| 391 |
|
|
| 392 |
|
|
| 324 | 393 |
/* |
| 325 |
* Aktivuje timer2 a prejde tak do aktivniho stavu
|
|
| 394 |
* Porty pro vypousteci sekvenci
|
|
| 326 | 395 |
*/ |
| 327 |
gptStart(&GPTD2,&gpt2cfg); |
|
| 328 |
|
|
| 329 |
|
|
| 396 |
palSetPadMode(GPIOB, GPIOB_PIN10, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 397 |
palClearPad(GPIOB, GPIOB_PIN10); |
|
| 398 |
palSetPadMode(GPIOB, GPIOB_PIN11, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 399 |
palClearPad(GPIOB, GPIOB_PIN11); |
|
| 400 |
palSetPadMode(GPIOB, GPIOB_PIN12, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 401 |
palClearPad(GPIOB, GPIOB_PIN12); |
|
| 402 |
palSetPadMode(GPIOB, GPIOB_PIN13, PAL_MODE_OUTPUT_PUSHPULL); |
|
| 403 |
palClearPad(GPIOB, GPIOB_PIN13); |
|
| 404 |
/* |
|
| 405 |
* Aktivuje timer2 a timer3 prejde tak do aktivniho stavu |
|
| 406 |
*/ |
|
| 407 |
gptStart(&GPTD2,&gpt2cfg); |
|
| 330 | 408 |
/* |
| 331 | 409 |
* Vytvori vlakno pro prijem dat z GPS modulu |
| 332 | 410 |
*/ |
| ... | ... | |
| 344 | 422 |
* pressed the test procedure is launched with output on the serial |
| 345 | 423 |
* driver 1. |
| 346 | 424 |
*/ |
| 425 |
|
|
| 347 | 426 |
while (TRUE) {
|
| 427 |
|
|
| 348 | 428 |
sdRead(&SD1,znaky,1); |
| 349 | 429 |
/*Kdyz uzivatel stiskne enter -> dekoduj a vykonej prikaz, nebo pokud je prikaz delsi, nez by mel byt, |
| 350 | 430 |
*prestane ukladat a upozorni uzivatele |