Sending sms 2 times a day, tested version
This commit is contained in:
parent
93b45b8444
commit
a1b2ad3ab4
67
main.c
67
main.c
@ -6,6 +6,13 @@
|
|||||||
#define SMS_END "\032\n"
|
#define SMS_END "\032\n"
|
||||||
#define SIM800_DELAY_TIME 100
|
#define SIM800_DELAY_TIME 100
|
||||||
|
|
||||||
|
#define MEASUREMENTS 6
|
||||||
|
|
||||||
|
uint8_t sensor_measurements = 0;
|
||||||
|
char systick_execution_enable = 0;
|
||||||
|
uint16_t sensor_1[MEASUREMENTS];
|
||||||
|
uint16_t sensor_2[MEASUREMENTS];
|
||||||
|
|
||||||
static volatile uint8_t timer0_time;
|
static volatile uint8_t timer0_time;
|
||||||
ISR(TIMER0_OVF_vect) {
|
ISR(TIMER0_OVF_vect) {
|
||||||
timer0_time++;
|
timer0_time++;
|
||||||
@ -156,16 +163,31 @@ void sim800_send_telemetry() {
|
|||||||
// sprintf(buff, "F1=%d F2=%d\033\n", sensor_1, sensor_2);
|
// sprintf(buff, "F1=%d F2=%d\033\n", sensor_1, sensor_2);
|
||||||
|
|
||||||
_delay_ms(SIM800_DELAY_TIME);
|
_delay_ms(SIM800_DELAY_TIME);
|
||||||
|
for (uint8_t i = 0; i < sensor_measurements; i++) {
|
||||||
|
buff[0] = 'L';
|
||||||
|
buff[1] = (char)('0' + i);
|
||||||
|
buff[2] = '=';
|
||||||
|
buff[3] = '\0';
|
||||||
|
uart_write_str(buff);
|
||||||
|
num2buff(buff, sensor_1[i]);
|
||||||
|
uart_write_str(buff);
|
||||||
|
|
||||||
uart_write_fstr(PSTR("F1="));
|
buff[0] = ' ';
|
||||||
num2buff(buff, sensor_1);
|
buff[1] = 'R';
|
||||||
uart_write_str(buff);
|
buff[2] = (char)('0' + i);
|
||||||
|
buff[3] = '=';
|
||||||
|
buff[4] = '\0';
|
||||||
|
uart_write_str(buff);
|
||||||
|
num2buff(buff, sensor_2[i]);
|
||||||
|
uart_write_str(buff);
|
||||||
|
|
||||||
uart_write_fstr(PSTR(" F2="));
|
uart_write_char(' ');
|
||||||
num2buff(buff, sensor_2);
|
}
|
||||||
uart_write_str(buff);
|
|
||||||
|
|
||||||
uart_write_fstr(PSTR(" BAT="));
|
// все измерения забрали
|
||||||
|
sensor_measurements = 0;
|
||||||
|
|
||||||
|
uart_write_fstr(PSTR("BAT="));
|
||||||
num2buff(buff, bat);
|
num2buff(buff, bat);
|
||||||
uart_write_str(buff);
|
uart_write_str(buff);
|
||||||
|
|
||||||
@ -204,8 +226,9 @@ void read_sensors() {
|
|||||||
|
|
||||||
// быстрое деление на 2 (считалось каждое изменение)
|
// быстрое деление на 2 (считалось каждое изменение)
|
||||||
// 64 секунды * 2 = 128 (2^7)
|
// 64 секунды * 2 = 128 (2^7)
|
||||||
sensor_2 = (uint16_t)(s1 >> 7);
|
sensor_1[sensor_measurements] = (uint16_t)(s1 >> 7);
|
||||||
sensor_1 = (uint16_t)(s2 >> 7);
|
sensor_2[sensor_measurements] = (uint16_t)(s2 >> 7);
|
||||||
|
sensor_measurements++;
|
||||||
|
|
||||||
// готово!
|
// готово!
|
||||||
}
|
}
|
||||||
@ -215,7 +238,7 @@ int main() {
|
|||||||
LED2_Set();
|
LED2_Set();
|
||||||
_delay_ms(100);
|
_delay_ms(100);
|
||||||
LED2_Reset();
|
LED2_Reset();
|
||||||
_delay_ms(10000);
|
_delay_ms(5000);
|
||||||
|
|
||||||
// врубаем модем
|
// врубаем модем
|
||||||
sim800_start();
|
sim800_start();
|
||||||
@ -258,18 +281,36 @@ ISR(TIMER1_OVF_vect) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// если скорость зажата, то максимальное ожидание 5 минут
|
// если скорость зажата, шлем смс каждые 5 минут с тем что есть
|
||||||
if (time > 300) {
|
if (time > 300) {
|
||||||
if (!exec) {
|
if (!exec) {
|
||||||
time = 0;
|
time = 0;
|
||||||
exec = 1;
|
exec = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// без скорости
|
||||||
if (exec == 1) {
|
if (exec == 1) {
|
||||||
exec = 2;
|
exec = -1;
|
||||||
|
MCUCR &= ~(1 << SE);
|
||||||
|
sei();
|
||||||
|
read_sensors();
|
||||||
|
// если измерений 6 (и мало ли больше), то отправляем смс
|
||||||
|
if (sensor_measurements >= MEASUREMENTS) {
|
||||||
|
sim800_start();
|
||||||
|
sim800_send_telemetry();
|
||||||
|
sim800_stop();
|
||||||
|
}
|
||||||
|
cli();
|
||||||
|
MCUCR |= (1 << SE);
|
||||||
|
exec = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// под скоростью
|
||||||
|
if (exec == 2) {
|
||||||
|
exec = -1;
|
||||||
MCUCR &= ~(1 << SE);
|
MCUCR &= ~(1 << SE);
|
||||||
sei();
|
sei();
|
||||||
read_sensors();
|
read_sensors();
|
||||||
|
24
platform.c
24
platform.c
@ -7,10 +7,6 @@
|
|||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
|
|
||||||
char systick_execution_enable;
|
|
||||||
uint16_t sensor_1;
|
|
||||||
uint16_t sensor_2;
|
|
||||||
|
|
||||||
|
|
||||||
void platform_init() {
|
void platform_init() {
|
||||||
// инициализация GPIO
|
// инициализация GPIO
|
||||||
@ -23,10 +19,6 @@ void platform_init() {
|
|||||||
uart_init();
|
uart_init();
|
||||||
|
|
||||||
// инициализация таймера 1 (16-ти битный)
|
// инициализация таймера 1 (16-ти битный)
|
||||||
|
|
||||||
systick_execution_enable = 0;
|
|
||||||
|
|
||||||
// настройка таймера 1
|
|
||||||
// mode=14 (FastPWM, top in ICR1), x64, ICR1=1000000/64=15625
|
// mode=14 (FastPWM, top in ICR1), x64, ICR1=1000000/64=15625
|
||||||
TCCR1B = (1 << WGM13) | (1 << WGM12);
|
TCCR1B = (1 << WGM13) | (1 << WGM12);
|
||||||
TCCR1A = (1 << WGM11);
|
TCCR1A = (1 << WGM11);
|
||||||
@ -34,7 +26,7 @@ void platform_init() {
|
|||||||
// выставляем TOP
|
// выставляем TOP
|
||||||
ICR1 = (uint16_t)(F_CPU / 64);
|
ICR1 = (uint16_t)(F_CPU / 64);
|
||||||
|
|
||||||
// настройка таймера 0
|
// инициализация таймера 0 (8-ми битный)
|
||||||
// x1024, mode7 (fastpwm, top in OCRA)
|
// x1024, mode7 (fastpwm, top in OCRA)
|
||||||
TCCR0A = (1 << WGM01) | (1 << WGM00);
|
TCCR0A = (1 << WGM01) | (1 << WGM00);
|
||||||
TCCR0B = (1 << WGM02); // предделитель пока не ставим, таймер без него не работает
|
TCCR0B = (1 << WGM02); // предделитель пока не ставим, таймер без него не работает
|
||||||
@ -48,20 +40,6 @@ void platform_init() {
|
|||||||
sei();
|
sei();
|
||||||
}
|
}
|
||||||
|
|
||||||
void platform_wait_for_interrupt() {
|
|
||||||
// для режима сна Idle нужно отрубить компаратор (в даташите просили)
|
|
||||||
// в других режимах сна он отрубается автоматически
|
|
||||||
char acsr = ACSR;
|
|
||||||
ACSR |= (1 << ACD); // чтобы отрубить компаратор нужно записать 1 в этот бит
|
|
||||||
|
|
||||||
MCUCR |= (1 << SE);
|
|
||||||
asm volatile ("sleep");
|
|
||||||
MCUCR &= ~(1 << SE);
|
|
||||||
|
|
||||||
// восстанавливаем состояние компаратора
|
|
||||||
ACSR |= acsr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uart_init() {
|
void uart_init() {
|
||||||
// U2X=1, baud=9600, error=0.2%, f=1M
|
// U2X=1, baud=9600, error=0.2%, f=1M
|
||||||
UBRRH = 0;
|
UBRRH = 0;
|
||||||
|
@ -8,9 +8,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
extern uint16_t sensor_1;
|
|
||||||
extern uint16_t sensor_2;
|
|
||||||
extern char systick_execution_enable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
|
Loading…
x
Reference in New Issue
Block a user