/ learning / zig / zora / src / hts221.zig
hts221.zig
 1  const std = @import("std");
 2  const microzig = @import("microzig");
 3  const stm32 = microzig.hal;
 4  const systick = stm32.systick;
 5  const board = microzig.board;
 6  const HTS221 = microzig.drivers.sensor.HTS221;
 7  
 8  pub const microzig_options: microzig.Options = .{
 9      .logFn = microzig.board.uart_logger.log,
10      .cpu = .{
11          .ram_vector_table = true,
12      },
13      .hal = if (std.mem.eql(u8, microzig.config.chip_name, "STM32F303VC")) .{
14          .rcc_clock_config = board.rcc_medium_speed,
15      } else .{},
16  };
17  
18  pub fn init() void {
19      stm32.dma.DMA1_Channel4.enable_interrupt();
20      board.init();
21      board.init_log();
22      systick.init() catch {
23          @panic("systick failed to initialized");
24      };
25  }
26  
27  pub fn main() !void {
28      std.log.info("Starting main", .{});
29      const clock = try stm32.systick_timer.clock_device();
30      var i2c1 = try board.i2c1();
31      i2c1.apply();
32      var device = i2c1.i2c_device();
33  
34      var hts221 = HTS221.init(&device);
35      try hts221.configure(.{
36          .outputDataRate = .SevenHz,
37          .humidityAverageSample = .Avg32,
38          .temperatureAverageSample = .Avg16,
39      });
40      try hts221.turn_on();
41  
42      while (true) {
43          clock.sleep_ms(2_000);
44  
45          if (try hts221.temperature_ready()) {
46              const temp = try hts221.read_temperature();
47  
48              std.log.info("Reading temperature {d:.2}°C", .{temp});
49          }
50          if (try hts221.humidity_ready()) {
51              const humidity = try hts221.read_humidity();
52  
53              std.log.info("Reading relative humidity {d:.2}%", .{humidity});
54          }
55      }
56  }