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 }