28 #include <i2c_config.h>
29 #include <avr/sleep.h>
30 #include <avr/power.h>
32 #include <i2c_utility.h>
33 #include <rmap_utility.h>
35 #include <json_utility.h>
37 #include <eeprom_utility.h>
41 #include <registers-opc.h>
43 #include <debug_config.h>
45 #include <StreamUtils.h>
46 #include <ArduinoLog.h>
78 } temperature_value_t;
116 float pm_sample[OPCXX_PM_LENGTH];
117 float pm_med[OPCXX_PM_LENGTH];
118 float pm_sigma[OPCXX_PM_LENGTH];
120 uint16_t bins_med[OPCN3_BINS_LENGTH];
121 uint16_t bins_sigma[OPCN3_BINS_LENGTH];
124 float temperature_sample;
125 float humidity_sample;
127 float temperature_med;
137 temperature_value_t temperature;
138 humidity_value_t humidity;
203 OPC_SEND_COMMAND_FAN_DAC,
204 OPC_WAIT_RESULT_FAN_DAC,
205 OPC_SEND_COMMAND_FAN_ON,
206 OPC_WAIT_RESULT_FAN_ON,
207 OPC_SEND_COMMAND_LASER_ON,
208 OPC_WAIT_RESULT_LASER_ON,
209 OPC_SEND_COMMAND_READ_HISTOGRAM,
210 OPC_WAIT_RESULT_READ_HISTOGRAM,
220 #if (ENABLE_SDCARD_LOGGING)
237 WriteLoggingStream loggingStream(logFile,Serial);
362 sample_t bins_samples[OPC_BINS_LENGTH];
412 bool is_opc_first_read;
413 uint8_t histogram_error_count;
419 #if (USE_SENSOR_OA2 || USE_SENSOR_OB2 || USE_SENSOR_OC2 || USE_SENSOR_OD2)
423 #if (USE_SENSOR_OA3 || USE_SENSOR_OB3 || USE_SENSOR_OC3 || USE_SENSOR_OD3 || USE_SENSOR_OE3)
584 template<
typename sample_g,
typename observation_g,
typename values_v,
typename value_v>
void addSample(sample_g *sample, observation_g *observation, values_v *values, value_v value);
586 template<
typename observation_g,
typename value_v> value_v readCurrentObservation(observation_g *buffer);
587 template<
typename observation_g,
typename value_v>
void writeCurrentObservation(observation_g *buffer, value_v value);
588 template<
typename observation_g,
typename length_v>
void resetObservation(observation_g *buffer, length_v length);
589 template<
typename observation_g,
typename length_v>
void resetBackPmObservation(observation_g *buffer, length_v length);
590 template<
typename observation_g,
typename length_v>
void incrementObservation(observation_g *buffer, length_v length);
591 template<
typename observation_g,
typename length_v,
typename value_v>
void addObservation(observation_g *buffer, length_v length, value_v value);
592 template<
typename observation_g,
typename length_v,
typename value_v> value_v readBackObservation(observation_g *buffer, length_v length);
618 template<
typename sample_g,
typename observation_g>
bool make_observation_from_samples(
bool is_force_processing, sample_g *sample, observation_g *observation);
#define SENSORS_SAMPLE_TIME_MS
Milliseconds for sampling sensors: 1000 - 60000 [ms] must be integer multiple of TIMER1_INTERRUPT_TIM...
Definition: i2c-leaf-config.h:168
#define I2C_MAX_DATA_LENGTH
Max length in bytes for i2c bus data buffer.
Definition: i2c_config.h:36
#define OBSERVATION_COUNT
Observations buffer length.
Definition: sensors_config.h:259
volatile bool is_event_command_task
Enable or disable the Command task.
Definition: i2c-leaf.h:502
volatile uint8_t readable_data_length
Number of bytes to read at readable_data_address.
Definition: i2c-leaf.h:202
bool is_start
Execute start command.
Definition: i2c-leaf.h:244
configuration_t configuration
Configuration data.
Definition: i2c-leaf.h:148
volatile uint8_t i2c_error
Number of i2c error.
Definition: i2c-leaf.h:220
writable_data_t writable_data
Writable i2c register.
Definition: i2c-leaf.h:184
bool do_buffers_reset
Force a buffers reset.
Definition: i2c-leaf.h:271
writable_data_t * writable_data_ptr
Pointer for read and write data in i2c writable register.
Definition: i2c-leaf.h:190
void i2c_receive_interrupt_handler(void)
I2C receive interrupt handler.
uint32_t awakened_event_occurred_time_ms
System time (in millisecond) when the system has awakened from power down.
Definition: i2c-leaf.h:238
uint8_t samples_count
Number of samples to be acquired for make one observation.
Definition: i2c-leaf.h:265
state_t
Main loop finite state machine.
Definition: i2c-leaf.h:100
volatile readable_data_t readable_data_1
First readable i2c register.
Definition: i2c-leaf.h:154
volatile readable_data_t * readable_data_write_ptr
Pointer for write data in i2c readable register.
Definition: i2c-leaf.h:172
bool is_stop
Execute stop command.
Definition: i2c-leaf.h:250
volatile uint8_t ready_tasks_count
Number of tasks ready to execute.
Definition: i2c-leaf.h:232
state_t state
Current main loop state.
Definition: i2c-leaf.h:283
volatile uint8_t i2c_rx_data[I2C_MAX_DATA_LENGTH]
Buffer for i2c received data.
Definition: i2c-leaf.h:208
volatile uint8_t readable_data_address
Address of readable i2c register.
Definition: i2c-leaf.h:196
volatile readable_data_t * readable_data_temp_ptr
Temporary pointer for exchange read and write pointer for i2c readable register.
Definition: i2c-leaf.h:178
volatile readable_data_t * readable_data_read_ptr
Pointer for read data in i2c readable register.
Definition: i2c-leaf.h:166
volatile readable_data_t readable_data_2
Second readable i2c register.
Definition: i2c-leaf.h:160
#define OPC_CHIP_SELECT
Output pin for spi chip select opc sensor.
Definition: i2c-opc-config.h:86
#define OPC_POWER_PIN
Output pin for power on and power off opc sensor.
void load_configuration(void)
Load configuration from EEPROM.
Definition: i2c-leaf.ino:335
void init_tasks(void)
Init tasks variable and state.
Definition: i2c-leaf.ino:225
opc_state_t opc_state
Current sensors reading task state.
Definition: i2c-opc.h:409
void init_system(void)
Init system.
Definition: i2c-leaf.ino:290
bool make_value_from_samples_and_observations(sample_g *sample, observation_g *observation, value_v *value)
Definition: i2c-opc.ino:920
void init_spi(void)
Init SPI library.
Definition: i2c-leaf.ino:262
volatile bool is_event_opc_task
Enable or disable the OPC task.
Definition: i2c-opc.h:638
void opc_task(void)
Opc setup and reading Task. Read data from OPC.
Definition: i2c-opc.ino:1014
opc_state_t
OPC setup and reading task finite state machine.
Definition: i2c-opc.h:200
@ OPC_WAIT_STATE
non-blocking waiting time
Definition: i2c-opc.h:213
@ OPC_END
performs end operations and deactivate task
Definition: i2c-opc.h:212
void reset_samples_buffer(void)
Reset samples buffers to default value.
Definition: i2c-leaf.ino:549
bool is_oneshot
Received command is in oneshot mode.
Definition: i2c-opc.h:340
bool is_continuous
Received command is in continuous mode.
Definition: i2c-opc.h:346
void init_wire(void)
Init wire (i2c) library and performs checks on the bus.
Definition: i2c-leaf.ino:251
void save_configuration(bool)
Save configuration to EEPROM.
Definition: i2c-leaf.ino:312
void init_rtc(void)
Init RTC module.
Definition: i2c-leaf.ino:266
bool observations_processing(void)
Main routine for processing the observations to calculate a value for report.
Definition: i2c-opc.ino:892
void init_wdt(uint8_t wdt_timer)
Init watchdog.
Definition: i2c-leaf.ino:202
void command_task(void)
Command Task. Execute the command received on i2c bus by reading i2c received data buffer.
Definition: i2c-leaf.ino:557
state_t
Main loop finite state machine.
Definition: i2c-opc.h:187
@ INIT
init tasks and sensors
Definition: i2c-opc.h:188
@ TASKS_EXECUTION
execute active tasks
Definition: i2c-opc.h:192
@ END
go to ENTER_POWER_DOWN or TASKS_EXECUTION
Definition: i2c-opc.h:193
void init_pins(void)
Init hardware pins.
Definition: i2c-leaf.ino:244
void commands(void)
Performs specific operations based on the received command.
Definition: i2c-leaf.ino:649
void exchange_buffers(void)
Exchange reader and writer pointer to buffer.
Definition: i2c-leaf.ino:535
void print_configuration(void)
Print current configuration.
Definition: i2c-leaf.ino:301
void samples_processing(bool is_force_processing)
Main routine for processing the samples to calculate an observation.
Definition: i2c-opc.ino:560
void i2c_request_interrupt_handler(void)
I2C request interrupt handler.
Definition: i2c-leaf.ino:395
void init_buffers(void)
Init buffers.
Definition: i2c-leaf.ino:208
void init_sensors(void)
Create and setup sensors.
Definition: i2c-leaf.ino:353
void init_logging()
Init logging system.
Definition: i2c-leaf.ino:141
bool make_observation_from_samples(bool is_force_processing, sample_g *sample, observation_g *observation)
Definition: i2c-opc.ino:857
volatile uint16_t timer_counter
Timer counter variable for execute timed task with time multiple of base Timer1 time.
Definition: i2c-opc.h:397
void init_power_down(uint32_t *time_ms, uint32_t debouncing_ms)
Enter power down mode.
Definition: i2c-leaf.ino:173
void init_timer1(void)
Init Timer1 module.
Definition: stima.ino:737
void start_timer(void)
Start Timer1 module.
Definition: stima.ino:741
void stop_timer(void)
Stop Timer1 module.
Definition: stima.ino:749
uint16_t sigma
standard deviation of observations
Definition: i2c-opc.h:105
uint16_t med
average values of observations
Definition: i2c-opc.h:102
uint16_t sample
last sample
Definition: i2c-opc.h:100
EEPROM saved configuration.
Definition: i2c-leaf.h:55
uint8_t module_version
module version
Definition: i2c-opc.h:57
bool is_continuous
enable or disable continuous mode
Definition: i2c-opc.h:61
Definition: i2c-opc.h:166
float * read_ptr
reader pointer to buffer (read observations for calculate report value)
Definition: i2c-opc.h:169
float * write_ptr
writer pointer to buffer (add new observation)
Definition: i2c-opc.h:170
uint16_t count
number of observations
Definition: i2c-opc.h:168
float sample
last sample
Definition: i2c-opc.h:91
float med
average values of observations
Definition: i2c-opc.h:93
float sigma
standard deviation of observations
Definition: i2c-opc.h:96
Readable data through i2c bus.
Definition: i2c-leaf.h:76
uint8_t module_version
module type
Definition: i2c-opc.h:114
pm_value_t pm1
pm1 data for report
Definition: i2c-opc.h:131
pm_value_t pm10
pm10 data for report
Definition: i2c-opc.h:133
pm_value_t pm25
pm25 data for report
Definition: i2c-opc.h:132
Samples values for measured opc data.
Definition: i2c-opc.h:156
float values
buffer containing the measured samples
Definition: i2c-opc.h:157
uint8_t count
number of good samples
Definition: i2c-opc.h:158
uint8_t error_count
number of bad samples
Definition: i2c-opc.h:159
Definition: i2c-opc.h:173
uint16_t * write_ptr
writer pointer to buffer (add new observation)
Definition: i2c-opc.h:177
uint16_t * read_ptr
reader pointer to buffer (read observations for calculate report value)
Definition: i2c-opc.h:176
uint16_t count
number of observations
Definition: i2c-opc.h:175
Writable data through i2c bus.
Definition: i2c-leaf.h:87
bool is_continuous
enable or disable continuous mode
Definition: i2c-opc.h:149