1#include <Arduino.h>
2
3#include <U8g2lib.h>
4
5#include <Adafruit_AMG88xx.h>
6
7#ifdef U8X8_HAVE_HW_SPI#include <SPI.h>
8
9#endif
10#ifdef U8X8_HAVE_HW_I2C#include <Wire.h>
11
12#endif
13
14
15
16
17int getDisplayValueOfTemp(float temp, int range_start, int range_end) {
18 float step_size;
19 int return_value = 1;
20 step_size = (range_end - range_start) / 8.00;
21 if (temp > range_end) {
22 return 8;
23 }
24 do {
25 if (temp <= (return_value * step_size + range_start)) {
26 return return_value;
27 }
28 return_value = return_value + 1;
29 } while (return_value <= 8);
30}
31
32
33Adafruit_AMG88xx amg;
34U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8( SCL, SDA, U8X8_PIN_NONE);
35
36
37float ir_camera_pixels[64];
38
39void setup() {
40 Serial.begin(9600);
41 u8x8.begin();
42
43 bool status;
44 status = amg.begin();
45 if (!status) {
46 Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
47 while (1);
48 }
49 u8x8.begin();
50 u8x8.setPowerSave(0);
51 Serial.println(F("Hardware init is done !"));
52
53}
54
55void loop() {
56 int row_num = 0;
57 int col_num = 0;
58 amg.readPixels(ir_camera_pixels);
59 u8x8.setFont(u8x8_font_chroma48medium8_r);
60
61 for (int i = 0; i < 64; i++) {
62 float temp = ir_camera_pixels[i];
63 int character_to_display = getDisplayValueOfTemp(temp, 20, 35);
64 if ((i % 8) == 0) {
65 row_num = row_num + 1;
66 col_num = 0;
67 }
68
69 switch (character_to_display) {
70 case 1:
71 u8x8.drawString(col_num, row_num, ".");
72 break;
73 case 2:
74 u8x8.drawString(col_num, row_num, ":");
75 break;
76 case 3:
77 u8x8.drawString(col_num, row_num, "-");
78 break;
79 case 4:
80 u8x8.drawString(col_num, row_num, "=");
81 break;
82 case 5:
83 u8x8.drawString(col_num, row_num, "+");
84 break;
85 case 6:
86 u8x8.drawString(col_num, row_num, "*");
87 break;
88 case 7:
89 u8x8.drawString(col_num, row_num, "#");
90 break;
91 case 8:
92 u8x8.drawString(col_num, row_num, "@");
93 break;
94 }
95
96 col_num = col_num + 1;
97 }
98
99}