You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
2.6 KiB
145 lines
2.6 KiB
#include <common.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "utils/usart.h"
|
|
#include "utils/timebase.h"
|
|
#include "utils/debounce.h"
|
|
#include "utils/str_utils.h"
|
|
|
|
#include "init.h"
|
|
#include "blink.h"
|
|
#include "capture.h"
|
|
|
|
// Gate state
|
|
static bool gate_closed = false;
|
|
static uint32_t gate_cnt = 0;
|
|
|
|
|
|
/** IRQ */
|
|
void USART2_IRQHandler(void)
|
|
{
|
|
// RXIE enables also ORE - must handle ORE.
|
|
if (USART2_SR & USART_SR_ORE) {
|
|
USART2_SR &= ~USART_SR_ORE;
|
|
}
|
|
|
|
if (USART2_SR & USART_SR_RXNE) {
|
|
blue_blink();
|
|
|
|
// handle incoming char.
|
|
char c = usart_rx_char(USART2);
|
|
|
|
switch (c) {
|
|
case 'g': // nulovat pocitadlo preruseni
|
|
gate_cnt = 0;
|
|
break;
|
|
|
|
case 'm': // zvysit DAC hodnotu
|
|
if (DAC_DHR12R1 < 4095) DAC_DHR12R1 += 117;
|
|
break;
|
|
|
|
case 'n': // snizit DAC hodnotu
|
|
if (DAC_DHR12R1 > 0) DAC_DHR12R1 -= 117;
|
|
break;
|
|
|
|
case 'b': // zvysit PWM stridu
|
|
if (TIM3_CCR1 < 1000) TIM3_CCR1 += 50;
|
|
break;
|
|
|
|
case 'd': // snizit PWM stridu
|
|
if (TIM3_CCR1 > 0) TIM3_CCR1 -= 50;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
USART2_SR ^= USART_SR_RXNE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Gate close handler
|
|
void gate_close(void)
|
|
{
|
|
gate_closed = 1;
|
|
gate_cnt++;
|
|
}
|
|
|
|
// Gate open handler
|
|
void gate_open(void)
|
|
{
|
|
gate_closed = 0;
|
|
}
|
|
|
|
|
|
/** Init peripherals; Called by startup script, before main() */
|
|
void SystemInit(void)
|
|
{
|
|
init_clock();
|
|
init_systick();
|
|
init_gpios();
|
|
init_usart();
|
|
init_adc();
|
|
init_dac();
|
|
init_pwm1();
|
|
|
|
register_periodic_task(green_toggle, 1000); // indicate running state
|
|
|
|
register_debounced_pin(GPIOB, 11, gate_close, gate_open); // gate handler
|
|
}
|
|
|
|
|
|
|
|
int main(void)
|
|
{
|
|
char buf[200];
|
|
|
|
usart_tx_string(USART2, "DAQ system started.\n");
|
|
|
|
while (1) {
|
|
delay_ms(200);
|
|
|
|
float cels = measure_temp();
|
|
float angle = measure_angle();
|
|
float resis = measure_resistance();
|
|
float expos = measure_exposure();
|
|
|
|
buf_reset(buf);
|
|
buf_append_str(buf, "T ");
|
|
buf_append_flt(buf, cels, 1);
|
|
buf_append_str(buf, "°C | ");
|
|
|
|
buf_append_str(buf, "An ");
|
|
buf_append_flt(buf, angle, 1);
|
|
buf_append_str(buf, "° | ");
|
|
|
|
buf_append_str(buf, "R ");
|
|
buf_append_flt(buf, resis, 1);
|
|
buf_append_str(buf, " | ");
|
|
|
|
buf_append_str(buf, "L ");
|
|
buf_append_flt(buf, expos, 1);
|
|
buf_append_str(buf, "% | ");
|
|
|
|
buf_append_str(buf, "G ");
|
|
buf_append_str(buf, gate_closed ? "1" : "0");
|
|
buf_append_str(buf, ", #");
|
|
buf_append_int(buf, gate_cnt);
|
|
buf_append_str(buf, " | ");
|
|
|
|
buf_append_str(buf, "DA ");
|
|
buf_append_int(buf, DAC_DHR12R1);
|
|
buf_append_str(buf, " | ");
|
|
|
|
buf_append_str(buf, "PWM ");
|
|
buf_append_int(buf, TIM3_CCR1);
|
|
|
|
buf_append_str(buf, "\n");
|
|
|
|
usart_tx_string(USART2, buf);
|
|
}
|
|
}
|
|
|