Advertisement
Guest User

Interpolated_Thermal

a guest
May 24th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.36 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <TinyScreen.h>
  4. #include <Adafruit_AMG88xx.h>
  5.  
  6.  
  7. //low range of the sensor (this will be blue on the screen)
  8. #define MINTEMP 20
  9.  
  10. //high range of the sensor (this will be red on the screen)
  11. #define MAXTEMP 28
  12.  
  13. //Declare Tinyscreen version
  14. TinyScreen display = TinyScreen(TinyScreenDefault);
  15.  
  16. Adafruit_AMG88xx amg;
  17.  
  18. #define AMG_COLS 8
  19. #define AMG_ROWS 8
  20. float pixels[AMG_COLS * AMG_ROWS];
  21.  
  22. #define INTERPOLATED_COLS 24
  23. #define INTERPOLATED_ROWS 24
  24.  
  25. byte brightness = 10;
  26. byte SV = 0;
  27.  
  28. float get_point(float *p, uint8_t rows, uint8_t cols, int8_t x, int8_t y);
  29. void set_point(float *p, uint8_t rows, uint8_t cols, int8_t x, int8_t y, float f);
  30. void get_adjacents_1d(float *src, float *dest, uint8_t rows, uint8_t cols, int8_t x, int8_t y);
  31. void get_adjacents_2d(float *src, float *dest, uint8_t rows, uint8_t cols, int8_t x, int8_t y);
  32. float cubicInterpolate(float p[], float x);
  33. float bicubicInterpolate(float p[], float x, float y);
  34. void interpolate_image(float *src, uint8_t src_rows, uint8_t src_cols,
  35. float *dest, uint8_t dest_rows, uint8_t dest_cols);
  36.  
  37. //the colors we will be using
  38. const uint16_t camColors[] = {0x480F,
  39. 0x400F,0x400F,0x400F,0x4010,0x3810,0x3810,0x3810,0x3810,0x3010,0x3010,
  40. 0x3010,0x2810,0x2810,0x2810,0x2810,0x2010,0x2010,0x2010,0x1810,0x1810,
  41. 0x1811,0x1811,0x1011,0x1011,0x1011,0x0811,0x0811,0x0811,0x0011,0x0011,
  42. 0x0011,0x0011,0x0011,0x0031,0x0031,0x0051,0x0072,0x0072,0x0092,0x00B2,
  43. 0x00B2,0x00D2,0x00F2,0x00F2,0x0112,0x0132,0x0152,0x0152,0x0172,0x0192,
  44. 0x0192,0x01B2,0x01D2,0x01F3,0x01F3,0x0213,0x0233,0x0253,0x0253,0x0273,
  45. 0x0293,0x02B3,0x02D3,0x02D3,0x02F3,0x0313,0x0333,0x0333,0x0353,0x0373,
  46. 0x0394,0x03B4,0x03D4,0x03D4,0x03F4,0x0414,0x0434,0x0454,0x0474,0x0474,
  47. 0x0494,0x04B4,0x04D4,0x04F4,0x0514,0x0534,0x0534,0x0554,0x0554,0x0574,
  48. 0x0574,0x0573,0x0573,0x0573,0x0572,0x0572,0x0572,0x0571,0x0591,0x0591,
  49. 0x0590,0x0590,0x058F,0x058F,0x058F,0x058E,0x05AE,0x05AE,0x05AD,0x05AD,
  50. 0x05AD,0x05AC,0x05AC,0x05AB,0x05CB,0x05CB,0x05CA,0x05CA,0x05CA,0x05C9,
  51. 0x05C9,0x05C8,0x05E8,0x05E8,0x05E7,0x05E7,0x05E6,0x05E6,0x05E6,0x05E5,
  52. 0x05E5,0x0604,0x0604,0x0604,0x0603,0x0603,0x0602,0x0602,0x0601,0x0621,
  53. 0x0621,0x0620,0x0620,0x0620,0x0620,0x0E20,0x0E20,0x0E40,0x1640,0x1640,
  54. 0x1E40,0x1E40,0x2640,0x2640,0x2E40,0x2E60,0x3660,0x3660,0x3E60,0x3E60,
  55. 0x3E60,0x4660,0x4660,0x4E60,0x4E80,0x5680,0x5680,0x5E80,0x5E80,0x6680,
  56. 0x6680,0x6E80,0x6EA0,0x76A0,0x76A0,0x7EA0,0x7EA0,0x86A0,0x86A0,0x8EA0,
  57. 0x8EC0,0x96C0,0x96C0,0x9EC0,0x9EC0,0xA6C0,0xAEC0,0xAEC0,0xB6E0,0xB6E0,
  58. 0xBEE0,0xBEE0,0xC6E0,0xC6E0,0xCEE0,0xCEE0,0xD6E0,0xD700,0xDF00,0xDEE0,
  59. 0xDEC0,0xDEA0,0xDE80,0xDE80,0xE660,0xE640,0xE620,0xE600,0xE5E0,0xE5C0,
  60. 0xE5A0,0xE580,0xE560,0xE540,0xE520,0xE500,0xE4E0,0xE4C0,0xE4A0,0xE480,
  61. 0xE460,0xEC40,0xEC20,0xEC00,0xEBE0,0xEBC0,0xEBA0,0xEB80,0xEB60,0xEB40,
  62. 0xEB20,0xEB00,0xEAE0,0xEAC0,0xEAA0,0xEA80,0xEA60,0xEA40,0xF220,0xF200,
  63. 0xF1E0,0xF1C0,0xF1A0,0xF180,0xF160,0xF140,0xF100,0xF0E0,0xF0C0,0xF0A0,
  64. 0xF080,0xF060,0xF040,0xF020,0xF800,};
  65.  
  66. void setup() {
  67. delay(500);
  68. Serial.begin(115200);
  69. Serial.println("\n\nAMG88xx Interpolated Thermal Camera");
  70.  
  71. Wire.begin();
  72. display.begin();
  73. display.setBrightness(brightness);
  74. display.setColorMode(TSColorModeRGB);
  75. display.setBitDepth(TSBitDepth16);
  76. display.setFont(thinPixel7_10ptFontInfo);
  77. byte width = display.getPrintWidth("GRID-EYE Thermal System");
  78. display.setCursor(48-(width/2),30);
  79. display.print("GRID-EYE Thermal System");
  80.  
  81. // default settings
  82. pinMode(LED_BUILTIN, OUTPUT); //Start Mah Boi
  83. if (!amg.begin()) {
  84. Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
  85. width = display.getPrintWidth("AMG88xx - Check Wiring");
  86. display.setCursor(48-(width/2),38);
  87. display.print("AMG88xx - Check Wiring");
  88. while (1) { digitalWrite(LED_BUILTIN, HIGH); delay(250); digitalWrite(LED_BUILTIN, LOW); delay(250); }
  89. }
  90.  
  91. //Attact Interrupts
  92. pinMode(TSP_PIN_BT3, INPUT_PULLUP);
  93. pinMode(TSP_PIN_BT4, INPUT_PULLUP);
  94. attachInterrupt(digitalPinToInterrupt(TSP_PIN_BT3), ToggleBrU, RISING);
  95. attachInterrupt(digitalPinToInterrupt(TSP_PIN_BT4), ToggleBrD, RISING);
  96.  
  97.  
  98. digitalWrite(LED_BUILTIN, HIGH); //All things are good
  99. Serial.println("-- Thermal Camera Test --");
  100. }
  101.  
  102. void loop() {
  103.  
  104. //read all the pixels
  105. amg.readPixels(pixels);
  106.  
  107. Serial.print("[");
  108. for(int i=1; i<=AMG88xx_PIXEL_ARRAY_SIZE; i++){
  109. Serial.print(pixels[i-1]);
  110. Serial.print(", ");
  111. if( i%8 == 0 ) Serial.println();
  112. }
  113. Serial.println("]");
  114. Serial.println();
  115.  
  116. float dest_2d[INTERPOLATED_ROWS * INTERPOLATED_COLS];
  117.  
  118. int32_t t = millis();
  119. interpolate_image(pixels, AMG_ROWS, AMG_COLS, dest_2d, INTERPOLATED_ROWS, INTERPOLATED_COLS);
  120. Serial.print("Interpolation took "); Serial.print(millis()-t); Serial.println(" ms");
  121.  
  122. uint16_t boxsize = min(96 / INTERPOLATED_COLS, 64 / INTERPOLATED_COLS);
  123.  
  124. if (display.getButtons(TSButtonUpperLeft)) {
  125. if (SV = 0) {SV = 1;}
  126. else {SV = 0;}
  127. }
  128.  
  129. if (SV = 1) {
  130. drawpixels(dest_2d, INTERPOLATED_ROWS, INTERPOLATED_COLS, boxsize, boxsize, true);
  131. } else {
  132. drawpixels(dest_2d, INTERPOLATED_ROWS, INTERPOLATED_COLS, boxsize, boxsize, false);
  133. }
  134.  
  135. //delay(50);
  136. }
  137.  
  138. void drawpixels(float *p, uint8_t rows, uint8_t cols, uint8_t boxWidth, uint8_t boxHeight, boolean showVal) {
  139. int colorTemp;
  140. for (int y=0; y<rows; y++) {
  141. for (int x=0; x<cols; x++) {
  142. float val = get_point(p, rows, cols, x, y);
  143. if(val >= MAXTEMP) colorTemp = MAXTEMP;
  144. else if(val <= MINTEMP) colorTemp = MINTEMP;
  145. else colorTemp = val;
  146.  
  147. uint8_t colorIndex = map(colorTemp, MINTEMP, MAXTEMP, 0, 255);
  148. colorIndex = constrain(colorIndex, 0, 255);
  149. //draw the pixels!
  150. uint16_t color;
  151. color = val * 2;
  152. display.drawRect(40+boxWidth * x, boxHeight * y, boxWidth, boxHeight, TSRectangleFilled, camColors[colorIndex]);
  153.  
  154. if (showVal) {
  155. display.setCursor(boxWidth * y + boxWidth/2 - 12, 40 + boxHeight * x + boxHeight/2 - 4);
  156. display.fontColor(TS_16b_White,camColors[colorIndex]);
  157. display.print(val);
  158. }
  159. }
  160. }
  161. }
  162.  
  163. void ToggleBrU() {
  164. if (brightness < 15) {
  165. ++brightness;
  166. display.setBrightness(brightness);
  167. }
  168. }
  169.  
  170. void ToggleBrD() {
  171. if (brightness > 0) {
  172. --brightness;
  173. display.setBrightness(brightness);
  174. }
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement