1
+ #include < stdint.h>
2
+ #include < iostream>
3
+ #include < cstring>
4
+ #include < fstream>
5
+ #include < chrono>
6
+ #include < thread>
7
+ #include < math.h>
8
+ #include " src/headers/MLX90640_API.h"
9
+ #include " mlx90640.hpp"
10
+
11
+
12
+
13
+ namespace pimoroni {
14
+ MLX90640::MLX90640_Error MLX90640::setup (int fps){
15
+ MLX90640_I2CConfigure (i2c_instance);
16
+ // MLX90640_SetDeviceMode(i2c_address, 0);
17
+ // MLX90640_SetSubPageRepeat(i2c_address, 0);
18
+
19
+ switch (fps){
20
+ case 1 :
21
+ MLX90640_SetRefreshRate (i2c_address, 0b001 );
22
+ break ;
23
+ case 2 :
24
+ MLX90640_SetRefreshRate (i2c_address, 0b010 );
25
+ break ;
26
+ case 4 :
27
+ MLX90640_SetRefreshRate (i2c_address, 0b011 );
28
+ break ;
29
+ case 8 :
30
+ MLX90640_SetRefreshRate (i2c_address, 0b100 );
31
+ break ;
32
+ case 16 :
33
+ MLX90640_SetRefreshRate (i2c_address, 0b101 );
34
+ if (i2c_instance->get_baudrate () < 1000000 ) {
35
+ return INVALID_BAUDRATE;
36
+ }
37
+ break ;
38
+ case 32 :
39
+ MLX90640_SetRefreshRate (i2c_address, 0b110 );
40
+ if (i2c_instance->get_baudrate () < 1000000 ) {
41
+ return INVALID_BAUDRATE;
42
+ }
43
+ break ;
44
+ case 64 :
45
+ MLX90640_SetRefreshRate (i2c_address, 0b111 );
46
+ if (i2c_instance->get_baudrate () < 1000000 ) {
47
+ return INVALID_BAUDRATE;
48
+ }
49
+ break ;
50
+ default :
51
+ #ifdef DEBUG
52
+ printf (" Unsupported framerate: %d" , fps);
53
+ #endif
54
+ return INVALID_FPS;
55
+ }
56
+ // MLX90640_SetChessMode(i2c_address);
57
+ MLX90640_SetInterleavedMode (i2c_address);
58
+ // MLX90640_SetResolution(i2c_address, 0);
59
+ MLX90640_DumpEE (i2c_address, eeMLX90640);
60
+ MLX90640_ExtractParameters (eeMLX90640, &mlx90640);
61
+
62
+ return OK;
63
+ }
64
+
65
+ int MLX90640::get_image (void ){
66
+ MLX90640_I2CConfigure (i2c_instance);
67
+
68
+ MLX90640_GetFrameData (i2c_address, frame0);
69
+ sleep_us (1000 );
70
+ MLX90640_GetFrameData (i2c_address, frame1);
71
+
72
+ MLX90640_GetImage (frame0, &mlx90640, mlx90640To);
73
+ MLX90640_GetImage (frame1, &mlx90640, mlx90640To);
74
+
75
+ return 0 ;
76
+ }
77
+
78
+ int MLX90640::get_frame (void ){
79
+ MLX90640_I2CConfigure (i2c_instance);
80
+
81
+ MLX90640_GetFrameData (i2c_address, frame0);
82
+ sleep_us (1000 );
83
+ MLX90640_GetFrameData (i2c_address, frame1);
84
+
85
+ int tr0 = MLX90640_GetTa (frame0, &mlx90640) - reflected_temperature;
86
+ MLX90640_CalculateTo (frame0, &mlx90640, emissivity, tr0, mlx90640To);
87
+ int tr1 = MLX90640_GetTa (frame1, &mlx90640) - reflected_temperature;
88
+ MLX90640_CalculateTo (frame1, &mlx90640, emissivity, tr1, mlx90640To);
89
+
90
+ return 0 ;
91
+ }
92
+ }
0 commit comments