├── 3D Design ├── V3_Corner_control.skp ├── V3_Corner_control.stl ├── V3_Corner_control_middle.stl ├── V3_Frame_CIS_26.skp ├── V3_Frame_CIS_26_1.stl ├── V3_Frame_CIS_26_2.stl ├── V3_Frame_LED_13.skp ├── V3_Frame_LED_13.stl ├── V3_Frame_LED_13_noSTP.skp ├── V3_Frame_LED_13_noSTP.stl ├── V3_Frame_LED_13_noSTP~.skp ├── V3_Frame_LED_13~.skp ├── corner.skp └── corner.stl ├── Pictures └── Coffee_Table.jpg ├── README.md ├── Software ├── Centrale_Bluetooth-HID │ └── Centrale_Bluetooth-HID.ino ├── Frame_without_CIS │ └── foo.txt ├── GUI-Processing-Touch_Frame_1CIS_16LED_NoLEDDriver │ └── GUI-Processing-Touch_Frame_1CIS_16LED_NoLEDDriver.pde ├── GUI_Touch_Frame_Python │ ├── Touch_Table_Python.py │ ├── cursor.jpg │ └── fond-ecran-univers.jpg ├── Magic_Frame_2CIS_32LED_Bluetooth │ └── Magic_Frame_Bluetooth │ │ └── Magic_Frame_Bluetooth.ino ├── Test_CIS_Program_Arduino&Processing │ ├── CIS_Arduino_Color │ │ └── CIS_Arduino_Color.ino │ └── CIS_array_color │ │ ├── CIS_array_color.pde │ │ └── sketch.properties ├── Test_CIS_Program_Send_Serial │ └── Test_CIS_Program_Send_Serial.ino └── Touch_Frame_1CIS_16LED_NoLEDDriver │ └── Touch_Frame_V1 │ └── Touch_Frame_V1.ino ├── Vector_Illustration ├── PacMan1.ai ├── ben-kenobi-silhouette-vector.ai ├── darth-vader-silhouette-vector-3.ai ├── link-silhouette-vector.ai ├── princess-zelda-silhouette-vector.ai ├── r2-d2-silhouette-vector-2.ai ├── toad.ai ├── triforce.ai └── yoda-silhouette-vector.ai └── Z-wave_Software_Magic_Frame ├── Z-wave_Magic_Frame_16-16-UART_Teensy └── Z-wave_Magic_Frame_16-16-UART_Teensy.ino └── Z-wave_Z-uno_UART └── Z-wave_Z-uno_UART.ino /3D Design/V3_Corner_control.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/3D Design/V3_Corner_control.skp -------------------------------------------------------------------------------- /3D Design/V3_Frame_CIS_26.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/3D Design/V3_Frame_CIS_26.skp -------------------------------------------------------------------------------- /3D Design/V3_Frame_CIS_26_1.stl: -------------------------------------------------------------------------------- 1 | solid V3_Frame_CIS_26 2 | facet normal 1.0 -1.0846024932876529e-17 -5.352449686428362e-33 3 | outer loop 4 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 5 | vertex 114.7113066405773 -152.11966165224183 11.500000000000007 6 | vertex 114.7113066405773 -152.11966165224183 1.5000000000000084 7 | endloop 8 | endfacet 9 | facet normal 1.0 -1.0846024932876529e-17 -5.352449686428362e-33 10 | outer loop 11 | vertex 114.7113066405773 -152.11966165224183 11.500000000000007 12 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 13 | vertex 114.7113066405773 -22.11966165224184 11.500000000000007 14 | endloop 15 | endfacet 16 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 17 | outer loop 18 | vertex 136.8160937367537 -14.313690152270913 1.1456113835350834e-14 19 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 20 | vertex 129.1731079867682 -14.313690152270913 4.511946372076636e-14 21 | endloop 22 | endfacet 23 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 24 | outer loop 25 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 26 | vertex 136.8160937367537 -14.313690152270913 1.1456113835350834e-14 27 | vertex 134.79460086176096 -22.11966165224184 4.511946372076636e-14 28 | endloop 29 | endfacet 30 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 31 | outer loop 32 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 33 | vertex 113.2113066405773 -152.11966165224183 8.459899447643692e-15 34 | vertex 113.2113066405773 -22.11966165224184 7.754907827006718e-15 35 | endloop 36 | endfacet 37 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 38 | outer loop 39 | vertex 113.2113066405773 -152.11966165224183 8.459899447643692e-15 40 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 41 | vertex 128.9613066405773 -145.11966165224183 1.0046130594076817e-14 42 | endloop 43 | endfacet 44 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 45 | outer loop 46 | vertex 128.9613066405773 -145.11966165224183 1.0046130594076817e-14 47 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 48 | vertex 136.46130664057736 -145.11966165224183 9.164891068280651e-15 49 | endloop 50 | endfacet 51 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 52 | outer loop 53 | vertex 136.46130664057736 -145.11966165224183 9.164891068280651e-15 54 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 55 | vertex 134.79460086176096 -22.11966165224184 4.511946372076636e-14 56 | endloop 57 | endfacet 58 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 59 | outer loop 60 | vertex 136.46130664057736 -145.11966165224183 9.164891068280651e-15 61 | vertex 134.79460086176096 -22.11966165224184 4.511946372076636e-14 62 | vertex 149.21130664057728 -22.11966165224184 1.762479051592436e-14 63 | endloop 64 | endfacet 65 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 66 | outer loop 67 | vertex 136.46130664057736 -145.11966165224183 9.164891068280651e-15 68 | vertex 149.21130664057728 -22.11966165224184 1.762479051592436e-14 69 | vertex 149.21130664057725 -152.11966165224183 1.6919798895287383e-14 70 | endloop 71 | endfacet 72 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 73 | outer loop 74 | vertex 149.21130664057725 -152.11966165224183 1.6919798895287383e-14 75 | vertex 134.7113066405773 -152.11966165224183 1.4099832412739488e-14 76 | vertex 136.46130664057736 -145.11966165224183 9.164891068280651e-15 77 | endloop 78 | endfacet 79 | facet normal 1.922013789247013e-16 6.352042362060197e-17 -1.0 80 | outer loop 81 | vertex 130.71130664057733 -152.11966165224183 3.101963130802687e-14 82 | vertex 113.2113066405773 -152.11966165224183 8.459899447643692e-15 83 | vertex 128.9613066405773 -145.11966165224183 1.0046130594076817e-14 84 | endloop 85 | endfacet 86 | facet normal -9.357161510272589e-16 1.7304339779271197e-17 1.0 87 | outer loop 88 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 89 | vertex 138.71130664057725 -22.11966165224184 4.500000000000016 90 | vertex 138.71130664057725 -142.11966165224183 4.500000000000017 91 | endloop 92 | endfacet 93 | facet normal -9.357161510272589e-16 1.7304339779271197e-17 1.0 94 | outer loop 95 | vertex 138.71130664057725 -22.11966165224184 4.500000000000016 96 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 97 | vertex 139.71130664057725 -22.11966165224184 4.500000000000016 98 | endloop 99 | endfacet 100 | facet normal -9.357161510272589e-16 1.7304339779271197e-17 1.0 101 | outer loop 102 | vertex 139.71130664057725 -22.11966165224184 4.500000000000016 103 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 104 | vertex 141.71130664057725 -22.11966165224184 4.500000000000018 105 | endloop 106 | endfacet 107 | facet normal 0.0 -1.0 0.0 108 | outer loop 109 | vertex 134.7113066405773 -152.11966165224183 1.4099832412739488e-14 110 | vertex 141.71130664057725 -152.11966165224183 1.5000000000000198 111 | vertex 134.7113066405773 -152.11966165224183 19.500000000000032 112 | endloop 113 | endfacet 114 | facet normal 0.0 -1.0 0.0 115 | outer loop 116 | vertex 141.71130664057725 -152.11966165224183 1.5000000000000198 117 | vertex 134.7113066405773 -152.11966165224183 1.4099832412739488e-14 118 | vertex 149.21130664057725 -152.11966165224183 1.6919798895287383e-14 119 | endloop 120 | endfacet 121 | facet normal 0.0 -1.0 0.0 122 | outer loop 123 | vertex 141.71130664057725 -152.11966165224183 1.5000000000000198 124 | vertex 149.21130664057725 -152.11966165224183 1.6919798895287383e-14 125 | vertex 149.21130664057725 -152.11966165224183 1.5000000000000198 126 | endloop 127 | endfacet 128 | facet normal 0.0 -1.0 0.0 129 | outer loop 130 | vertex 134.7113066405773 -152.11966165224183 19.500000000000032 131 | vertex 141.71130664057725 -152.11966165224183 1.5000000000000198 132 | vertex 141.71130664057725 -152.11966165224183 19.499999999999996 133 | endloop 134 | endfacet 135 | facet normal -1.4099832412739513e-16 1.3557531166095686e-17 1.0 136 | outer loop 137 | vertex 149.21130664057725 -152.11966165224183 1.5000000000000198 138 | vertex 141.71130664057725 -22.11966165224184 1.500000000000017 139 | vertex 141.71130664057725 -152.11966165224183 1.5000000000000198 140 | endloop 141 | endfacet 142 | facet normal -1.4099832412739513e-16 1.3557531166095686e-17 1.0 143 | outer loop 144 | vertex 141.71130664057725 -22.11966165224184 1.500000000000017 145 | vertex 149.21130664057725 -152.11966165224183 1.5000000000000198 146 | vertex 149.21130664057728 -22.11966165224184 1.500000000000019 147 | endloop 148 | endfacet 149 | facet normal -1.0 0.0 0.0 150 | outer loop 151 | vertex 113.2113066405773 -22.11966165224184 11.500000000000007 152 | vertex 113.2113066405773 -152.11966165224183 8.459899447643692e-15 153 | vertex 113.2113066405773 -152.11966165224183 11.500000000000007 154 | endloop 155 | endfacet 156 | facet normal -1.0 0.0 0.0 157 | outer loop 158 | vertex 113.2113066405773 -152.11966165224183 8.459899447643692e-15 159 | vertex 113.2113066405773 -22.11966165224184 11.500000000000007 160 | vertex 113.2113066405773 -22.11966165224184 7.754907827006718e-15 161 | endloop 162 | endfacet 163 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 164 | outer loop 165 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 166 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 167 | vertex 127.71130664057729 -142.11966165224186 1.5000000000000093 168 | endloop 169 | endfacet 170 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 171 | outer loop 172 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 173 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 174 | vertex 127.71130664057729 -107.11966165224187 1.5000000000000089 175 | endloop 176 | endfacet 177 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 178 | outer loop 179 | vertex 127.71130664057729 -107.11966165224187 1.5000000000000089 180 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 181 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 182 | endloop 183 | endfacet 184 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 185 | outer loop 186 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 187 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 188 | vertex 131.19460086176096 -22.11966165224184 1.5000000000000113 189 | endloop 190 | endfacet 191 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 192 | outer loop 193 | vertex 131.19460086176096 -22.11966165224184 1.5000000000000113 194 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 195 | vertex 134.79460086176096 -22.11966165224184 1.5000000000000135 196 | endloop 197 | endfacet 198 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 199 | outer loop 200 | vertex 134.79460086176096 -22.11966165224184 1.5000000000000135 201 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 202 | vertex 138.71130664057725 -22.11966165224184 1.5000000000000155 203 | endloop 204 | endfacet 205 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 206 | outer loop 207 | vertex 131.19460086176096 -22.11966165224184 1.5000000000000113 208 | vertex 136.8160937367537 -14.313690152270913 1.5000000000000113 209 | vertex 129.1731079867682 -14.313690152270913 1.5000000000000113 210 | endloop 211 | endfacet 212 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 213 | outer loop 214 | vertex 136.8160937367537 -14.313690152270913 1.5000000000000113 215 | vertex 131.19460086176096 -22.11966165224184 1.5000000000000113 216 | vertex 134.79460086176096 -22.11966165224184 1.5000000000000135 217 | endloop 218 | endfacet 219 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 220 | outer loop 221 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 222 | vertex 123.71130664057729 -107.11966165224187 1.5000000000000184 223 | vertex 123.71130664057729 -137.11966165224186 1.5000000000000075 224 | endloop 225 | endfacet 226 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 227 | outer loop 228 | vertex 123.71130664057729 -107.11966165224187 1.5000000000000184 229 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 230 | vertex 127.71130664057729 -107.11966165224187 1.5000000000000089 231 | endloop 232 | endfacet 233 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 234 | outer loop 235 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 236 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 237 | vertex 114.7113066405773 -152.11966165224183 1.5000000000000084 238 | endloop 239 | endfacet 240 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 241 | outer loop 242 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 243 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 244 | vertex 123.71130664057729 -22.11966165224184 1.5000000000000078 245 | endloop 246 | endfacet 247 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 248 | outer loop 249 | vertex 123.71130664057729 -22.11966165224184 1.5000000000000078 250 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 251 | vertex 123.71130664057729 -137.11966165224186 1.5000000000000075 252 | endloop 253 | endfacet 254 | facet normal -3.1169485041044084e-16 4.863765621466851e-18 1.0 255 | outer loop 256 | vertex 123.71130664057729 -22.11966165224184 1.5000000000000078 257 | vertex 123.71130664057729 -137.11966165224186 1.5000000000000075 258 | vertex 123.71130664057729 -107.11966165224187 1.5000000000000184 259 | endloop 260 | endfacet 261 | facet normal -1.7155945940963014e-15 1.0 1.3650605316483459e-16 262 | outer loop 263 | vertex 127.71130664057729 -142.11966165224186 19.5 264 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 265 | vertex 127.71130664057729 -142.11966165224186 1.5000000000000093 266 | endloop 267 | endfacet 268 | facet normal -1.7155945940963014e-15 1.0 1.3650605316483459e-16 269 | outer loop 270 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 271 | vertex 127.71130664057729 -142.11966165224186 19.5 272 | vertex 138.71130664057725 -142.11966165224183 4.500000000000017 273 | endloop 274 | endfacet 275 | facet normal -1.7155945940963014e-15 1.0 1.3650605316483459e-16 276 | outer loop 277 | vertex 138.71130664057725 -142.11966165224183 4.500000000000017 278 | vertex 127.71130664057729 -142.11966165224186 19.5 279 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 280 | endloop 281 | endfacet 282 | facet normal -1.7155945940963014e-15 1.0 1.3650605316483459e-16 283 | outer loop 284 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 285 | vertex 127.71130664057729 -142.11966165224186 19.5 286 | vertex 141.71130664057725 -142.11966165224183 19.499999999999996 287 | endloop 288 | endfacet 289 | facet normal -1.0 0.0 0.0 290 | outer loop 291 | vertex 123.71130664057729 -137.11966165224186 19.50000000000001 292 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 293 | vertex 123.71130664057729 -152.11966165224183 19.50000000000002 294 | endloop 295 | endfacet 296 | facet normal -1.0 0.0 0.0 297 | outer loop 298 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 299 | vertex 123.71130664057729 -137.11966165224186 19.50000000000001 300 | vertex 123.71130664057729 -137.11966165224186 1.5000000000000075 301 | endloop 302 | endfacet 303 | facet normal 1.0 2.4620564277701958e-17 -3.951448587779323e-16 304 | outer loop 305 | vertex 141.71130664057725 -152.11966165224183 1.5000000000000198 306 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 307 | vertex 141.71130664057725 -152.11966165224183 19.499999999999996 308 | endloop 309 | endfacet 310 | facet normal 1.0 2.4620564277701958e-17 -3.951448587779323e-16 311 | outer loop 312 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 313 | vertex 141.71130664057725 -152.11966165224183 1.5000000000000198 314 | vertex 141.71130664057725 -22.11966165224184 1.500000000000017 315 | endloop 316 | endfacet 317 | facet normal 1.0 2.4620564277701958e-17 -3.951448587779323e-16 318 | outer loop 319 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 320 | vertex 141.71130664057725 -22.11966165224184 1.500000000000017 321 | vertex 141.71130664057725 -22.11966165224184 4.500000000000018 322 | endloop 323 | endfacet 324 | facet normal 1.0 2.4620564277701958e-17 -3.951448587779323e-16 325 | outer loop 326 | vertex 141.71130664057725 -142.11966165224183 19.499999999999996 327 | vertex 141.71130664057725 -152.11966165224183 19.499999999999996 328 | vertex 141.71130664057725 -142.11966165224183 4.50000000000002 329 | endloop 330 | endfacet 331 | facet normal 1.0 -0.0 -0.0 332 | outer loop 333 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 334 | vertex 127.71130664057729 -142.11966165224186 19.5 335 | vertex 127.71130664057729 -142.11966165224186 1.5000000000000093 336 | endloop 337 | endfacet 338 | facet normal 1.0 -0.0 -0.0 339 | outer loop 340 | vertex 127.71130664057729 -142.11966165224186 19.5 341 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 342 | vertex 127.71130664057729 -137.11966165224186 19.5 343 | endloop 344 | endfacet 345 | facet normal 0.0 -1.0 0.0 346 | outer loop 347 | vertex 130.71130664057733 -152.11966165224183 19.499999999999996 348 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 349 | vertex 130.71130664057733 -152.11966165224183 3.101963130802687e-14 350 | endloop 351 | endfacet 352 | facet normal 0.0 -1.0 0.0 353 | outer loop 354 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 355 | vertex 130.71130664057733 -152.11966165224183 19.499999999999996 356 | vertex 123.71130664057729 -152.11966165224183 19.50000000000002 357 | endloop 358 | endfacet 359 | facet normal 0.0 -1.0 0.0 360 | outer loop 361 | vertex 113.2113066405773 -152.11966165224183 8.459899447643692e-15 362 | vertex 114.7113066405773 -152.11966165224183 1.5000000000000084 363 | vertex 113.2113066405773 -152.11966165224183 11.500000000000007 364 | endloop 365 | endfacet 366 | facet normal 0.0 -1.0 0.0 367 | outer loop 368 | vertex 114.7113066405773 -152.11966165224183 1.5000000000000084 369 | vertex 113.2113066405773 -152.11966165224183 8.459899447643692e-15 370 | vertex 130.71130664057733 -152.11966165224183 3.101963130802687e-14 371 | endloop 372 | endfacet 373 | facet normal 0.0 -1.0 0.0 374 | outer loop 375 | vertex 114.7113066405773 -152.11966165224183 1.5000000000000084 376 | vertex 130.71130664057733 -152.11966165224183 3.101963130802687e-14 377 | vertex 123.71130664057729 -152.11966165224183 1.500000000000007 378 | endloop 379 | endfacet 380 | facet normal 0.0 -1.0 0.0 381 | outer loop 382 | vertex 113.2113066405773 -152.11966165224183 11.500000000000007 383 | vertex 114.7113066405773 -152.11966165224183 1.5000000000000084 384 | vertex 114.7113066405773 -152.11966165224183 11.500000000000007 385 | endloop 386 | endfacet 387 | facet normal 1.0 -2.1692049865753058e-16 0.0 388 | outer loop 389 | vertex 149.21130664057728 -22.11966165224184 1.762479051592436e-14 390 | vertex 149.21130664057725 -152.11966165224183 1.5000000000000198 391 | vertex 149.21130664057725 -152.11966165224183 1.6919798895287383e-14 392 | endloop 393 | endfacet 394 | facet normal 1.0 -2.1692049865753058e-16 0.0 395 | outer loop 396 | vertex 149.21130664057725 -152.11966165224183 1.5000000000000198 397 | vertex 149.21130664057728 -22.11966165224184 1.762479051592436e-14 398 | vertex 149.21130664057728 -22.11966165224184 1.500000000000019 399 | endloop 400 | endfacet 401 | facet normal 0.0 0.0 1.0 402 | outer loop 403 | vertex 114.7113066405773 -152.11966165224183 11.500000000000007 404 | vertex 113.2113066405773 -22.11966165224184 11.500000000000007 405 | vertex 113.2113066405773 -152.11966165224183 11.500000000000007 406 | endloop 407 | endfacet 408 | facet normal 0.0 0.0 1.0 409 | outer loop 410 | vertex 113.2113066405773 -22.11966165224184 11.500000000000007 411 | vertex 114.7113066405773 -152.11966165224183 11.500000000000007 412 | vertex 114.7113066405773 -22.11966165224184 11.500000000000007 413 | endloop 414 | endfacet 415 | facet normal -0.0 1.0 -0.0 416 | outer loop 417 | vertex 138.71130664057725 -22.11966165224184 4.500000000000016 418 | vertex 141.71130664057725 -22.11966165224184 1.500000000000017 419 | vertex 138.71130664057725 -22.11966165224184 1.5000000000000155 420 | endloop 421 | endfacet 422 | facet normal -0.0 1.0 -0.0 423 | outer loop 424 | vertex 141.71130664057725 -22.11966165224184 1.500000000000017 425 | vertex 138.71130664057725 -22.11966165224184 4.500000000000016 426 | vertex 141.71130664057725 -22.11966165224184 4.500000000000018 427 | endloop 428 | endfacet 429 | facet normal -0.0 1.0 -0.0 430 | outer loop 431 | vertex 141.71130664057725 -22.11966165224184 4.500000000000018 432 | vertex 138.71130664057725 -22.11966165224184 4.500000000000016 433 | vertex 139.71130664057725 -22.11966165224184 4.500000000000016 434 | endloop 435 | endfacet 436 | facet normal -0.0 1.0 -0.0 437 | outer loop 438 | vertex 134.79460086176096 -22.11966165224184 4.511946372076636e-14 439 | vertex 149.21130664057728 -22.11966165224184 1.500000000000019 440 | vertex 149.21130664057728 -22.11966165224184 1.762479051592436e-14 441 | endloop 442 | endfacet 443 | facet normal -0.0 1.0 -0.0 444 | outer loop 445 | vertex 149.21130664057728 -22.11966165224184 1.500000000000019 446 | vertex 134.79460086176096 -22.11966165224184 4.511946372076636e-14 447 | vertex 134.79460086176096 -22.11966165224184 1.5000000000000135 448 | endloop 449 | endfacet 450 | facet normal -0.0 1.0 -0.0 451 | outer loop 452 | vertex 149.21130664057728 -22.11966165224184 1.500000000000019 453 | vertex 134.79460086176096 -22.11966165224184 1.5000000000000135 454 | vertex 138.71130664057725 -22.11966165224184 1.5000000000000155 455 | endloop 456 | endfacet 457 | facet normal -0.0 1.0 -0.0 458 | outer loop 459 | vertex 149.21130664057728 -22.11966165224184 1.500000000000019 460 | vertex 138.71130664057725 -22.11966165224184 1.5000000000000155 461 | vertex 141.71130664057725 -22.11966165224184 1.500000000000017 462 | endloop 463 | endfacet 464 | facet normal -0.0 1.0 -0.0 465 | outer loop 466 | vertex 113.2113066405773 -22.11966165224184 7.754907827006718e-15 467 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 468 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 469 | endloop 470 | endfacet 471 | facet normal -0.0 1.0 -0.0 472 | outer loop 473 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 474 | vertex 113.2113066405773 -22.11966165224184 7.754907827006718e-15 475 | vertex 113.2113066405773 -22.11966165224184 11.500000000000007 476 | endloop 477 | endfacet 478 | facet normal -0.0 1.0 -0.0 479 | outer loop 480 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 481 | vertex 113.2113066405773 -22.11966165224184 11.500000000000007 482 | vertex 114.7113066405773 -22.11966165224184 11.500000000000007 483 | endloop 484 | endfacet 485 | facet normal -0.0 1.0 -0.0 486 | outer loop 487 | vertex 123.71130664057728 -22.11966165224184 19.50000000000001 488 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 489 | vertex 123.71130664057729 -22.11966165224184 1.5000000000000078 490 | endloop 491 | endfacet 492 | facet normal -0.0 1.0 -0.0 493 | outer loop 494 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 495 | vertex 123.71130664057728 -22.11966165224184 19.50000000000001 496 | vertex 127.71130664057729 -22.11966165224184 19.50000000000001 497 | endloop 498 | endfacet 499 | facet normal -0.0 1.0 -0.0 500 | outer loop 501 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 502 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 503 | vertex 131.19460086176096 -22.11966165224184 1.5000000000000113 504 | endloop 505 | endfacet 506 | facet normal -0.0 1.0 -0.0 507 | outer loop 508 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 509 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 510 | vertex 123.71130664057729 -22.11966165224184 1.5000000000000078 511 | endloop 512 | endfacet 513 | facet normal -0.0 1.0 -0.0 514 | outer loop 515 | vertex 123.71130664057729 -22.11966165224184 1.5000000000000078 516 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 517 | vertex 114.7113066405773 -22.11966165224184 1.5000000000000078 518 | endloop 519 | endfacet 520 | facet normal -0.0 1.0 -0.0 521 | outer loop 522 | vertex 129.1731079867682 -14.313690152270913 4.511946372076636e-14 523 | vertex 136.8160937367537 -14.313690152270913 1.5000000000000113 524 | vertex 136.8160937367537 -14.313690152270913 1.1456113835350834e-14 525 | endloop 526 | endfacet 527 | facet normal -0.0 1.0 -0.0 528 | outer loop 529 | vertex 136.8160937367537 -14.313690152270913 1.5000000000000113 530 | vertex 129.1731079867682 -14.313690152270913 4.511946372076636e-14 531 | vertex 129.1731079867682 -14.313690152270913 1.5000000000000113 532 | endloop 533 | endfacet 534 | facet normal 0.9680654772930206 -0.2506974903612644 -6.039323270208995e-17 535 | outer loop 536 | vertex 136.8160937367537 -14.313690152270913 1.1456113835350834e-14 537 | vertex 134.79460086176096 -22.11966165224184 1.5000000000000135 538 | vertex 134.79460086176096 -22.11966165224184 4.511946372076636e-14 539 | endloop 540 | endfacet 541 | facet normal 0.9680654772930206 -0.2506974903612644 -6.039323270208995e-17 542 | outer loop 543 | vertex 134.79460086176096 -22.11966165224184 1.5000000000000135 544 | vertex 136.8160937367537 -14.313690152270913 1.1456113835350834e-14 545 | vertex 136.8160937367537 -14.313690152270913 1.5000000000000113 546 | endloop 547 | endfacet 548 | facet normal -0.9680654772930194 -0.25069749036126965 2.800761045781023e-17 549 | outer loop 550 | vertex 129.1731079867682 -14.313690152270913 1.5000000000000113 551 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 552 | vertex 131.19460086176096 -22.11966165224184 1.5000000000000113 553 | endloop 554 | endfacet 555 | facet normal -0.9680654772930194 -0.25069749036126965 2.800761045781023e-17 556 | outer loop 557 | vertex 131.19460086176096 -22.11966165224184 1.127986593019159e-14 558 | vertex 129.1731079867682 -14.313690152270913 1.5000000000000113 559 | vertex 129.1731079867682 -14.313690152270913 4.511946372076636e-14 560 | endloop 561 | endfacet 562 | facet normal -1.0 0.0 0.0 563 | outer loop 564 | vertex 138.71130664057725 -22.11966165224184 4.500000000000016 565 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 566 | vertex 138.71130664057725 -142.11966165224183 4.500000000000017 567 | endloop 568 | endfacet 569 | facet normal -1.0 0.0 0.0 570 | outer loop 571 | vertex 138.71130664057725 -142.11966165224183 1.500000000000018 572 | vertex 138.71130664057725 -22.11966165224184 4.500000000000016 573 | vertex 138.71130664057725 -22.11966165224184 1.5000000000000155 574 | endloop 575 | endfacet 576 | facet normal 1.0 -0.0 -0.0 577 | outer loop 578 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 579 | vertex 127.71130664057729 -107.11966165224187 19.50000000000001 580 | vertex 127.71130664057729 -107.11966165224187 1.5000000000000089 581 | endloop 582 | endfacet 583 | facet normal 1.0 -0.0 -0.0 584 | outer loop 585 | vertex 127.71130664057729 -107.11966165224187 19.50000000000001 586 | vertex 127.71130664057729 -22.11966165224184 1.5000000000000093 587 | vertex 127.71130664057729 -22.11966165224184 19.50000000000001 588 | endloop 589 | endfacet 590 | facet normal 1.695692043515479e-32 3.317607626526938e-17 1.0 591 | outer loop 592 | vertex 123.71130664057729 -107.11966165224187 19.50000000000001 593 | vertex 127.71130664057729 -22.11966165224184 19.50000000000001 594 | vertex 123.71130664057728 -22.11966165224184 19.50000000000001 595 | endloop 596 | endfacet 597 | facet normal 1.695692043515479e-32 3.317607626526938e-17 1.0 598 | outer loop 599 | vertex 127.71130664057729 -22.11966165224184 19.50000000000001 600 | vertex 123.71130664057729 -107.11966165224187 19.50000000000001 601 | vertex 127.71130664057729 -107.11966165224187 19.50000000000001 602 | endloop 603 | endfacet 604 | facet normal -1.0 -1.1897627350303506e-16 -5.834413412168065e-16 605 | outer loop 606 | vertex 123.71130664057728 -22.11966165224184 19.50000000000001 607 | vertex 123.71130664057729 -107.11966165224187 4.5000000000000115 608 | vertex 123.71130664057729 -107.11966165224187 19.50000000000001 609 | endloop 610 | endfacet 611 | facet normal -1.0 -1.1897627350303506e-16 -5.834413412168065e-16 612 | outer loop 613 | vertex 123.71130664057729 -107.11966165224187 4.5000000000000115 614 | vertex 123.71130664057728 -22.11966165224184 19.50000000000001 615 | vertex 123.71130664057729 -107.11966165224187 1.5000000000000184 616 | endloop 617 | endfacet 618 | facet normal -1.0 -1.1897627350303506e-16 -5.834413412168065e-16 619 | outer loop 620 | vertex 123.71130664057729 -107.11966165224187 1.5000000000000184 621 | vertex 123.71130664057728 -22.11966165224184 19.50000000000001 622 | vertex 123.71130664057729 -22.11966165224184 1.5000000000000078 623 | endloop 624 | endfacet 625 | facet normal 0.0 -1.0 0.0 626 | outer loop 627 | vertex 127.71130664057729 -107.11966165224187 19.50000000000001 628 | vertex 123.71130664057729 -107.11966165224187 1.5000000000000184 629 | vertex 127.71130664057729 -107.11966165224187 1.5000000000000089 630 | endloop 631 | endfacet 632 | facet normal 0.0 -1.0 0.0 633 | outer loop 634 | vertex 123.71130664057729 -107.11966165224187 1.5000000000000184 635 | vertex 127.71130664057729 -107.11966165224187 19.50000000000001 636 | vertex 123.71130664057729 -107.11966165224187 4.5000000000000115 637 | endloop 638 | endfacet 639 | facet normal 0.0 -1.0 0.0 640 | outer loop 641 | vertex 123.71130664057729 -107.11966165224187 4.5000000000000115 642 | vertex 127.71130664057729 -107.11966165224187 19.50000000000001 643 | vertex 123.71130664057729 -107.11966165224187 19.50000000000001 644 | endloop 645 | endfacet 646 | facet normal -0.0 1.0 -0.0 647 | outer loop 648 | vertex 123.71130664057729 -137.11966165224186 19.50000000000001 649 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 650 | vertex 123.71130664057729 -137.11966165224186 1.5000000000000075 651 | endloop 652 | endfacet 653 | facet normal -0.0 1.0 -0.0 654 | outer loop 655 | vertex 127.71130664057729 -137.11966165224186 1.5000000000000093 656 | vertex 123.71130664057729 -137.11966165224186 19.50000000000001 657 | vertex 127.71130664057729 -137.11966165224186 19.5 658 | endloop 659 | endfacet 660 | facet normal -0.9701425001453319 0.24253562503633377 -1.1221645563326186e-15 661 | outer loop 662 | vertex 136.4613066405773 -145.11966165224183 19.49999999999997 663 | vertex 134.7113066405773 -152.11966165224183 1.4099832412739488e-14 664 | vertex 134.7113066405773 -152.11966165224183 19.500000000000032 665 | endloop 666 | endfacet 667 | facet normal -0.9701425001453319 0.24253562503633377 -1.1221645563326186e-15 668 | outer loop 669 | vertex 134.7113066405773 -152.11966165224183 1.4099832412739488e-14 670 | vertex 136.4613066405773 -145.11966165224183 19.49999999999997 671 | vertex 136.46130664057736 -145.11966165224183 9.164891068280651e-15 672 | endloop 673 | endfacet 674 | facet normal 0.0 -1.0 0.0 675 | outer loop 676 | vertex 136.4613066405773 -145.11966165224183 19.49999999999997 677 | vertex 128.9613066405773 -145.11966165224183 1.0046130594076817e-14 678 | vertex 136.46130664057736 -145.11966165224183 9.164891068280651e-15 679 | endloop 680 | endfacet 681 | facet normal 0.0 -1.0 0.0 682 | outer loop 683 | vertex 128.9613066405773 -145.11966165224183 1.0046130594076817e-14 684 | vertex 136.4613066405773 -145.11966165224183 19.49999999999997 685 | vertex 128.96130664057728 -145.11966165224183 19.50000000000001 686 | endloop 687 | endfacet 688 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 689 | outer loop 690 | vertex 130.71130664057733 -152.11966165224183 19.499999999999996 691 | vertex 123.71130664057729 -137.11966165224186 19.50000000000001 692 | vertex 123.71130664057729 -152.11966165224183 19.50000000000002 693 | endloop 694 | endfacet 695 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 696 | outer loop 697 | vertex 123.71130664057729 -137.11966165224186 19.50000000000001 698 | vertex 130.71130664057733 -152.11966165224183 19.499999999999996 699 | vertex 127.71130664057729 -142.11966165224186 19.5 700 | endloop 701 | endfacet 702 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 703 | outer loop 704 | vertex 127.71130664057729 -142.11966165224186 19.5 705 | vertex 130.71130664057733 -152.11966165224183 19.499999999999996 706 | vertex 128.96130664057728 -145.11966165224183 19.50000000000001 707 | endloop 708 | endfacet 709 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 710 | outer loop 711 | vertex 141.71130664057725 -152.11966165224183 19.499999999999996 712 | vertex 136.4613066405773 -145.11966165224183 19.49999999999997 713 | vertex 134.7113066405773 -152.11966165224183 19.500000000000032 714 | endloop 715 | endfacet 716 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 717 | outer loop 718 | vertex 128.96130664057728 -145.11966165224183 19.50000000000001 719 | vertex 141.71130664057725 -142.11966165224183 19.499999999999996 720 | vertex 127.71130664057729 -142.11966165224186 19.5 721 | endloop 722 | endfacet 723 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 724 | outer loop 725 | vertex 141.71130664057725 -142.11966165224183 19.499999999999996 726 | vertex 128.96130664057728 -145.11966165224183 19.50000000000001 727 | vertex 136.4613066405773 -145.11966165224183 19.49999999999997 728 | endloop 729 | endfacet 730 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 731 | outer loop 732 | vertex 141.71130664057725 -142.11966165224183 19.499999999999996 733 | vertex 136.4613066405773 -145.11966165224183 19.49999999999997 734 | vertex 141.71130664057725 -152.11966165224183 19.499999999999996 735 | endloop 736 | endfacet 737 | facet normal 1.1993606475361572e-15 1.002345473186867e-15 1.0 738 | outer loop 739 | vertex 127.71130664057729 -137.11966165224186 19.5 740 | vertex 123.71130664057729 -137.11966165224186 19.50000000000001 741 | vertex 127.71130664057729 -142.11966165224186 19.5 742 | endloop 743 | endfacet 744 | facet normal 0.9701425001453307 0.2425356250363381 5.653653489920069e-16 745 | outer loop 746 | vertex 128.9613066405773 -145.11966165224183 1.0046130594076817e-14 747 | vertex 130.71130664057733 -152.11966165224183 19.499999999999996 748 | vertex 130.71130664057733 -152.11966165224183 3.101963130802687e-14 749 | endloop 750 | endfacet 751 | facet normal 0.9701425001453307 0.2425356250363381 5.653653489920069e-16 752 | outer loop 753 | vertex 130.71130664057733 -152.11966165224183 19.499999999999996 754 | vertex 128.9613066405773 -145.11966165224183 1.0046130594076817e-14 755 | vertex 128.96130664057728 -145.11966165224183 19.50000000000001 756 | endloop 757 | endfacet 758 | endsolid V3_Frame_CIS_26 759 | -------------------------------------------------------------------------------- /3D Design/V3_Frame_CIS_26_2.stl: -------------------------------------------------------------------------------- 1 | solid V3_Frame_CIS_26 2 | facet normal -1.0 2.819966482547897e-16 -6.26659218343977e-16 3 | outer loop 4 | vertex 119.20184761129109 52.02082290570832 19.500000000000064 5 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 6 | vertex 119.20184761129107 12.020822905708318 19.500000000000057 7 | endloop 8 | endfacet 9 | facet normal -1.0 2.819966482547897e-16 -6.26659218343977e-16 10 | outer loop 11 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 12 | vertex 119.20184761129109 52.02082290570832 19.500000000000064 13 | vertex 119.20184761129109 52.02082290570832 1.5000000000000546 14 | endloop 15 | endfacet 16 | facet normal 1.0 -0.0 -0.0 17 | outer loop 18 | vertex 123.20184761129109 132.02082290570831 1.5000000000000564 19 | vertex 123.20184761129109 92.02082290570831 19.500000000000064 20 | vertex 123.20184761129109 92.02082290570831 1.5000000000000564 21 | endloop 22 | endfacet 23 | facet normal 1.0 -0.0 -0.0 24 | outer loop 25 | vertex 123.20184761129109 92.02082290570831 19.500000000000064 26 | vertex 123.20184761129109 132.02082290570831 1.5000000000000564 27 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 28 | endloop 29 | endfacet 30 | facet normal -1.4099832412739387e-16 -2.7115062332191084e-18 1.0 31 | outer loop 32 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 33 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 34 | vertex 137.20184761129104 12.020822905708318 1.5000000000000642 35 | endloop 36 | endfacet 37 | facet normal -1.4099832412739387e-16 -2.7115062332191084e-18 1.0 38 | outer loop 39 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 40 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 41 | vertex 144.7018476112911 142.0208229057083 1.5000000000000657 42 | endloop 43 | endfacet 44 | facet normal 0.0 -1.0 0.0 45 | outer loop 46 | vertex 134.20184761129104 132.02082290570831 1.5000000000000628 47 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 48 | vertex 123.20184761129109 132.02082290570831 1.5000000000000564 49 | endloop 50 | endfacet 51 | facet normal 0.0 -1.0 0.0 52 | outer loop 53 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 54 | vertex 134.20184761129104 132.02082290570831 1.5000000000000628 55 | vertex 134.20184761129104 132.02082290570831 4.500000000000063 56 | endloop 57 | endfacet 58 | facet normal 0.0 -1.0 0.0 59 | outer loop 60 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 61 | vertex 134.20184761129104 132.02082290570831 4.500000000000063 62 | vertex 137.20184761129104 132.02082290570831 4.500000000000065 63 | endloop 64 | endfacet 65 | facet normal 0.0 -1.0 0.0 66 | outer loop 67 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 68 | vertex 137.20184761129104 132.02082290570831 4.500000000000065 69 | vertex 137.20184761129104 132.02082290570831 19.500000000000057 70 | endloop 71 | endfacet 72 | facet normal -6.38953475430449e-15 1.0 -6.53687769982815e-16 73 | outer loop 74 | vertex 108.70184761129111 142.0208229057083 5.4989346409684e-14 75 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 76 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 77 | endloop 78 | endfacet 79 | facet normal -6.38953475430449e-15 1.0 -6.53687769982815e-16 80 | outer loop 81 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 82 | vertex 108.70184761129111 142.0208229057083 5.4989346409684e-14 83 | vertex 108.70184761129111 142.0208229057083 11.500000000000053 84 | endloop 85 | endfacet 86 | facet normal -6.38953475430449e-15 1.0 -6.53687769982815e-16 87 | outer loop 88 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 89 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 90 | vertex 119.20184761129109 142.02082290570834 1.5000000000000537 91 | endloop 92 | endfacet 93 | facet normal -6.38953475430449e-15 1.0 -6.53687769982815e-16 94 | outer loop 95 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 96 | vertex 108.70184761129111 142.0208229057083 11.500000000000053 97 | vertex 110.2018476112911 142.0208229057083 11.500000000000053 98 | endloop 99 | endfacet 100 | facet normal -6.38953475430449e-15 1.0 -6.53687769982815e-16 101 | outer loop 102 | vertex 119.20184761129109 142.02082290570834 1.5000000000000537 103 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 104 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 105 | endloop 106 | endfacet 107 | facet normal -6.38953475430449e-15 1.0 -6.53687769982815e-16 108 | outer loop 109 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 110 | vertex 119.20184761129109 142.02082290570834 1.5000000000000537 111 | vertex 119.20184761129109 142.02082290570834 19.500000000000068 112 | endloop 113 | endfacet 114 | facet normal -1.0 0.0 0.0 115 | outer loop 116 | vertex 119.20184761129109 142.02082290570834 19.500000000000068 117 | vertex 119.20184761129109 92.02082290570831 1.500000000000054 118 | vertex 119.20184761129109 92.02082290570831 19.500000000000068 119 | endloop 120 | endfacet 121 | facet normal -1.0 0.0 0.0 122 | outer loop 123 | vertex 119.20184761129109 92.02082290570831 1.500000000000054 124 | vertex 119.20184761129109 142.02082290570834 19.500000000000068 125 | vertex 119.20184761129109 142.02082290570834 1.5000000000000537 126 | endloop 127 | endfacet 128 | facet normal 5.453349880209459e-16 1.0 -1.7073771622627294e-15 129 | outer loop 130 | vertex 130.0018476112911 142.0208229057083 4.934941344458821e-14 131 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 132 | vertex 144.7018476112911 142.0208229057083 6.626921233987559e-14 133 | endloop 134 | endfacet 135 | facet normal 5.453349880209459e-16 1.0 -1.7073771622627294e-15 136 | outer loop 137 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 138 | vertex 130.0018476112911 142.0208229057083 4.934941344458821e-14 139 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 140 | endloop 141 | endfacet 142 | facet normal 5.453349880209459e-16 1.0 -1.7073771622627294e-15 143 | outer loop 144 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 145 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 146 | vertex 137.20184761129104 142.02082290570834 19.500000000000046 147 | endloop 148 | endfacet 149 | facet normal 5.453349880209459e-16 1.0 -1.7073771622627294e-15 150 | outer loop 151 | vertex 144.7018476112911 142.0208229057083 1.5000000000000657 152 | vertex 144.7018476112911 142.0208229057083 6.626921233987559e-14 153 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 154 | endloop 155 | endfacet 156 | facet normal 1.0 -0.0 -0.0 157 | outer loop 158 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 159 | vertex 137.20184761129104 12.020822905708318 4.500000000000065 160 | vertex 137.20184761129104 12.020822905708318 1.5000000000000642 161 | endloop 162 | endfacet 163 | facet normal 1.0 -0.0 -0.0 164 | outer loop 165 | vertex 137.20184761129104 12.020822905708318 4.500000000000065 166 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 167 | vertex 137.20184761129104 132.02082290570831 4.500000000000065 168 | endloop 169 | endfacet 170 | facet normal 1.0 -0.0 -0.0 171 | outer loop 172 | vertex 137.20184761129104 132.02082290570831 4.500000000000065 173 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 174 | vertex 137.20184761129104 132.02082290570831 19.500000000000057 175 | endloop 176 | endfacet 177 | facet normal 1.0 -0.0 -0.0 178 | outer loop 179 | vertex 137.20184761129104 132.02082290570831 19.500000000000057 180 | vertex 137.20184761129104 142.02082290570834 1.5000000000000657 181 | vertex 137.20184761129104 142.02082290570834 19.500000000000046 182 | endloop 183 | endfacet 184 | facet normal 3.5249581031848595e-16 -1.0574874309554624e-16 1.0 185 | outer loop 186 | vertex 123.20184761129109 12.020822905708318 19.500000000000057 187 | vertex 119.20184761129109 52.02082290570832 19.500000000000064 188 | vertex 119.20184761129107 12.020822905708318 19.500000000000057 189 | endloop 190 | endfacet 191 | facet normal 3.5249581031848595e-16 -1.0574874309554624e-16 1.0 192 | outer loop 193 | vertex 119.20184761129109 52.02082290570832 19.500000000000064 194 | vertex 123.20184761129109 12.020822905708318 19.500000000000057 195 | vertex 123.20184761129109 52.02082290570832 19.50000000000006 196 | endloop 197 | endfacet 198 | facet normal 1.0 -0.0 -0.0 199 | outer loop 200 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 201 | vertex 123.20184761129109 12.020822905708318 19.500000000000057 202 | vertex 123.20184761129109 12.020822905708318 1.5000000000000564 203 | endloop 204 | endfacet 205 | facet normal 1.0 -0.0 -0.0 206 | outer loop 207 | vertex 123.20184761129109 12.020822905708318 19.500000000000057 208 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 209 | vertex 123.20184761129109 52.02082290570832 19.50000000000006 210 | endloop 211 | endfacet 212 | facet normal -0.0 1.0 -0.0 213 | outer loop 214 | vertex 119.20184761129109 52.02082290570832 19.500000000000064 215 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 216 | vertex 119.20184761129109 52.02082290570832 1.5000000000000546 217 | endloop 218 | endfacet 219 | facet normal -0.0 1.0 -0.0 220 | outer loop 221 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 222 | vertex 119.20184761129109 52.02082290570832 19.500000000000064 223 | vertex 123.20184761129109 52.02082290570832 19.50000000000006 224 | endloop 225 | endfacet 226 | facet normal 0.0 -1.0 0.0 227 | outer loop 228 | vertex 123.20184761129109 92.02082290570831 1.5000000000000564 229 | vertex 119.20184761129109 92.02082290570831 19.500000000000068 230 | vertex 119.20184761129109 92.02082290570831 1.500000000000054 231 | endloop 232 | endfacet 233 | facet normal 0.0 -1.0 0.0 234 | outer loop 235 | vertex 119.20184761129109 92.02082290570831 19.500000000000068 236 | vertex 123.20184761129109 92.02082290570831 1.5000000000000564 237 | vertex 123.20184761129109 92.02082290570831 19.500000000000064 238 | endloop 239 | endfacet 240 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 241 | outer loop 242 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 243 | vertex 119.20184761129109 92.02082290570831 1.500000000000054 244 | vertex 119.20184761129109 52.02082290570832 1.5000000000000546 245 | endloop 246 | endfacet 247 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 248 | outer loop 249 | vertex 119.20184761129109 92.02082290570831 1.500000000000054 250 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 251 | vertex 123.20184761129109 92.02082290570831 1.5000000000000564 252 | endloop 253 | endfacet 254 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 255 | outer loop 256 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 257 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 258 | vertex 110.2018476112911 12.020822905708318 1.500000000000055 259 | endloop 260 | endfacet 261 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 262 | outer loop 263 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 264 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 265 | vertex 119.20184761129109 142.02082290570834 1.5000000000000537 266 | endloop 267 | endfacet 268 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 269 | outer loop 270 | vertex 119.20184761129109 142.02082290570834 1.5000000000000537 271 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 272 | vertex 119.20184761129109 52.02082290570832 1.5000000000000546 273 | endloop 274 | endfacet 275 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 276 | outer loop 277 | vertex 119.20184761129109 142.02082290570834 1.5000000000000537 278 | vertex 119.20184761129109 52.02082290570832 1.5000000000000546 279 | vertex 119.20184761129109 92.02082290570831 1.500000000000054 280 | endloop 281 | endfacet 282 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 283 | outer loop 284 | vertex 123.20184761129109 12.020822905708318 1.5000000000000564 285 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 286 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 287 | endloop 288 | endfacet 289 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 290 | outer loop 291 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 292 | vertex 123.20184761129109 12.020822905708318 1.5000000000000564 293 | vertex 126.48514183247477 12.020822905708318 1.5000000000000586 294 | endloop 295 | endfacet 296 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 297 | outer loop 298 | vertex 123.20184761129109 52.02082290570832 1.5000000000000564 299 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 300 | vertex 123.20184761129109 92.02082290570831 1.5000000000000564 301 | endloop 302 | endfacet 303 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 304 | outer loop 305 | vertex 123.20184761129109 92.02082290570831 1.5000000000000564 306 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 307 | vertex 123.20184761129109 132.02082290570831 1.5000000000000564 308 | endloop 309 | endfacet 310 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 311 | outer loop 312 | vertex 134.20184761129104 12.020822905708318 1.5000000000000628 313 | vertex 132.48514183247474 20.020822905708304 1.5000000000000586 314 | vertex 130.48514183247477 12.020822905708318 1.5000000000000564 315 | endloop 316 | endfacet 317 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 318 | outer loop 319 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 320 | vertex 134.20184761129104 132.02082290570831 1.5000000000000628 321 | vertex 123.20184761129109 132.02082290570831 1.5000000000000564 322 | endloop 323 | endfacet 324 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 325 | outer loop 326 | vertex 134.20184761129104 132.02082290570831 1.5000000000000628 327 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 328 | vertex 132.48514183247474 20.020822905708304 1.5000000000000586 329 | endloop 330 | endfacet 331 | facet normal -2.6442681635258606e-16 -1.6897596336279542e-18 1.0 332 | outer loop 333 | vertex 134.20184761129104 132.02082290570831 1.5000000000000628 334 | vertex 132.48514183247474 20.020822905708304 1.5000000000000586 335 | vertex 134.20184761129104 12.020822905708318 1.5000000000000628 336 | endloop 337 | endfacet 338 | facet normal 0.0 -1.0 0.0 339 | outer loop 340 | vertex 108.70184761129111 12.020822905708318 5.4989346409684e-14 341 | vertex 110.2018476112911 12.020822905708318 1.500000000000055 342 | vertex 108.70184761129111 12.020822905708318 11.500000000000055 343 | endloop 344 | endfacet 345 | facet normal 0.0 -1.0 0.0 346 | outer loop 347 | vertex 110.2018476112911 12.020822905708318 1.500000000000055 348 | vertex 108.70184761129111 12.020822905708318 5.4989346409684e-14 349 | vertex 126.48514183247477 12.020822905708318 5.851430451286887e-14 350 | endloop 351 | endfacet 352 | facet normal 0.0 -1.0 0.0 353 | outer loop 354 | vertex 110.2018476112911 12.020822905708318 1.500000000000055 355 | vertex 126.48514183247477 12.020822905708318 5.851430451286887e-14 356 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 357 | endloop 358 | endfacet 359 | facet normal 0.0 -1.0 0.0 360 | outer loop 361 | vertex 108.70184761129111 12.020822905708318 11.500000000000055 362 | vertex 110.2018476112911 12.020822905708318 1.500000000000055 363 | vertex 110.2018476112911 12.020822905708318 11.500000000000055 364 | endloop 365 | endfacet 366 | facet normal 0.0 -1.0 0.0 367 | outer loop 368 | vertex 126.48514183247477 12.020822905708318 5.851430451286887e-14 369 | vertex 123.20184761129109 12.020822905708318 1.5000000000000564 370 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 371 | endloop 372 | endfacet 373 | facet normal 0.0 -1.0 0.0 374 | outer loop 375 | vertex 123.20184761129109 12.020822905708318 1.5000000000000564 376 | vertex 126.48514183247477 12.020822905708318 5.851430451286887e-14 377 | vertex 126.48514183247477 12.020822905708318 1.5000000000000586 378 | endloop 379 | endfacet 380 | facet normal 0.0 -1.0 0.0 381 | outer loop 382 | vertex 123.20184761129109 12.020822905708318 1.5000000000000564 383 | vertex 119.20184761129107 12.020822905708318 19.500000000000057 384 | vertex 119.20184761129109 12.020822905708318 1.500000000000055 385 | endloop 386 | endfacet 387 | facet normal 0.0 -1.0 0.0 388 | outer loop 389 | vertex 119.20184761129107 12.020822905708318 19.500000000000057 390 | vertex 123.20184761129109 12.020822905708318 1.5000000000000564 391 | vertex 123.20184761129109 12.020822905708318 19.500000000000057 392 | endloop 393 | endfacet 394 | facet normal 0.9701425001453307 0.24253562503633816 -1.9874499898737484e-28 395 | outer loop 396 | vertex 124.48514183247472 20.020822905708304 8.107403637325206e-14 397 | vertex 126.48514183247477 12.020822905708318 1.5000000000000586 398 | vertex 126.48514183247477 12.020822905708318 5.851430451286887e-14 399 | endloop 400 | endfacet 401 | facet normal 0.9701425001453307 0.24253562503633816 -1.9874499898737484e-28 402 | outer loop 403 | vertex 126.48514183247477 12.020822905708318 1.5000000000000586 404 | vertex 124.48514183247472 20.020822905708304 8.107403637325206e-14 405 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 406 | endloop 407 | endfacet 408 | facet normal 0.0 -1.0 0.0 409 | outer loop 410 | vertex 132.48514183247474 20.020822905708304 1.5000000000000586 411 | vertex 124.48514183247472 20.020822905708304 8.107403637325206e-14 412 | vertex 132.48514183247474 20.020822905708304 4.7234438582677284e-14 413 | endloop 414 | endfacet 415 | facet normal 0.0 -1.0 0.0 416 | outer loop 417 | vertex 124.48514183247472 20.020822905708304 8.107403637325206e-14 418 | vertex 132.48514183247474 20.020822905708304 1.5000000000000586 419 | vertex 124.48514183247472 20.020822905708304 1.5000000000000564 420 | endloop 421 | endfacet 422 | facet normal -0.9701425001453319 0.24253562503633297 0.0 423 | outer loop 424 | vertex 132.48514183247474 20.020822905708304 1.5000000000000586 425 | vertex 130.48514183247477 12.020822905708318 9.235390230344364e-14 426 | vertex 130.48514183247477 12.020822905708318 1.5000000000000564 427 | endloop 428 | endfacet 429 | facet normal -0.9701425001453319 0.24253562503633297 0.0 430 | outer loop 431 | vertex 130.48514183247477 12.020822905708318 9.235390230344364e-14 432 | vertex 132.48514183247474 20.020822905708304 1.5000000000000586 433 | vertex 132.48514183247474 20.020822905708304 4.7234438582677284e-14 434 | endloop 435 | endfacet 436 | facet normal 0.0 -1.0 0.0 437 | outer loop 438 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 439 | vertex 130.48514183247477 12.020822905708318 9.235390230344364e-14 440 | vertex 144.70184761129107 12.020822905708318 6.485922909860164e-14 441 | endloop 442 | endfacet 443 | facet normal 0.0 -1.0 0.0 444 | outer loop 445 | vertex 130.48514183247477 12.020822905708318 9.235390230344364e-14 446 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 447 | vertex 130.48514183247477 12.020822905708318 1.5000000000000564 448 | endloop 449 | endfacet 450 | facet normal 0.0 -1.0 0.0 451 | outer loop 452 | vertex 130.48514183247477 12.020822905708318 1.5000000000000564 453 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 454 | vertex 134.20184761129104 12.020822905708318 1.5000000000000628 455 | endloop 456 | endfacet 457 | facet normal 0.0 -1.0 0.0 458 | outer loop 459 | vertex 134.20184761129104 12.020822905708318 1.5000000000000628 460 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 461 | vertex 137.20184761129104 12.020822905708318 1.5000000000000642 462 | endloop 463 | endfacet 464 | facet normal 0.0 -1.0 0.0 465 | outer loop 466 | vertex 137.20184761129104 12.020822905708318 1.5000000000000642 467 | vertex 134.20184761129104 12.020822905708318 4.500000000000063 468 | vertex 134.20184761129104 12.020822905708318 1.5000000000000628 469 | endloop 470 | endfacet 471 | facet normal 0.0 -1.0 0.0 472 | outer loop 473 | vertex 134.20184761129104 12.020822905708318 4.500000000000063 474 | vertex 137.20184761129104 12.020822905708318 1.5000000000000642 475 | vertex 137.20184761129104 12.020822905708318 4.500000000000065 476 | endloop 477 | endfacet 478 | facet normal -7.049916206369704e-16 -5.522368724092875e-34 1.0 479 | outer loop 480 | vertex 137.20184761129104 12.020822905708318 4.500000000000065 481 | vertex 134.20184761129104 132.02082290570831 4.500000000000063 482 | vertex 134.20184761129104 12.020822905708318 4.500000000000063 483 | endloop 484 | endfacet 485 | facet normal -7.049916206369704e-16 -5.522368724092875e-34 1.0 486 | outer loop 487 | vertex 134.20184761129104 132.02082290570831 4.500000000000063 488 | vertex 137.20184761129104 12.020822905708318 4.500000000000065 489 | vertex 137.20184761129104 132.02082290570831 4.500000000000065 490 | endloop 491 | endfacet 492 | facet normal -1.0 0.0 0.0 493 | outer loop 494 | vertex 134.20184761129104 132.02082290570831 4.500000000000063 495 | vertex 134.20184761129104 12.020822905708318 1.5000000000000628 496 | vertex 134.20184761129104 12.020822905708318 4.500000000000063 497 | endloop 498 | endfacet 499 | facet normal -1.0 0.0 0.0 500 | outer loop 501 | vertex 134.20184761129104 12.020822905708318 1.5000000000000628 502 | vertex 134.20184761129104 132.02082290570831 4.500000000000063 503 | vertex 134.20184761129104 132.02082290570831 1.5000000000000628 504 | endloop 505 | endfacet 506 | facet normal -1.0 0.0 0.0 507 | outer loop 508 | vertex 108.70184761129111 142.0208229057083 11.500000000000053 509 | vertex 108.70184761129111 12.020822905708318 5.4989346409684e-14 510 | vertex 108.70184761129111 12.020822905708318 11.500000000000055 511 | endloop 512 | endfacet 513 | facet normal -1.0 0.0 0.0 514 | outer loop 515 | vertex 108.70184761129111 12.020822905708318 5.4989346409684e-14 516 | vertex 108.70184761129111 142.0208229057083 11.500000000000053 517 | vertex 108.70184761129111 142.0208229057083 5.4989346409684e-14 518 | endloop 519 | endfacet 520 | facet normal 1.0 -2.603045983890367e-16 9.134847464837732e-31 521 | outer loop 522 | vertex 144.7018476112911 142.0208229057083 6.626921233987559e-14 523 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 524 | vertex 144.70184761129107 12.020822905708318 6.485922909860164e-14 525 | endloop 526 | endfacet 527 | facet normal 1.0 -2.603045983890367e-16 9.134847464837732e-31 528 | outer loop 529 | vertex 144.70184761129107 12.020822905708318 1.5000000000000664 530 | vertex 144.7018476112911 142.0208229057083 6.626921233987559e-14 531 | vertex 144.7018476112911 142.0208229057083 1.5000000000000657 532 | endloop 533 | endfacet 534 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 535 | outer loop 536 | vertex 128.20184761129102 148.82082290570838 19.500000000000057 537 | vertex 124.65184761129102 148.82082290570838 19.500000000000057 538 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 539 | endloop 540 | endfacet 541 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 542 | outer loop 543 | vertex 123.20184761129109 92.02082290570831 19.500000000000064 544 | vertex 119.20184761129109 142.02082290570834 19.500000000000068 545 | vertex 119.20184761129109 92.02082290570831 19.500000000000068 546 | endloop 547 | endfacet 548 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 549 | outer loop 550 | vertex 119.20184761129109 142.02082290570834 19.500000000000068 551 | vertex 123.20184761129109 92.02082290570831 19.500000000000064 552 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 553 | endloop 554 | endfacet 555 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 556 | outer loop 557 | vertex 119.20184761129109 142.02082290570834 19.500000000000068 558 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 559 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 560 | endloop 561 | endfacet 562 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 563 | outer loop 564 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 565 | vertex 123.20184761129109 132.02082290570831 19.500000000000057 566 | vertex 137.20184761129104 132.02082290570831 19.500000000000057 567 | endloop 568 | endfacet 569 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 570 | outer loop 571 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 572 | vertex 137.20184761129104 132.02082290570831 19.500000000000057 573 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 574 | endloop 575 | endfacet 576 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 577 | outer loop 578 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 579 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 580 | vertex 128.20184761129102 148.82082290570838 19.500000000000057 581 | endloop 582 | endfacet 583 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 584 | outer loop 585 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 586 | vertex 137.20184761129104 132.02082290570831 19.500000000000057 587 | vertex 137.20184761129104 142.02082290570834 19.500000000000046 588 | endloop 589 | endfacet 590 | facet normal 5.677257201327562e-16 1.9951748454555064e-17 1.0 591 | outer loop 592 | vertex 131.75184761129105 148.82082290570835 19.500000000000068 593 | vertex 128.20184761129102 148.82082290570838 19.500000000000057 594 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 595 | endloop 596 | endfacet 597 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 598 | outer loop 599 | vertex 131.75184761129105 148.82082290570835 6.697420396051257e-14 600 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 601 | vertex 124.65184761129102 148.82082290570838 5.780931289223189e-14 602 | endloop 603 | endfacet 604 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 605 | outer loop 606 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 607 | vertex 131.75184761129105 148.82082290570835 6.697420396051257e-14 608 | vertex 130.0018476112911 142.0208229057083 4.934941344458821e-14 609 | endloop 610 | endfacet 611 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 612 | outer loop 613 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 614 | vertex 108.70184761129111 12.020822905708318 5.4989346409684e-14 615 | vertex 108.70184761129111 142.0208229057083 5.4989346409684e-14 616 | endloop 617 | endfacet 618 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 619 | outer loop 620 | vertex 108.70184761129111 12.020822905708318 5.4989346409684e-14 621 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 622 | vertex 124.48514183247472 20.020822905708304 8.107403637325206e-14 623 | endloop 624 | endfacet 625 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 626 | outer loop 627 | vertex 124.48514183247472 20.020822905708304 8.107403637325206e-14 628 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 629 | vertex 132.48514183247474 20.020822905708304 4.7234438582677284e-14 630 | endloop 631 | endfacet 632 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 633 | outer loop 634 | vertex 132.48514183247474 20.020822905708304 4.7234438582677284e-14 635 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 636 | vertex 130.0018476112911 142.0208229057083 4.934941344458821e-14 637 | endloop 638 | endfacet 639 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 640 | outer loop 641 | vertex 132.48514183247474 20.020822905708304 4.7234438582677284e-14 642 | vertex 130.0018476112911 142.0208229057083 4.934941344458821e-14 643 | vertex 144.7018476112911 142.0208229057083 6.626921233987559e-14 644 | endloop 645 | endfacet 646 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 647 | outer loop 648 | vertex 132.48514183247474 20.020822905708304 4.7234438582677284e-14 649 | vertex 144.7018476112911 142.0208229057083 6.626921233987559e-14 650 | vertex 144.70184761129107 12.020822905708318 6.485922909860164e-14 651 | endloop 652 | endfacet 653 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 654 | outer loop 655 | vertex 144.70184761129107 12.020822905708318 6.485922909860164e-14 656 | vertex 130.48514183247477 12.020822905708318 9.235390230344364e-14 657 | vertex 132.48514183247474 20.020822905708304 4.7234438582677284e-14 658 | endloop 659 | endfacet 660 | facet normal 3.076809150219395e-16 -5.674004424883819e-17 -1.0 661 | outer loop 662 | vertex 126.48514183247477 12.020822905708318 5.851430451286887e-14 663 | vertex 108.70184761129111 12.020822905708318 5.4989346409684e-14 664 | vertex 124.48514183247472 20.020822905708304 8.107403637325206e-14 665 | endloop 666 | endfacet 667 | facet normal -1.2089888456797013e-16 1.0945666870707278e-17 1.0 668 | outer loop 669 | vertex 110.2018476112911 12.020822905708318 11.500000000000055 670 | vertex 108.70184761129111 142.0208229057083 11.500000000000053 671 | vertex 108.70184761129111 12.020822905708318 11.500000000000055 672 | endloop 673 | endfacet 674 | facet normal -1.2089888456797013e-16 1.0945666870707278e-17 1.0 675 | outer loop 676 | vertex 108.70184761129111 142.0208229057083 11.500000000000053 677 | vertex 110.2018476112911 12.020822905708318 11.500000000000055 678 | vertex 110.2018476112911 142.0208229057083 11.500000000000053 679 | endloop 680 | endfacet 681 | facet normal -0.9684438416701532 -0.24923187101804506 1.455401919534942e-15 682 | outer loop 683 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 684 | vertex 124.65184761129102 148.82082290570838 5.780931289223189e-14 685 | vertex 126.40184761129095 142.02082290570837 5.780931289223189e-14 686 | endloop 687 | endfacet 688 | facet normal -0.9684438416701532 -0.24923187101804506 1.455401919534942e-15 689 | outer loop 690 | vertex 124.65184761129102 148.82082290570838 5.780931289223189e-14 691 | vertex 126.40184761129099 142.02082290570843 19.500000000000057 692 | vertex 124.65184761129102 148.82082290570838 19.500000000000057 693 | endloop 694 | endfacet 695 | facet normal 0.9684438416701527 -0.24923187101804653 1.4601348117524946e-15 696 | outer loop 697 | vertex 131.75184761129105 148.82082290570835 6.697420396051257e-14 698 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 699 | vertex 130.0018476112911 142.0208229057083 4.934941344458821e-14 700 | endloop 701 | endfacet 702 | facet normal 0.9684438416701527 -0.24923187101804653 1.4601348117524946e-15 703 | outer loop 704 | vertex 130.00184761129108 142.02082290570834 19.500000000000068 705 | vertex 131.75184761129105 148.82082290570835 6.697420396051257e-14 706 | vertex 131.75184761129105 148.82082290570835 19.500000000000068 707 | endloop 708 | endfacet 709 | facet normal 6.354854045178335e-15 1.0 -3.856364420578307e-16 710 | outer loop 711 | vertex 124.65184761129102 148.82082290570838 19.500000000000057 712 | vertex 131.75184761129105 148.82082290570835 6.697420396051257e-14 713 | vertex 124.65184761129102 148.82082290570838 5.780931289223189e-14 714 | endloop 715 | endfacet 716 | facet normal 6.354854045178335e-15 1.0 -3.856364420578307e-16 717 | outer loop 718 | vertex 131.75184761129105 148.82082290570835 6.697420396051257e-14 719 | vertex 124.65184761129102 148.82082290570838 19.500000000000057 720 | vertex 128.20184761129102 148.82082290570838 19.500000000000057 721 | endloop 722 | endfacet 723 | facet normal 6.354854045178335e-15 1.0 -3.856364420578307e-16 724 | outer loop 725 | vertex 131.75184761129105 148.82082290570835 6.697420396051257e-14 726 | vertex 128.20184761129102 148.82082290570838 19.500000000000057 727 | vertex 131.75184761129105 148.82082290570835 19.500000000000068 728 | endloop 729 | endfacet 730 | facet normal 1.0 -0.0 -0.0 731 | outer loop 732 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 733 | vertex 110.2018476112911 12.020822905708318 11.500000000000055 734 | vertex 110.2018476112911 12.020822905708318 1.500000000000055 735 | endloop 736 | endfacet 737 | facet normal 1.0 -0.0 -0.0 738 | outer loop 739 | vertex 110.2018476112911 12.020822905708318 11.500000000000055 740 | vertex 110.2018476112911 142.0208229057083 1.500000000000055 741 | vertex 110.2018476112911 142.0208229057083 11.500000000000053 742 | endloop 743 | endfacet 744 | endsolid V3_Frame_CIS_26 745 | -------------------------------------------------------------------------------- /3D Design/V3_Frame_LED_13.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/3D Design/V3_Frame_LED_13.skp -------------------------------------------------------------------------------- /3D Design/V3_Frame_LED_13_noSTP.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/3D Design/V3_Frame_LED_13_noSTP.skp -------------------------------------------------------------------------------- /3D Design/V3_Frame_LED_13_noSTP~.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/3D Design/V3_Frame_LED_13_noSTP~.skp -------------------------------------------------------------------------------- /3D Design/V3_Frame_LED_13~.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/3D Design/V3_Frame_LED_13~.skp -------------------------------------------------------------------------------- /3D Design/corner.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/3D Design/corner.skp -------------------------------------------------------------------------------- /3D Design/corner.stl: -------------------------------------------------------------------------------- 1 | solid corner 2 | facet normal -0.9701425001453325 0.24253562503633086 -1.2744386435654674e-15 3 | outer loop 4 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 5 | vertex 16.00000000000003 9.311369992320866e-16 3.500000000000006 6 | vertex 16.00000000000001 -3.4349597850491274e-16 19.00000000000002 7 | endloop 8 | endfacet 9 | facet normal -0.9701425001453325 0.24253562503633086 -1.2744386435654674e-15 10 | outer loop 11 | vertex 16.00000000000003 9.311369992320866e-16 3.500000000000006 12 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 13 | vertex 17.750000000000014 6.999999999999993 3.4999999999999964 14 | endloop 15 | endfacet 16 | facet normal -1.9639557464383515e-17 -1.0 -6.612158959271291e-17 17 | outer loop 18 | vertex 16.00000000000003 9.311369992320866e-16 3.500000000000006 19 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 20 | vertex 16.00000000000001 -3.4349597850491274e-16 19.00000000000002 21 | endloop 22 | endfacet 23 | facet normal -1.9639557464383515e-17 -1.0 -6.612158959271291e-17 24 | outer loop 25 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 26 | vertex 16.00000000000003 9.311369992320866e-16 3.500000000000006 27 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 28 | endloop 29 | endfacet 30 | facet normal -1.9639557464383515e-17 -1.0 -6.612158959271291e-17 31 | outer loop 32 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 33 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 34 | vertex 30.499999999999954 2.017099147957137e-32 5.0000000000000115 35 | endloop 36 | endfacet 37 | facet normal -1.9639557464383515e-17 -1.0 -6.612158959271291e-17 38 | outer loop 39 | vertex 16.00000000000001 -3.4349597850491274e-16 19.00000000000002 40 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 41 | vertex 22.999999999999968 -3.4349597850491274e-16 18.99999999999999 42 | endloop 43 | endfacet 44 | facet normal 0.9701425001453311 0.24253562503633685 8.134714746162502e-16 45 | outer loop 46 | vertex 12.000000000000023 9.311369992320866e-16 3.500000000000023 47 | vertex 10.24999999999998 7.0 19.0 48 | vertex 12.00000000000002 -3.4349597850491274e-16 18.99999999999999 49 | endloop 50 | endfacet 51 | facet normal 0.9701425001453311 0.24253562503633685 8.134714746162502e-16 52 | outer loop 53 | vertex 10.24999999999998 7.0 19.0 54 | vertex 12.000000000000023 9.311369992320866e-16 3.500000000000023 55 | vertex 10.250000000000014 6.999999999999962 3.500000000000002 56 | endloop 57 | endfacet 58 | facet normal 1.9739765377835292e-15 -1.0 1.409983241273955e-15 59 | outer loop 60 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 61 | vertex 10.250000000000014 6.999999999999962 3.500000000000002 62 | vertex 17.750000000000014 6.999999999999993 3.4999999999999964 63 | endloop 64 | endfacet 65 | facet normal 1.9739765377835292e-15 -1.0 1.409983241273955e-15 66 | outer loop 67 | vertex 10.250000000000014 6.999999999999962 3.500000000000002 68 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 69 | vertex 10.24999999999998 7.0 19.0 70 | endloop 71 | endfacet 72 | facet normal -2.76406623637653e-16 -1.0 9.893657187471866e-18 73 | outer loop 74 | vertex 12.00000000000002 -3.4349597850491274e-16 18.99999999999999 75 | vertex 5.000000000000001 4.862011176806702e-19 4.999999999999999 76 | vertex 12.000000000000023 9.311369992320866e-16 3.500000000000023 77 | endloop 78 | endfacet 79 | facet normal -2.76406623637653e-16 -1.0 9.893657187471866e-18 80 | outer loop 81 | vertex 5.000000000000001 4.862011176806702e-19 4.999999999999999 82 | vertex 12.00000000000002 -3.4349597850491274e-16 18.99999999999999 83 | vertex 4.999999999999998 -3.4349597850491274e-16 19.00000000000001 84 | endloop 85 | endfacet 86 | facet normal -2.76406623637653e-16 -1.0 9.893657187471866e-18 87 | outer loop 88 | vertex -5.499999999999998 2.7665906007785826e-15 3.500000000000011 89 | vertex -3.9999999999999925 5.640088549453453e-15 5.000000000000001 90 | vertex -5.499999999999998 5.111259748780126e-15 15.0 91 | endloop 92 | endfacet 93 | facet normal -2.76406623637653e-16 -1.0 9.893657187471866e-18 94 | outer loop 95 | vertex -3.9999999999999925 5.640088549453453e-15 5.000000000000001 96 | vertex -5.499999999999998 2.7665906007785826e-15 3.500000000000011 97 | vertex 12.000000000000023 9.311369992320866e-16 3.500000000000023 98 | endloop 99 | endfacet 100 | facet normal -2.76406623637653e-16 -1.0 9.893657187471866e-18 101 | outer loop 102 | vertex -3.9999999999999925 5.640088549453453e-15 5.000000000000001 103 | vertex 12.000000000000023 9.311369992320866e-16 3.500000000000023 104 | vertex 5.000000000000001 4.862011176806702e-19 4.999999999999999 105 | endloop 106 | endfacet 107 | facet normal -2.76406623637653e-16 -1.0 9.893657187471866e-18 108 | outer loop 109 | vertex -5.499999999999998 5.111259748780126e-15 15.0 110 | vertex -3.9999999999999925 5.640088549453453e-15 5.000000000000001 111 | vertex -3.9999999999999925 5.640088549453453e-15 15.0 112 | endloop 113 | endfacet 114 | facet normal -0.0 -0.0 1.0 115 | outer loop 116 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 117 | vertex 24.74999999999995 3.75 5.0000000000000115 118 | vertex 22.999999999999954 7.499999999999999 5.0000000000000115 119 | endloop 120 | endfacet 121 | facet normal -0.0 -0.0 1.0 122 | outer loop 123 | vertex 24.74999999999995 3.75 5.0000000000000115 124 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 125 | vertex 25.749999999999954 2.017949192431121 5.0000000000000115 126 | endloop 127 | endfacet 128 | facet normal -0.0 -0.0 1.0 129 | outer loop 130 | vertex 25.749999999999954 2.017949192431121 5.0000000000000115 131 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 132 | vertex 30.499999999999954 2.017099147957137e-32 5.0000000000000115 133 | endloop 134 | endfacet 135 | facet normal -0.0 -0.0 1.0 136 | outer loop 137 | vertex 25.749999999999954 2.017949192431121 5.0000000000000115 138 | vertex 30.499999999999954 2.017099147957137e-32 5.0000000000000115 139 | vertex 27.749999999999954 2.017949192431121 5.0000000000000115 140 | endloop 141 | endfacet 142 | facet normal -0.0 -0.0 1.0 143 | outer loop 144 | vertex 27.749999999999954 2.017949192431121 5.0000000000000115 145 | vertex 30.499999999999954 2.017099147957137e-32 5.0000000000000115 146 | vertex 28.749999999999954 3.75 5.0000000000000115 147 | endloop 148 | endfacet 149 | facet normal -0.0 -0.0 1.0 150 | outer loop 151 | vertex 22.999999999999954 7.499999999999999 5.0000000000000115 152 | vertex 25.749999999999947 5.4820508075688785 5.0000000000000115 153 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 154 | endloop 155 | endfacet 156 | facet normal -0.0 -0.0 1.0 157 | outer loop 158 | vertex 25.749999999999947 5.4820508075688785 5.0000000000000115 159 | vertex 22.999999999999954 7.499999999999999 5.0000000000000115 160 | vertex 24.74999999999995 3.75 5.0000000000000115 161 | endloop 162 | endfacet 163 | facet normal -0.0 -0.0 1.0 164 | outer loop 165 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 166 | vertex 25.749999999999947 5.4820508075688785 5.0000000000000115 167 | vertex 27.74999999999995 5.48205080756888 5.0000000000000115 168 | endloop 169 | endfacet 170 | facet normal -0.0 -0.0 1.0 171 | outer loop 172 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 173 | vertex 27.74999999999995 5.48205080756888 5.0000000000000115 174 | vertex 28.749999999999954 3.75 5.0000000000000115 175 | endloop 176 | endfacet 177 | facet normal -0.0 -0.0 1.0 178 | outer loop 179 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 180 | vertex 28.749999999999954 3.75 5.0000000000000115 181 | vertex 30.499999999999954 2.017099147957137e-32 5.0000000000000115 182 | endloop 183 | endfacet 184 | facet normal 1.0 5.4037030278024095e-16 1.7883675630056073e-15 185 | outer loop 186 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 187 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 188 | vertex 30.499999999999954 2.017099147957137e-32 5.0000000000000115 189 | endloop 190 | endfacet 191 | facet normal 1.0 5.4037030278024095e-16 1.7883675630056073e-15 192 | outer loop 193 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 194 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 195 | vertex 30.499999999999932 14.699999999999973 3.499999999999995 196 | endloop 197 | endfacet 198 | facet normal 1.0 5.4037030278024095e-16 1.7883675630056073e-15 199 | outer loop 200 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 201 | vertex 30.499999999999932 14.700000000000063 19.00000000000001 202 | vertex 30.49999999999991 7.499999999999851 18.99999999999999 203 | endloop 204 | endfacet 205 | facet normal 1.0 5.4037030278024095e-16 1.7883675630056073e-15 206 | outer loop 207 | vertex 30.499999999999932 14.700000000000063 19.00000000000001 208 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 209 | vertex 30.499999999999932 14.699999999999973 3.499999999999995 210 | endloop 211 | endfacet 212 | facet normal 1.0 5.4037030278024095e-16 1.7883675630056073e-15 213 | outer loop 214 | vertex 30.499999999999932 14.700000000000063 19.00000000000001 215 | vertex 30.499999999999932 14.699999999999973 3.499999999999995 216 | vertex 30.49999999999995 14.69999999999999 5.000000000000011 217 | endloop 218 | endfacet 219 | facet normal 1.0 7.890376734192255e-15 9.086471847889949e-16 220 | outer loop 221 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 222 | vertex 30.499999999999833 25.50000000000002 4.999999999999999 223 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 224 | endloop 225 | endfacet 226 | facet normal 1.0 7.890376734192255e-15 9.086471847889949e-16 227 | outer loop 228 | vertex 30.499999999999833 25.50000000000002 4.999999999999999 229 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 230 | vertex 30.499999999999943 34.49999999999995 5.000000000000001 231 | endloop 232 | endfacet 233 | facet normal 1.0 7.890376734192255e-15 9.086471847889949e-16 234 | outer loop 235 | vertex 30.499999999999943 34.49999999999995 5.000000000000001 236 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 237 | vertex 30.499999999999943 34.49999999999995 15.0 238 | endloop 239 | endfacet 240 | facet normal 1.0 7.890376734192255e-15 9.086471847889949e-16 241 | outer loop 242 | vertex 30.499999999999943 34.49999999999995 15.0 243 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 244 | vertex 30.499999999999844 36.00000000000005 15.0 245 | endloop 246 | endfacet 247 | facet normal 1.0 7.890376734192255e-15 9.086471847889949e-16 248 | outer loop 249 | vertex 30.50000000000001 18.300000000000196 5.000000000000011 250 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 251 | vertex 30.500000000000057 18.300000000000143 19.0 252 | endloop 253 | endfacet 254 | facet normal 1.0 7.890376734192255e-15 9.086471847889949e-16 255 | outer loop 256 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 257 | vertex 30.50000000000001 18.300000000000196 5.000000000000011 258 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 259 | endloop 260 | endfacet 261 | facet normal 1.0 7.890376734192255e-15 9.086471847889949e-16 262 | outer loop 263 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 264 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 265 | vertex 30.499999999999833 25.50000000000002 4.999999999999999 266 | endloop 267 | endfacet 268 | facet normal -0.24923187101803054 0.968443841670157 2.422405455722776e-15 269 | outer loop 270 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 271 | vertex 37.300000000000054 20.050000000000008 19.0 272 | vertex 37.300000000000054 20.050000000000008 3.499999999999999 273 | endloop 274 | endfacet 275 | facet normal -0.24923187101803054 0.968443841670157 2.422405455722776e-15 276 | outer loop 277 | vertex 37.300000000000054 20.050000000000008 19.0 278 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 279 | vertex 30.50000000000001 18.300000000000196 5.000000000000011 280 | endloop 281 | endfacet 282 | facet normal -0.24923187101803054 0.968443841670157 2.422405455722776e-15 283 | outer loop 284 | vertex 37.300000000000054 20.050000000000008 19.0 285 | vertex 30.50000000000001 18.300000000000196 5.000000000000011 286 | vertex 30.500000000000057 18.300000000000143 19.0 287 | endloop 288 | endfacet 289 | facet normal -0.2492318710180564 -0.9684438416701503 2.910435858890409e-15 290 | outer loop 291 | vertex 37.299999999999876 12.95000000000001 3.5000000000000107 292 | vertex 30.49999999999995 14.69999999999999 5.000000000000011 293 | vertex 30.499999999999932 14.699999999999973 3.499999999999995 294 | endloop 295 | endfacet 296 | facet normal -0.2492318710180564 -0.9684438416701503 2.910435858890409e-15 297 | outer loop 298 | vertex 30.49999999999995 14.69999999999999 5.000000000000011 299 | vertex 37.299999999999876 12.95000000000001 3.5000000000000107 300 | vertex 37.299999999999876 12.95000000000001 19.00000000000001 301 | endloop 302 | endfacet 303 | facet normal -0.2492318710180564 -0.9684438416701503 2.910435858890409e-15 304 | outer loop 305 | vertex 30.49999999999995 14.69999999999999 5.000000000000011 306 | vertex 37.299999999999876 12.95000000000001 19.00000000000001 307 | vertex 30.499999999999932 14.700000000000063 19.00000000000001 308 | endloop 309 | endfacet 310 | facet normal 1.0 -2.541941618071346e-14 9.70311047758404e-16 311 | outer loop 312 | vertex 37.300000000000054 20.050000000000008 3.499999999999999 313 | vertex 37.299999999999876 12.95000000000001 19.00000000000001 314 | vertex 37.299999999999876 12.95000000000001 3.5000000000000107 315 | endloop 316 | endfacet 317 | facet normal 1.0 -2.541941618071346e-14 9.70311047758404e-16 318 | outer loop 319 | vertex 37.299999999999876 12.95000000000001 19.00000000000001 320 | vertex 37.300000000000054 20.050000000000008 3.499999999999999 321 | vertex 37.29999999999992 16.499999999999986 19.0 322 | endloop 323 | endfacet 324 | facet normal 1.0 -2.541941618071346e-14 9.70311047758404e-16 325 | outer loop 326 | vertex 37.29999999999992 16.499999999999986 19.0 327 | vertex 37.300000000000054 20.050000000000008 3.499999999999999 328 | vertex 37.300000000000054 20.050000000000008 19.0 329 | endloop 330 | endfacet 331 | facet normal -1.0 -1.5405372450956092e-15 -7.239316940272221e-15 332 | outer loop 333 | vertex -5.499999999999998 5.111259748780126e-15 15.0 334 | vertex -5.500000000000001 36.00000000000005 3.5000000000000004 335 | vertex -5.499999999999998 2.7665906007785826e-15 3.500000000000011 336 | endloop 337 | endfacet 338 | facet normal -1.0 -1.5405372450956092e-15 -7.239316940272221e-15 339 | outer loop 340 | vertex -5.500000000000001 36.00000000000005 3.5000000000000004 341 | vertex -5.499999999999998 5.111259748780126e-15 15.0 342 | vertex -5.500000000000159 36.00000000000005 15.0 343 | endloop 344 | endfacet 345 | facet normal -0.0 -0.0 1.0 346 | outer loop 347 | vertex -3.9999999999999925 5.640088549453453e-15 15.0 348 | vertex -4.000000000000154 34.49999999999972 15.0 349 | vertex -5.499999999999998 5.111259748780126e-15 15.0 350 | endloop 351 | endfacet 352 | facet normal -0.0 -0.0 1.0 353 | outer loop 354 | vertex -5.500000000000159 36.00000000000005 15.0 355 | vertex -4.000000000000154 34.49999999999972 15.0 356 | vertex 30.499999999999844 36.00000000000005 15.0 357 | endloop 358 | endfacet 359 | facet normal -0.0 -0.0 1.0 360 | outer loop 361 | vertex -4.000000000000154 34.49999999999972 15.0 362 | vertex -5.500000000000159 36.00000000000005 15.0 363 | vertex -5.499999999999998 5.111259748780126e-15 15.0 364 | endloop 365 | endfacet 366 | facet normal -0.0 -0.0 1.0 367 | outer loop 368 | vertex 30.499999999999844 36.00000000000005 15.0 369 | vertex -4.000000000000154 34.49999999999972 15.0 370 | vertex 30.499999999999943 34.49999999999995 15.0 371 | endloop 372 | endfacet 373 | facet normal 6.702529030983404e-15 -1.0 5.63993296509634e-16 374 | outer loop 375 | vertex 30.499999999999943 34.49999999999995 5.000000000000001 376 | vertex -4.000000000000154 34.49999999999972 15.0 377 | vertex -3.9999999999999942 34.49999999999971 4.9999999999997895 378 | endloop 379 | endfacet 380 | facet normal 6.702529030983404e-15 -1.0 5.63993296509634e-16 381 | outer loop 382 | vertex -4.000000000000154 34.49999999999972 15.0 383 | vertex 30.499999999999943 34.49999999999995 5.000000000000001 384 | vertex 30.499999999999943 34.49999999999995 15.0 385 | endloop 386 | endfacet 387 | facet normal 1.0 2.3499720687899594e-15 7.966405313197807e-15 388 | outer loop 389 | vertex -3.9999999999999942 34.49999999999971 4.9999999999997895 390 | vertex -3.9999999999999925 5.640088549453453e-15 15.0 391 | vertex -3.9999999999999925 5.640088549453453e-15 5.000000000000001 392 | endloop 393 | endfacet 394 | facet normal 1.0 2.3499720687899594e-15 7.966405313197807e-15 395 | outer loop 396 | vertex -3.9999999999999925 5.640088549453453e-15 15.0 397 | vertex -3.9999999999999942 34.49999999999971 4.9999999999997895 398 | vertex -4.000000000000154 34.49999999999972 15.0 399 | endloop 400 | endfacet 401 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 402 | outer loop 403 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 404 | vertex -5.499999999999998 2.7665906007785826e-15 3.500000000000011 405 | vertex -5.500000000000001 36.00000000000005 3.5000000000000004 406 | endloop 407 | endfacet 408 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 409 | outer loop 410 | vertex -5.499999999999998 2.7665906007785826e-15 3.500000000000011 411 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 412 | vertex 10.250000000000014 6.999999999999962 3.500000000000002 413 | endloop 414 | endfacet 415 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 416 | outer loop 417 | vertex 10.250000000000014 6.999999999999962 3.500000000000002 418 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 419 | vertex 17.750000000000014 6.999999999999993 3.4999999999999964 420 | endloop 421 | endfacet 422 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 423 | outer loop 424 | vertex 17.750000000000014 6.999999999999993 3.4999999999999964 425 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 426 | vertex 24.74999999999995 3.75 3.5000000000000058 427 | endloop 428 | endfacet 429 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 430 | outer loop 431 | vertex 24.74999999999995 3.75 3.5000000000000058 432 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 433 | vertex 25.749999999999947 5.4820508075688785 3.5000000000000058 434 | endloop 435 | endfacet 436 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 437 | outer loop 438 | vertex 25.749999999999947 5.4820508075688785 3.5000000000000058 439 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 440 | vertex 27.74999999999995 5.48205080756888 3.500000000000005 441 | endloop 442 | endfacet 443 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 444 | outer loop 445 | vertex 27.74999999999995 5.48205080756888 3.500000000000005 446 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 447 | vertex 28.749999999999954 3.75 3.5000000000000058 448 | endloop 449 | endfacet 450 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 451 | outer loop 452 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 453 | vertex 30.499999999999932 14.699999999999973 3.499999999999995 454 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 455 | endloop 456 | endfacet 457 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 458 | outer loop 459 | vertex 30.499999999999932 14.699999999999973 3.499999999999995 460 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 461 | vertex 37.299999999999876 12.95000000000001 3.5000000000000107 462 | endloop 463 | endfacet 464 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 465 | outer loop 466 | vertex 37.299999999999876 12.95000000000001 3.5000000000000107 467 | vertex 30.500000000000057 18.30000000000021 3.5000000000000036 468 | vertex 37.300000000000054 20.050000000000008 3.499999999999999 469 | endloop 470 | endfacet 471 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 472 | outer loop 473 | vertex 16.00000000000003 9.311369992320866e-16 3.500000000000006 474 | vertex 25.749999999999954 2.017949192431121 3.500000000000006 475 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 476 | endloop 477 | endfacet 478 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 479 | outer loop 480 | vertex 25.749999999999954 2.017949192431121 3.500000000000006 481 | vertex 16.00000000000003 9.311369992320866e-16 3.500000000000006 482 | vertex 17.750000000000014 6.999999999999993 3.4999999999999964 483 | endloop 484 | endfacet 485 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 486 | outer loop 487 | vertex 25.749999999999954 2.017949192431121 3.500000000000006 488 | vertex 17.750000000000014 6.999999999999993 3.4999999999999964 489 | vertex 24.74999999999995 3.75 3.5000000000000058 490 | endloop 491 | endfacet 492 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 493 | outer loop 494 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 495 | vertex 25.749999999999954 2.017949192431121 3.500000000000006 496 | vertex 27.749999999999954 2.017949192431121 3.500000000000006 497 | endloop 498 | endfacet 499 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 500 | outer loop 501 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 502 | vertex 27.749999999999954 2.017949192431121 3.500000000000006 503 | vertex 28.749999999999954 3.75 3.5000000000000058 504 | endloop 505 | endfacet 506 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 507 | outer loop 508 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 509 | vertex 28.749999999999954 3.75 3.5000000000000058 510 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 511 | endloop 512 | endfacet 513 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 514 | outer loop 515 | vertex 30.499999999999954 9.311369992320866e-16 3.5000000000000084 516 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 517 | vertex 30.499999999999932 14.699999999999973 3.499999999999995 518 | endloop 519 | endfacet 520 | facet normal -8.13580728659139e-17 -2.9403933227108737e-16 -1.0 521 | outer loop 522 | vertex 12.000000000000023 9.311369992320866e-16 3.500000000000023 523 | vertex -5.499999999999998 2.7665906007785826e-15 3.500000000000011 524 | vertex 10.250000000000014 6.999999999999962 3.500000000000002 525 | endloop 526 | endfacet 527 | facet normal -5.222160152866496e-17 1.0 1.022162690902217e-16 528 | outer loop 529 | vertex -5.500000000000159 36.00000000000005 15.0 530 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 531 | vertex -5.500000000000001 36.00000000000005 3.5000000000000004 532 | endloop 533 | endfacet 534 | facet normal -5.222160152866496e-17 1.0 1.022162690902217e-16 535 | outer loop 536 | vertex 30.499999999999844 36.00000000000005 3.5000000000000004 537 | vertex -5.500000000000159 36.00000000000005 15.0 538 | vertex 30.499999999999844 36.00000000000005 15.0 539 | endloop 540 | endfacet 541 | facet normal -4.80641868901791e-15 4.864547346220631e-15 1.0 542 | outer loop 543 | vertex 5.000000000000001 4.862011176806702e-19 4.999999999999999 544 | vertex 4.999999999999926 15.499999999999813 4.999999999999947 545 | vertex -3.9999999999999925 5.640088549453453e-15 5.000000000000001 546 | endloop 547 | endfacet 548 | facet normal -4.80641868901791e-15 4.864547346220631e-15 1.0 549 | outer loop 550 | vertex -3.9999999999999942 34.49999999999971 4.9999999999997895 551 | vertex 14.999999999999936 25.49999999999984 4.999999999999936 552 | vertex 30.499999999999943 34.49999999999995 5.000000000000001 553 | endloop 554 | endfacet 555 | facet normal -4.80641868901791e-15 4.864547346220631e-15 1.0 556 | outer loop 557 | vertex 14.999999999999936 25.49999999999984 4.999999999999936 558 | vertex -3.9999999999999942 34.49999999999971 4.9999999999997895 559 | vertex 4.999999999999926 15.499999999999813 4.999999999999947 560 | endloop 561 | endfacet 562 | facet normal -4.80641868901791e-15 4.864547346220631e-15 1.0 563 | outer loop 564 | vertex 4.999999999999926 15.499999999999813 4.999999999999947 565 | vertex -3.9999999999999942 34.49999999999971 4.9999999999997895 566 | vertex -3.9999999999999925 5.640088549453453e-15 5.000000000000001 567 | endloop 568 | endfacet 569 | facet normal -4.80641868901791e-15 4.864547346220631e-15 1.0 570 | outer loop 571 | vertex 14.999999999999936 25.49999999999984 4.999999999999936 572 | vertex 4.999999999999926 15.499999999999813 4.999999999999947 573 | vertex 14.999999999999936 15.499999999999813 4.999999999999947 574 | endloop 575 | endfacet 576 | facet normal -4.80641868901791e-15 4.864547346220631e-15 1.0 577 | outer loop 578 | vertex 30.499999999999943 34.49999999999995 5.000000000000001 579 | vertex 14.999999999999936 25.49999999999984 4.999999999999936 580 | vertex 30.499999999999833 25.50000000000002 4.999999999999999 581 | endloop 582 | endfacet 583 | facet normal -1.0 -5.639932965095861e-15 -1.1582005196178776e-15 584 | outer loop 585 | vertex 4.999999999999897 15.499999999999853 18.999999999999932 586 | vertex 5.000000000000001 4.862011176806702e-19 4.999999999999999 587 | vertex 4.999999999999998 -3.4349597850491274e-16 19.00000000000001 588 | endloop 589 | endfacet 590 | facet normal -1.0 -5.639932965095861e-15 -1.1582005196178776e-15 591 | outer loop 592 | vertex 5.000000000000001 4.862011176806702e-19 4.999999999999999 593 | vertex 4.999999999999897 15.499999999999853 18.999999999999932 594 | vertex 4.999999999999926 15.499999999999813 4.999999999999947 595 | endloop 596 | endfacet 597 | facet normal -9.096666072735185e-15 1.0 -2.8199664825479085e-15 598 | outer loop 599 | vertex 14.999999999999897 25.49999999999992 18.999999999999922 600 | vertex 30.499999999999833 25.50000000000002 4.999999999999999 601 | vertex 14.999999999999936 25.49999999999984 4.999999999999936 602 | endloop 603 | endfacet 604 | facet normal -9.096666072735185e-15 1.0 -2.8199664825479085e-15 605 | outer loop 606 | vertex 30.499999999999833 25.50000000000002 4.999999999999999 607 | vertex 14.999999999999897 25.49999999999992 18.999999999999922 608 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 609 | endloop 610 | endfacet 611 | facet normal 1.0 -0.0 -1.208557063949101e-15 612 | outer loop 613 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 614 | vertex 22.999999999999968 7.499999999999999 18.99999999999999 615 | vertex 22.999999999999968 -3.4349597850491274e-16 18.99999999999999 616 | endloop 617 | endfacet 618 | facet normal 1.0 -0.0 -1.208557063949101e-15 619 | outer loop 620 | vertex 22.999999999999968 7.499999999999999 18.99999999999999 621 | vertex 22.999999999999954 2.017099147957137e-32 5.0000000000000115 622 | vertex 22.999999999999954 7.499999999999999 5.0000000000000115 623 | endloop 624 | endfacet 625 | facet normal -9.21189050965645e-15 -1.0 -5.6399329650958154e-15 626 | outer loop 627 | vertex 30.49999999999991 7.499999999999851 18.99999999999999 628 | vertex 22.999999999999954 7.499999999999999 5.0000000000000115 629 | vertex 30.49999999999996 7.500000000000009 5.0000000000000115 630 | endloop 631 | endfacet 632 | facet normal -9.21189050965645e-15 -1.0 -5.6399329650958154e-15 633 | outer loop 634 | vertex 22.999999999999954 7.499999999999999 5.0000000000000115 635 | vertex 30.49999999999991 7.499999999999851 18.99999999999999 636 | vertex 22.999999999999968 7.499999999999999 18.99999999999999 637 | endloop 638 | endfacet 639 | facet normal -0.8660254037844394 0.49999999999999906 -1.0263045598931914e-17 640 | outer loop 641 | vertex 28.749999999999954 3.75 5.0000000000000115 642 | vertex 27.749999999999954 2.017949192431121 3.500000000000006 643 | vertex 27.749999999999954 2.017949192431121 5.0000000000000115 644 | endloop 645 | endfacet 646 | facet normal -0.8660254037844394 0.49999999999999906 -1.0263045598931914e-17 647 | outer loop 648 | vertex 27.749999999999954 2.017949192431121 3.500000000000006 649 | vertex 28.749999999999954 3.75 5.0000000000000115 650 | vertex 28.749999999999954 3.75 3.5000000000000058 651 | endloop 652 | endfacet 653 | facet normal -0.0 1.0 -0.0 654 | outer loop 655 | vertex 25.749999999999954 2.017949192431121 5.0000000000000115 656 | vertex 27.749999999999954 2.017949192431121 3.500000000000006 657 | vertex 25.749999999999954 2.017949192431121 3.500000000000006 658 | endloop 659 | endfacet 660 | facet normal -0.0 1.0 -0.0 661 | outer loop 662 | vertex 27.749999999999954 2.017949192431121 3.500000000000006 663 | vertex 25.749999999999954 2.017949192431121 5.0000000000000115 664 | vertex 27.749999999999954 2.017949192431121 5.0000000000000115 665 | endloop 666 | endfacet 667 | facet normal 0.866025403784438 0.5000000000000011 -1.0263045598930513e-17 668 | outer loop 669 | vertex 24.74999999999995 3.75 3.5000000000000058 670 | vertex 25.749999999999954 2.017949192431121 5.0000000000000115 671 | vertex 25.749999999999954 2.017949192431121 3.500000000000006 672 | endloop 673 | endfacet 674 | facet normal 0.866025403784438 0.5000000000000011 -1.0263045598930513e-17 675 | outer loop 676 | vertex 25.749999999999954 2.017949192431121 5.0000000000000115 677 | vertex 24.74999999999995 3.75 3.5000000000000058 678 | vertex 24.74999999999995 3.75 5.0000000000000115 679 | endloop 680 | endfacet 681 | facet normal 0.8660254037844392 -0.4999999999999991 -0.0 682 | outer loop 683 | vertex 25.749999999999947 5.4820508075688785 3.5000000000000058 684 | vertex 24.74999999999995 3.75 5.0000000000000115 685 | vertex 24.74999999999995 3.75 3.5000000000000058 686 | endloop 687 | endfacet 688 | facet normal 0.8660254037844392 -0.4999999999999991 -0.0 689 | outer loop 690 | vertex 24.74999999999995 3.75 5.0000000000000115 691 | vertex 25.749999999999947 5.4820508075688785 3.5000000000000058 692 | vertex 25.749999999999947 5.4820508075688785 5.0000000000000115 693 | endloop 694 | endfacet 695 | facet normal -0.8660254037844382 -0.5000000000000009 1.0263045598928988e-17 696 | outer loop 697 | vertex 27.74999999999995 5.48205080756888 5.0000000000000115 698 | vertex 28.749999999999954 3.75 3.5000000000000058 699 | vertex 28.749999999999954 3.75 5.0000000000000115 700 | endloop 701 | endfacet 702 | facet normal -0.8660254037844382 -0.5000000000000009 1.0263045598928988e-17 703 | outer loop 704 | vertex 28.749999999999954 3.75 3.5000000000000058 705 | vertex 27.74999999999995 5.48205080756888 5.0000000000000115 706 | vertex 27.74999999999995 5.48205080756888 3.500000000000005 707 | endloop 708 | endfacet 709 | facet normal 7.049916206369737e-16 -1.0 -1.7257402262810593e-33 710 | outer loop 711 | vertex 27.74999999999995 5.48205080756888 5.0000000000000115 712 | vertex 25.749999999999947 5.4820508075688785 3.5000000000000058 713 | vertex 27.74999999999995 5.48205080756888 3.500000000000005 714 | endloop 715 | endfacet 716 | facet normal 7.049916206369737e-16 -1.0 -1.7257402262810593e-33 717 | outer loop 718 | vertex 25.749999999999947 5.4820508075688785 3.5000000000000058 719 | vertex 27.74999999999995 5.48205080756888 5.0000000000000115 720 | vertex 25.749999999999947 5.4820508075688785 5.0000000000000115 721 | endloop 722 | endfacet 723 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 724 | outer loop 725 | vertex 12.00000000000002 -3.4349597850491274e-16 18.99999999999999 726 | vertex 10.24999999999998 7.0 19.0 727 | vertex 4.999999999999998 -3.4349597850491274e-16 19.00000000000001 728 | endloop 729 | endfacet 730 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 731 | outer loop 732 | vertex 22.999999999999968 -3.4349597850491274e-16 18.99999999999999 733 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 734 | vertex 16.00000000000001 -3.4349597850491274e-16 19.00000000000002 735 | endloop 736 | endfacet 737 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 738 | outer loop 739 | vertex 4.999999999999998 -3.4349597850491274e-16 19.00000000000001 740 | vertex 14.999999999999897 15.499999999999853 18.999999999999932 741 | vertex 4.999999999999897 15.499999999999853 18.999999999999932 742 | endloop 743 | endfacet 744 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 745 | outer loop 746 | vertex 14.999999999999897 15.499999999999853 18.999999999999932 747 | vertex 4.999999999999998 -3.4349597850491274e-16 19.00000000000001 748 | vertex 10.24999999999998 7.0 19.0 749 | endloop 750 | endfacet 751 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 752 | outer loop 753 | vertex 14.999999999999897 15.499999999999853 18.999999999999932 754 | vertex 10.24999999999998 7.0 19.0 755 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 756 | endloop 757 | endfacet 758 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 759 | outer loop 760 | vertex 14.999999999999897 15.499999999999853 18.999999999999932 761 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 762 | vertex 14.999999999999897 25.49999999999992 18.999999999999922 763 | endloop 764 | endfacet 765 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 766 | outer loop 767 | vertex 14.999999999999897 25.49999999999992 18.999999999999922 768 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 769 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 770 | endloop 771 | endfacet 772 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 773 | outer loop 774 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 775 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 776 | vertex 22.999999999999968 7.499999999999999 18.99999999999999 777 | endloop 778 | endfacet 779 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 780 | outer loop 781 | vertex 22.999999999999968 7.499999999999999 18.99999999999999 782 | vertex 17.74999999999999 6.999999999999998 18.999999999999964 783 | vertex 22.999999999999968 -3.4349597850491274e-16 18.99999999999999 784 | endloop 785 | endfacet 786 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 787 | outer loop 788 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 789 | vertex 22.999999999999968 7.499999999999999 18.99999999999999 790 | vertex 30.49999999999991 7.499999999999851 18.99999999999999 791 | endloop 792 | endfacet 793 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 794 | outer loop 795 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 796 | vertex 30.49999999999991 7.499999999999851 18.99999999999999 797 | vertex 30.499999999999932 14.700000000000063 19.00000000000001 798 | endloop 799 | endfacet 800 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 801 | outer loop 802 | vertex 30.499999999999833 25.50000000000002 19.00000000000001 803 | vertex 30.499999999999932 14.700000000000063 19.00000000000001 804 | vertex 30.500000000000057 18.300000000000143 19.0 805 | endloop 806 | endfacet 807 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 808 | outer loop 809 | vertex 30.500000000000057 18.300000000000143 19.0 810 | vertex 30.499999999999932 14.700000000000063 19.00000000000001 811 | vertex 37.299999999999876 12.95000000000001 19.00000000000001 812 | endloop 813 | endfacet 814 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 815 | outer loop 816 | vertex 30.500000000000057 18.300000000000143 19.0 817 | vertex 37.299999999999876 12.95000000000001 19.00000000000001 818 | vertex 37.29999999999992 16.499999999999986 19.0 819 | endloop 820 | endfacet 821 | facet normal -1.928808977901663e-15 2.1895984405261397e-15 1.0 822 | outer loop 823 | vertex 30.500000000000057 18.300000000000143 19.0 824 | vertex 37.29999999999992 16.499999999999986 19.0 825 | vertex 37.300000000000054 20.050000000000008 19.0 826 | endloop 827 | endfacet 828 | facet normal -8.250418873795927e-32 1.0 -2.8199664825479002e-15 829 | outer loop 830 | vertex 4.999999999999897 15.499999999999853 18.999999999999932 831 | vertex 14.999999999999936 15.499999999999813 4.999999999999947 832 | vertex 4.999999999999926 15.499999999999813 4.999999999999947 833 | endloop 834 | endfacet 835 | facet normal -8.250418873795927e-32 1.0 -2.8199664825479002e-15 836 | outer loop 837 | vertex 14.999999999999936 15.499999999999813 4.999999999999947 838 | vertex 4.999999999999897 15.499999999999853 18.999999999999932 839 | vertex 14.999999999999897 15.499999999999853 18.999999999999932 840 | endloop 841 | endfacet 842 | facet normal -1.0 -3.307125734110136e-30 -2.8199664825479002e-15 843 | outer loop 844 | vertex 14.999999999999897 15.499999999999853 18.999999999999932 845 | vertex 14.999999999999936 25.49999999999984 4.999999999999936 846 | vertex 14.999999999999936 15.499999999999813 4.999999999999947 847 | endloop 848 | endfacet 849 | facet normal -1.0 -3.307125734110136e-30 -2.8199664825479002e-15 850 | outer loop 851 | vertex 14.999999999999936 25.49999999999984 4.999999999999936 852 | vertex 14.999999999999897 15.499999999999853 18.999999999999932 853 | vertex 14.999999999999897 25.49999999999992 18.999999999999922 854 | endloop 855 | endfacet 856 | endsolid corner 857 | -------------------------------------------------------------------------------- /Pictures/Coffee_Table.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/Pictures/Coffee_Table.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Magic_Frame 2 | Build your own touch screen using light triangulation and CIS sensor! 3 | 4 | This tutorial is about helping people to build their own touch screen solution based on any flat screen TV. It uses light triangulation technology to read the coordinates. This method is quite cheap ( the priciest part is the TV), with a good quality image and you can make the table almost as small and as thin as your TV is. 5 | 6 | Of course, nothing is perfect and with this solution it's probably not possible to build a 100% multi-touch screen and it's hard to cover the entire screen area. But depending on the way you make it you can have some interesting results. Plus, I am sure there are a lot of possibilities I haven't thought about to improve this. ;-) 7 | 8 | All the information are here : https://hackaday.io/project/27155-touch-screen-coffee-table-diy-with-low-cost-sensor 9 | 10 | The second solution is to build a Magic Frame with only IR LED and sensors. This project is turning on/off a light throw Z-wave depending on the movement of the hand inside the frame. All the informations are here : https://makershare.com/projects/magic-frame-everything-touch-area 11 | 12 | ![CoffeeTable](Pictures/Coffee_Table.jpg) 13 | -------------------------------------------------------------------------------- /Software/Centrale_Bluetooth-HID/Centrale_Bluetooth-HID.ino: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | //#include // the joystick is now transmit on serial 4 | 5 | #include //Call SPI library so you can communicate with the nRF24L01+ 6 | #include 7 | #include 8 | 9 | #define button 4 10 | 11 | void read_Bluetooth(); 12 | void print_Bluetooth(); 13 | void send_Serial(byte id_num); 14 | 15 | //Bluetooth 16 | byte ID = 0; 17 | unsigned char bt_rx[4]; // The 4 byte reception bluetooth buffer 18 | unsigned char bt_tx = '1'; // Calibration data 19 | const int pinCE = 9; //This pin is used to set the nRF24 to standby (0) or active mode (1) 20 | const int pinCSN = 10; //This pin is used to tell the nRF24 whether the SPI communication is a command or message to send out 21 | RF24 wirelessSPI(pinCE, pinCSN); // Declare object from nRF24 library (Create your wireless SPI) 22 | 23 | // Here we have 5 bluetooth nodes communicating with the central. The first address is used for the Wii Nunchuck 24 | //Create pipe addresses for the 5 nodes to recieve data, the "LL" is for LongLong type 25 | const uint64_t rAddress[] = {0xB00B1E50C3LL, 0xB00B1E50D6LL, 0xB00B1E50D2LL, 0xB00B1E50A6LL, 0xB00B1E50A0LL}; 26 | //Create pipe addresses for the 5 nodes to transmit data, the "LL" is for LongLong type 27 | const uint64_t wAddress[] = {0xB00B1E50A4LL, 0xB00B1E50B5LL, 0xB00B1E50B1LL, 0xB00B1E50A8LL, 0xB00B1E50A1LL}; 28 | 29 | void setup() 30 | { 31 | pinMode(button, INPUT); // Safety button, in case of HID debugging 32 | digitalWrite(button, LOW); 33 | 34 | Serial.begin(9600); //start serial to communication 35 | 36 | wirelessSPI.begin(); //Start the nRF24 module 37 | wirelessSPI.openReadingPipe(1, rAddress[0]); //open pipe o for recieving meassages with pipe address 38 | wirelessSPI.openReadingPipe(2, rAddress[1]); //open pipe o for recieving meassages with pipe address 39 | wirelessSPI.openReadingPipe(3, rAddress[2]); //open pipe o for recieving meassages with pipe address 40 | wirelessSPI.openReadingPipe(4, rAddress[3]); //open pipe o for recieving meassages with pipe address 41 | wirelessSPI.openReadingPipe(5, rAddress[4]); //open pipe o for recieving meassages with pipe address 42 | wirelessSPI.startListening(); // Start listening for messages 43 | } 44 | 45 | void loop() 46 | { 47 | ID = 0; 48 | read_Bluetooth(); 49 | if (digitalRead(button) == HIGH && 1 <= ID && ID <= 10) { // From nodes 1 to 10 50 | //print_Bluetooth(); 51 | send_Serial(ID); 52 | } 53 | delay(1); // check if necessary 54 | } 55 | 56 | 57 | void send_Serial(byte id_num) { 58 | 59 | int tmp[4]; 60 | tmp[0] = (unsigned char)bt_rx[0]; 61 | tmp[1] = (unsigned char)bt_rx[1]; 62 | tmp[2] = (unsigned char)bt_rx[2]; 63 | tmp[3] = (unsigned char)bt_rx[3]; 64 | 65 | if (id_num == 1 && bt_rx[3] == 0) { 66 | Serial.print('J'); 67 | Serial.print(','); // before the joystick didn't had any virgule, check if still ok 68 | } 69 | if (id_num == 2) { 70 | Serial.print('A'); 71 | Serial.print(','); 72 | } 73 | if (id_num == 3) { 74 | Serial.print('B'); 75 | Serial.print(','); 76 | } 77 | if (id_num == 4) { 78 | Serial.print('C'); 79 | Serial.print(','); 80 | } 81 | if (id_num == 5) { 82 | Serial.print('D'); 83 | Serial.print(','); 84 | } 85 | // Here we can add some node if necessary 86 | if ((2 <= id_num && id_num <= 10) || (id_num == 1 && bt_rx[3] == 0)) { 87 | Serial.print(tmp[0]); 88 | Serial.print(","); 89 | Serial.print(tmp[1]); 90 | Serial.print(","); 91 | Serial.print(tmp[2]); 92 | Serial.print(","); 93 | Serial.print(","); 94 | Serial.print('\n'); 95 | 96 | delay(20); //***** check if necessary 97 | } 98 | 99 | if (id_num == 1 && bt_rx[3] == 1) 100 | { 101 | calibrate_nodes(); 102 | } 103 | } 104 | 105 | void calibrate_nodes() { 106 | int timeout = 100; // To have a non blocking calibration **** need to check the timeout 107 | wirelessSPI.stopListening(); //Stop listening, stop recieving data. 108 | 109 | for (int i = 1; i < 5; i++) { 110 | wirelessSPI.openWritingPipe(wAddress[i]); 111 | timeout = 100; 112 | while (!wirelessSPI.write(&bt_tx, 1) && timeout > 0) { 113 | //Serial.print("Failed sending "); 114 | //Serial.println(i); 115 | //delayMicroseconds(100); 116 | delay(1); 117 | timeout--; 118 | } 119 | if (timeout > 0 ) { 120 | //Serial.print("Success sending "); 121 | //Serial.println(i); 122 | } else { 123 | //Serial.println("FAILED 0"); 124 | } 125 | } 126 | wirelessSPI.startListening(); //Switch back to a reciever 127 | } 128 | 129 | void read_Bluetooth() { 130 | while (wirelessSPI.available(&ID)) { //Check if recieved data 131 | wirelessSPI.read(&bt_rx, 4); //read one byte of data and store it in gotByte variable 132 | } 133 | } 134 | 135 | void print_Bluetooth() { 136 | 137 | Serial.print("BT rx : "); 138 | Serial.print(ID); 139 | Serial.print(" - "); 140 | Serial.print(bt_rx[0], DEC); 141 | Serial.print(" - "); 142 | Serial.print(bt_rx[1], DEC); 143 | Serial.print(" - "); 144 | Serial.print(bt_rx[2], DEC); 145 | Serial.print(" - "); 146 | Serial.print(bt_rx[3], DEC); 147 | Serial.println(); 148 | } 149 | 150 | 151 | -------------------------------------------------------------------------------- /Software/Frame_without_CIS/foo.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Software/GUI-Processing-Touch_Frame_1CIS_16LED_NoLEDDriver/GUI-Processing-Touch_Frame_1CIS_16LED_NoLEDDriver.pde: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | This code is to show the positions of the black zone for the CCD sensor for every LED 4 | It's been tested on a Macbook and on a Raspberry Pi 5 | It work with the touch screen Arduino code with the OPTION 3 activated 6 | */ 7 | 8 | 9 | import processing.serial.*; 10 | Serial port; 11 | 12 | String buff = ""; 13 | //int dataPresent; 14 | int cursor1,cursor2; 15 | int[][] tab= { 16 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 17 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 18 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 19 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 20 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 21 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 22 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 23 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 24 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 25 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, 26 | {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0} 27 | }; 28 | int cpt=0; 29 | int val, led, mini, maxi; 30 | int[] values; 31 | int flag=0; 32 | 33 | void setup(){ 34 | size(1000,1800); // Adapt the screen size for your need, here is for my 32 inch TV in rotate mode 90° 35 | println("Available serial ports:"); 36 | println(Serial.list()); 37 | port = new Serial(this, Serial.list()[0], 9600); // Change the serial port to correspond to your USB (here 0). The list will be print in the serial debug 38 | println(Serial.list()[0]); 39 | values = new int[width]; 40 | port.bufferUntil('\n'); 41 | rectMode(CENTER); 42 | } 43 | 44 | int getY(int val) { 45 | return (int)(val / 1023.0f * height) - 1; 46 | } 47 | 48 | void draw(){ 49 | background(240, 240, 240); 50 | 51 | while (port.available() >= 1) { 52 | if (port.read() == 0xff) { // if we receive 0xFF, we read the next byte. 53 | led = port.read(); 54 | if(led == 111 || cpt >= 80){cpt=0; clearTable();} // If the byte is 111 it's the start of a communication 55 | 56 | if(led < 16){ 57 | cpt++; 58 | tab[cpt][0] = led; 59 | tab[cpt][1] = port.read(); 60 | tab[cpt][2] = port.read(); 61 | print("Case : "); //Print in the monitor the data received 62 | print(cpt); print(" LED : "); 63 | print(tab[cpt][0]); print(" "); 64 | print(tab[cpt][1]); print(" "); 65 | println(tab[cpt][2]); 66 | } 67 | if(led == 112){break;} // the 112 mean it's the end of communication 68 | } 69 | } 70 | 71 | if(led == 112){ 72 | //println("Enter line mode"); 73 | for(int i=1;i<50;i++){ 74 | if(0 <= tab[i][0] && tab[i][0] < 16 && tab[i][1]>0){ 75 | stroke(150, 150, 150); 76 | fill(150, 150, 150); 77 | triangle(width - (tab[i][0])*width/15, height*0.01, ((width*(50-tab[i][1])/50 )*0.6)+ width*0.2, height*0.99, ((width*(50-tab[i][2])/50)*0.6)+ width*0.2, height*0.99); 78 | //draw the shadow triangles 79 | } 80 | } 81 | for(int i=1;i<50;i++){ 82 | if(0 <= tab[i][0] && tab[i][0] < 16 && tab[i][1]>0){ 83 | stroke(250, 0, 0); 84 | line(width - (tab[i][0])*width/15, height*0.01, ((width*(50-((tab[i][1] + tab[i][2])/2))/50)*0.6)+ width*0.2, height*0.99); 85 | // Draw the red lines here 86 | } 87 | } 88 | //delay(500); 89 | //fill(0); 90 | //led = 0; 91 | } 92 | stroke(0,0,0); 93 | drawscreen(); 94 | } 95 | 96 | void clearTable(){ 97 | for(int i=0; i< 50;i++){ 98 | tab[i][0] = 0; 99 | tab[i][1] = 0; 100 | tab[i][2] = 0; 101 | } 102 | } 103 | 104 | void drawscreen(){ 105 | fill(0,0,255); 106 | text("Detection touch screen",width/2-65,20); 107 | rectMode(CENTER); 108 | fill(200, 100, 200); 109 | for(int i=0; i<= 15;i++){ 110 | rect((i)*width/15, height*0.01, 20, 20); // Draw the 16 LED pink rectangle 111 | } 112 | fill(180, 180, 180); 113 | rect( width*0.5, height*0.99, width*0.6, height*0.04); // Draw the sensor rectangle 114 | noFill(); 115 | rect( width*0.5, height*0.5, width*0.5, height*0.72); 116 | line(width*0.25, height*0.5, width*0.75, height*0.5); 117 | } 118 | 119 | 120 | -------------------------------------------------------------------------------- /Software/GUI_Touch_Frame_Python/Touch_Table_Python.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | 4 | import sys, time, threading, random, queue 5 | from PyQt4 import QtGui, uic, QtCore as qt 6 | import serial 7 | 8 | #SERIALPORT = 'COM6' 9 | SERIALPORT = "/dev/ttyACM0" 10 | 11 | dataX = 10 12 | dataY = 10 13 | 14 | class GuiPart(QtGui.QMainWindow): 15 | 16 | def __init__(self, queue, endcommand, *args): 17 | QtGui.QMainWindow.__init__(self, *args) 18 | self.setWindowTitle('Arduino Serial Demo') 19 | self.queue = queue 20 | # We show the result of the thread in the gui, instead of the console 21 | window = QtGui.QMainWindow() 22 | window.setGeometry(0,0,2000,1000) 23 | self.pic = QtGui.QLabel(window) 24 | self.pic.setGeometry(70,0,2000,1000) 25 | self.pic2 = QtGui.QLabel(window) 26 | self.pixmap = QtGui.QPixmap("fond-ecran-univers.jpg") 27 | self.pixmap = self.pixmap.scaledToHeight(1500) 28 | 29 | self.editor = QtGui.QTextEdit(self) 30 | self.editor.setGeometry(0,0,70,1000) 31 | 32 | self.pic.setPixmap(self.pixmap) 33 | 34 | self.setCentralWidget(window) 35 | self.endcommand = endcommand 36 | 37 | 38 | """ 39 | def __init__(self, queue, endcommand, *args): 40 | QtGui.QMainWindow.__init__(self, *args) 41 | self.setWindowTitle('Arduino Serial Demo') 42 | self.queue = queue 43 | # We show the result of the thread in the gui, instead of the console 44 | self.editor = QtGui.QTextEdit(self) 45 | self.setCentralWidget(self.editor) 46 | self.endcommand = endcommand 47 | """ 48 | 49 | def closeEvent(self, ev): 50 | self.endcommand() 51 | 52 | def processIncoming(self): 53 | """ 54 | Handle all the messages currently in the queue (if any). 55 | """ 56 | while self.queue.qsize(): 57 | try: 58 | 59 | msg = self.queue.get(0) 60 | # Check contents of message and do what it says 61 | # As a test, we simply print it 62 | data = str(msg, 'UTF8') 63 | print(data) 64 | header = data[:2] 65 | dataX = data[2:5] 66 | dataY = data[7:10] 67 | 68 | dataX = int(dataX) 69 | dataY = int(dataY) 70 | 71 | dataX = dataX - 100 72 | dataY = dataY - 120 73 | 74 | 75 | 76 | dataX = (10*dataX) 77 | dataY = (4*dataY) 78 | 79 | dataX = dataX - 100 80 | 81 | 82 | print(dataY) 83 | 84 | self.editor.insertPlainText(" X = ") 85 | self.editor.insertPlainText(str(dataX)) 86 | self.editor.insertPlainText(" Y = ") 87 | self.editor.insertPlainText(str(dataY)) 88 | 89 | 90 | #self.pic.cercle = QtGui.QPainter(self) 91 | #self.pic.cercle.begin(self) 92 | 93 | self.cursor = QtGui.QPixmap("cursor.jpg") 94 | self.cursor = self.cursor.scaledToHeight(30) 95 | self.pic2.setGeometry(dataX-15,dataY-15, dataX+15,dataY+15) 96 | self.pic2.setPixmap(self.cursor) 97 | 98 | """ 99 | qp = QtGui.QPainter(self) 100 | qp.setBrush(QtGui.QColor(000,255,255)) 101 | qp.drawRect(100, 100, 300, 300) 102 | self.pic.addWidget(qp) 103 | """ 104 | 105 | except Queue.Empty: 106 | pass 107 | 108 | class ThreadedClient: 109 | """ 110 | Launch the main part of the GUI and the worker thread. periodicCall and 111 | endApplication could reside in the GUI part, but putting them here 112 | means that you have all the thread controls in a single place. 113 | """ 114 | def __init__(self): 115 | # Create the queue 116 | self.queue = queue.Queue() 117 | 118 | # Set up the GUI part 119 | self.gui=GuiPart(self.queue, self.endApplication) 120 | self.gui.showFullScreen() 121 | 122 | # A timer to periodically call periodicCall :-) 123 | self.timer = qt.QTimer() 124 | qt.QObject.connect(self.timer, 125 | qt.SIGNAL("timeout()"), 126 | self.periodicCall) 127 | # Start the timer -- this replaces the initial call to periodicCall 128 | self.timer.start(100) 129 | 130 | # Set up the thread to do asynchronous I/O 131 | # More can be made if necessary 132 | self.running = 1 133 | self.thread1 = threading.Thread(target=self.workerThread1) 134 | self.thread1.start() 135 | 136 | def periodicCall(self): 137 | """ 138 | Check every 100 ms if there is something new in the queue. 139 | """ 140 | self.gui.processIncoming() 141 | if not self.running: 142 | root.quit() 143 | 144 | def endApplication(self): 145 | self.running = 0 146 | 147 | 148 | def workerThread1(self): 149 | """ 150 | This is where we handle the asynchronous I/O. 151 | Put your stuff here. 152 | """ 153 | while self.running: 154 | #This is where we poll the Serial port. 155 | #time.sleep(rand.random() * 0.3) 156 | #msg = rand.random() 157 | #self.queue.put(msg) 158 | ser = serial.Serial(SERIALPORT, 9600) 159 | msg = ser.readline(); 160 | 161 | data = str(msg, 'UTF8') 162 | header = data[:2] 163 | print(header) 164 | #header = int(header) 165 | 166 | 167 | if (header == 'XX'): 168 | self.queue.put(msg) 169 | 170 | else: pass 171 | ser.close() 172 | 173 | #rand = random.Random() 174 | root = QtGui.QApplication(sys.argv) 175 | client = ThreadedClient() 176 | sys.exit(root.exec_()) 177 | -------------------------------------------------------------------------------- /Software/GUI_Touch_Frame_Python/cursor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/Software/GUI_Touch_Frame_Python/cursor.jpg -------------------------------------------------------------------------------- /Software/GUI_Touch_Frame_Python/fond-ecran-univers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jeanot1314/Magic_Frame/f4a911ca9f2c384baf209cca1781df0dca116ff2/Software/GUI_Touch_Frame_Python/fond-ecran-univers.jpg -------------------------------------------------------------------------------- /Software/Magic_Frame_2CIS_32LED_Bluetooth/Magic_Frame_Bluetooth/Magic_Frame_Bluetooth.ino: -------------------------------------------------------------------------------- 1 | 2 | //======================================= 3 | //====Touch Program table program======== 4 | //======================================= 5 | 6 | 7 | /* 8 | Speed test with 16 LED et 100 Pixels : 72ms so almost 14Hz 9 | Vitesse with 2 analog : 88ms so 11.3 Hz 10 | You have to choose the number of LEDs and the output you want 11 | */ 12 | 13 | /* 14 | Choose the OPTION you want : 15 | 16 | OPTION 1 : Send the sensor data on the serial port for every LED (no position calcul). Very useful for debug. 17 | OPTION 2 : Send the positions on the serial port 18 | OPTION 3 : Send the sensor data on the Processing interface for debugging (no position calcul) 19 | OPTION 4 : Send the positions on Python GUI 20 | OPTION 5 : Send the position as a mouse. You need to activate this option on the tools menu for the Teensy or Leonardo board 21 | OPTION 6 : Send the position as a keyboard. You need to activate this option on the tools menu for the Teensy or Leonardo board 22 | OPTION 7 : Send the position as a mouse. "Point and click mode" 23 | OPTION 8 : Send the sensor data on the Processing interface with Bluetooth 24 | */ 25 | 26 | #define OPTION 3 // Choose the output option here 27 | 28 | #define NB_POINT_MAX 4 // Multi-touch, max number of position 29 | 30 | #define CALIBRATION_MIN 500 31 | #define CALIBRATION_MAX 730 // When a finger is on the table, the value of the sensor area drop down between those 2 values 32 | 33 | #define SCREEN_WIDTH 800.00 // mm 34 | #define SCREEN_HEIGHT 393.00 // 26.2mm * 15 35 | #define CIS_HEIGHT 220.00 // mm 36 | #define DISTANCE_BETWEEN_LED 26.20 // mm 37 | 38 | #define NB_LED 16 39 | #define NB_PIXELS 50 // Pixels / sensor. Adapt to control your speed and precision 40 | #define NB_PIXELS_MAX 2700 41 | #define NB_BLACK_ZONE_MAX 10 // Multi-touch, max number of position / LED 42 | 43 | #define DELTA 45 // Multi-touch, what is the area of a touch in mm 44 | #define DELTA_ANGLE 0.01 // remove detection of black zone too close (safety) 45 | 46 | 47 | #define ROTARY A1 48 | #define LED_STRIP 14 49 | #define ANALOG_PIN_Sensor1 A9 // Analog Pin of the first sensor 50 | #define ANALOG_PIN_Sensor2 A8 // Analog pin of the second sensor 51 | #define SENSOR_LE 20 // Latch pin of the CISs 52 | #define SENSOR_CLK 21 // Clock pin os the CISs 53 | #define STP_SDI 44 54 | #define STP_CLK 45 55 | #define STP_LE 46 56 | 57 | #define TIME 0 // Slow down the all program, useful for option 1, 2 and 3. 58 | #define PROCESSING_DELAY 100 59 | 60 | #include //Call SPI library so you can communicate with the nRF24L01+ 61 | #include //nRF2401 libarary found at https://github.com/tmrh20/RF24/ 62 | #include //nRF2401 libarary found at https://github.com/tmrh20/RF24/ 63 | 64 | void init_Pin(); 65 | void calcul_multi_position(); 66 | void send_mouse(); 67 | void send_mouse_click(); 68 | void send_keyboard(); 69 | void send_data_python(); 70 | void send_position_serial(); 71 | void send_data_serial(); 72 | void send_data_processing(); 73 | void send_data_bluetooth(); 74 | void init_tab(); 75 | boolean read_CIS(int led_on); 76 | void LED_IR(int numled, boolean state) ; 77 | void send_data(char data); 78 | void latch(void); 79 | void clear_CIS(); 80 | 81 | //First tab of storage from the CIS sensor 82 | int tab[NB_LED][NB_PIXELS]; 83 | 84 | // Second tab with the data Y=AX+B with [led][0] = B and [led][1] = A ([led][2] = A' for the multi-touch) 85 | // it need to be volatile, as the B value are defined in the setup 86 | float tab_position[NB_LED][NB_BLACK_ZONE_MAX + 1][2]; 87 | 88 | //Third tab to store the different position : 0 = sommeX, 1 = sommeY, 2 = referenceX, 3 = referenceY, 4 = cpt_intersections 89 | //It need to be volatile as the value are used in the "send" functions 90 | long position[NB_POINT_MAX][3]; 91 | 92 | #if OPTION == 8 93 | // Bluetooth configuration 94 | unsigned char bt_rx[4]; // The 4 byte reception bluetooth buffer 95 | unsigned char bt_tx = '1'; // Calibration data 96 | const int pinCE = 9; //This pin is used to set the nRF24 to standby (0) or active mode (1) 97 | const int pinCSN = 10; //This pin is used to tell the nRF24 whether the SPI communication is a command or message to send out 98 | 99 | RF24 wirelessSPI(pinCE, pinCSN); // Declare object from nRF24 library (Create your wireless SPI) 100 | const uint64_t wAddress = 0xB00B1E50D6LL; // Pipe to write or transmit on 101 | const uint64_t rAddress = 0xB00B1E50B5LL; //pipe to recive data on 102 | #endif 103 | 104 | void setup() { 105 | init_Pin(); 106 | 107 | Serial.begin(9600); 108 | 109 | #if OPTION == 8 110 | wirelessSPI.begin(); //Start the nRF24 module 111 | wirelessSPI.openWritingPipe(wAddress); // setup pipe to transmit over 112 | wirelessSPI.openReadingPipe(1, rAddress); //set up pipe to recieve data 113 | wirelessSPI.stopListening(); //turn off recieve capability so you can transmit 114 | #endif 115 | 116 | #if OPTION == 5 117 | Mouse.screenSize(SCREEN_WIDTH, SCREEN_HEIGHT); // configure screen size for mouse mode 118 | #endif 119 | 120 | } 121 | 122 | void loop() { 123 | //initialize the tab 124 | init_tab(); 125 | boolean flag_detect = 0; 126 | 127 | //for(int i = 0; i < 100; i++){ // Speed test 128 | 129 | for (int l = 0; l < NB_LED; l++) { 130 | //Turn ON a LED (as it's common anode, LOW is on and HIGH is OFF) 131 | LED_IR(l, LOW); 132 | // Clear the sensor, necessary, I don't know why... 133 | clear_CIS(); 134 | // Read and store the data, return 1 if something was seen 135 | if (read_CIS(l) == 1) { 136 | flag_detect = 1; 137 | } 138 | // Turn off the LED 139 | LED_IR(0, HIGH); 140 | } 141 | //} 142 | 143 | 144 | // if the CIS has a value under the MAX Calibration 145 | if (flag_detect == 1) { 146 | //Choose the option you want on the #define OPTION X above 147 | 148 | #if OPTION == 1 149 | send_data_serial(); // Send the sensor data on the serial port for every LED 150 | #endif 151 | 152 | #if OPTION == 2 153 | calcul_multi_position(); // calcul the positions of an object. store the X and Y of every point in position[][] tab 154 | send_position_serial(); // Send the position on serial 155 | #endif 156 | 157 | #if OPTION == 3 158 | send_data_processing(); // send data on the Processing interface for debugging 159 | #endif 160 | 161 | #if OPTION == 4 162 | calcul_multi_position(); // calcul the positions of an object. store the X and Y of every point in position[][] tab 163 | send_data_python(); // envoi de la position sur python pour le GUI final 164 | #endif 165 | 166 | #if OPTION == 5 167 | calcul_multi_position(); // calcul the positions of an object. store the X and Y of every point in position[][] tab 168 | send_mouse(); // send the data as a mouse. You need to activate this option on the tools menu on the Teensy 169 | #endif 170 | 171 | #if OPTION == 6 172 | calcul_multi_position(); // calcul the positions of an object. store the X and Y of every point in position[][] tab 173 | send_keyboard(); // send the data as a keyboard. You need to activate this option on the tools menu on the Teensy 174 | #endif 175 | 176 | #if OPTION == 7 177 | calcul_multi_position(); // calcul the positions of an object. store the X and Y of every point in position[][] tab 178 | send_mouse_click(); // send the data as a mouse. You need to activate this option on the tools menu on the Teensy 179 | #endif 180 | #if OPTION == 8 181 | send_data_bluetooth(); // send data on the Processing interface for debugging 182 | #endif 183 | } 184 | 185 | #if OPTION == 6 186 | else { 187 | Keyboard.release(KEY_LEFT); 188 | Keyboard.release(KEY_UP); 189 | Keyboard.release(KEY_DOWN); 190 | Keyboard.release(KEY_RIGHT); 191 | Keyboard.release(KEY_Q); 192 | Keyboard.release(KEY_D); 193 | } 194 | #endif 195 | 196 | delay(TIME); // in case you want to slow down the code 197 | } 198 | 199 | 200 | 201 | void calcul_multi_position() { 202 | 203 | 204 | //-------PART 1 : calculate the affine function Y = A * X +B and store A and B into tab_position 205 | 206 | float positionX, positionY; 207 | int flag_reference = 0; // Reference flag to switch between adding a new reference point or validating an existing point 208 | int cpt_reference = 0; 209 | 210 | for (int i = 0; i < NB_LED; i++) { 211 | int mini = 0, maxi = 0; // store the minimal and maximal value of every black zone 212 | int flag_delta = 0; //Check if we are at the starting of a black zone or at the end 213 | int k = 0; //Number of black zone per LED. Increment the tab_position to store the affine "A" -> for the multi-point 214 | for (int j = 0; j < NB_PIXELS; j++) { 215 | if ((CALIBRATION_MIN <= tab[i][j] && tab[i][j] <= CALIBRATION_MAX) || (flag_delta == 1 && tab[i][j] <= CALIBRATION_MAX + 150) ) { // éviter la perturbation d'un seul pixel ======================== 216 | if (flag_delta == 0) { 217 | mini = j; 218 | flag_delta = 1; 219 | } 220 | maxi = j; 221 | } 222 | else { 223 | if (flag_delta == 1) { // && (maxi - mini) > NB_PIXELS/50){ //Safety you can add to avoid too small detection 224 | 225 | Serial.print(" LED : "); 226 | Serial.print(i + 1); 227 | Serial.print(" Pixel : "); 228 | Serial.print(mini); 229 | Serial.print(" - "); 230 | Serial.print(maxi); 231 | Serial.print(" Value : "); 232 | Serial.print(tab[i][mini]); 233 | Serial.print(" - "); 234 | Serial.println(tab[i][maxi]); 235 | 236 | if (k <= NB_BLACK_ZONE_MAX) { 237 | k++; // increase the number of black zone per LED (for multi-touch) 238 | } 239 | //Calcul and store the "a" in Y = A*X + B so Y = tab_position[led][1&] * X + tab_position[led][0] 240 | // Here we have : a = (Y - B)/X 241 | 242 | tab_position[i][k][1] = maxi - mini; 243 | tab_position[i][k][0] = ((((((maxi + mini) / 2) * CIS_HEIGHT) / NB_PIXELS) + (SCREEN_HEIGHT / 2) - (CIS_HEIGHT / 2) - tab_position[i][0][0]) / SCREEN_WIDTH); 244 | } 245 | flag_delta = 0; 246 | } 247 | } 248 | } 249 | 250 | 251 | //--------------PART 2 : check the crossing of the functions to calculate the detection points 252 | 253 | for (int i = 0; i < NB_POINT_MAX; i++) { 254 | for (int j = 0; j < 3; j++) { 255 | position[i][j] = 0; 256 | } 257 | } 258 | 259 | int cpt_point = 0; 260 | 261 | for (int i = 0; i < NB_LED; i++) { 262 | int cpt = 0; 263 | float positionX_ref = 0; 264 | float positionY_ref = 0; 265 | 266 | for (int j = i + 1; j < NB_LED; j++) { // the j=i+1 to don't interact twice the LED 267 | 268 | // If we have stored a value, we check if the other LED see it. If yes, we adapt the position and remove the function (to don't use it twice) 269 | if (cpt >= 2) { 270 | if (tab_position[j][1][0] != 0) { 271 | 272 | float compareY = tab_position[j][1][0] * positionX_ref + (tab_position[j][0][0]); 273 | 274 | //if the Y of he new line is close to the reference 275 | if (positionY_ref - DELTA / 2 <= compareY && compareY <= positionY_ref + DELTA / 2) { 276 | /* 277 | Serial.print(i+1); 278 | Serial.print(" "); 279 | Serial.print(j+1); 280 | Serial.print(" "); 281 | Serial.print(cpt); 282 | Serial.print(" "); 283 | Serial.print(compareY); 284 | Serial.print(" "); 285 | Serial.print(positionY_ref); 286 | Serial.print(" "); 287 | Serial.print(tab_position[j][1][0]); 288 | Serial.print(" "); 289 | Serial.println(tab_position[j][0][0]); 290 | */ 291 | positionY_ref = ((positionY_ref * cpt) + compareY) / (cpt + 1); // adapt the reference position 292 | 293 | // We drop down the detection tab k to don't use the same detection twice 294 | for (int k = 1; k < NB_BLACK_ZONE_MAX - 1; k++) { 295 | tab_position[j][k][0] = tab_position[j][k + 1][0]; 296 | } 297 | cpt++; 298 | } 299 | } 300 | } 301 | 302 | // store a value 303 | if (tab_position[i][1][0] != 0 && tab_position[j][1][0] != 0 && cpt == 0) { 304 | 305 | // when we have two points we calculate the contact 306 | positionX_ref = (tab_position[j][0][0] - tab_position[i][0][0]) / (tab_position[i][1][0] - tab_position[j][1][0]); 307 | positionY_ref = ((((tab_position[i][1][0]) * (positionX_ref)) + tab_position[i][0][0]) + (((tab_position[j][1][0]) * (positionX_ref)) + tab_position[j][0][0])) / 2; 308 | //Serial.print(" j0 ");Serial.print(tab_position[j][0][0]);Serial.print(" i0 ");Serial.print(tab_position[i][0][0]);Serial.print(" i1 ");Serial.print(tab_position[i][1][0]);Serial.print(" j1 ");Serial.print(tab_position[j][1][0]); 309 | //Serial.print(" Xref : ");Serial.print(positionX_ref);Serial.print(" Yref : ");Serial.println(positionY_ref); 310 | // We remove the value used 311 | for (int k = 1; k < NB_BLACK_ZONE_MAX - 1; k++) { 312 | tab_position[i][k][0] = tab_position[i][k + 1][0]; 313 | tab_position[j][k][0] = tab_position[j][k + 1][0]; 314 | } 315 | cpt = 2; // the cpt has now two intersections 316 | } 317 | } 318 | if (cpt >= 2) { 319 | //if(positionX_ref < 350 || cpt > 5){ // you can add for debugging, 320 | position[cpt_point][0] = cpt; 321 | position[cpt_point][1] = positionX_ref; 322 | position[cpt_point][2] = positionY_ref; 323 | cpt = -1; 324 | cpt_point++; 325 | /* 326 | Serial.print(" LED: "); 327 | Serial.print(i); 328 | Serial.println(" "); 329 | */ 330 | //} 331 | } 332 | 333 | } 334 | } 335 | 336 | 337 | void send_mouse() { 338 | 339 | #if OPTION == 5 340 | if (position[0][1] != 0 && position[0][2] != 0) { 341 | 342 | position[0][1] = map(position[0][1], 0, SCREEN_WIDTH, SCREEN_WIDTH, 0); // map depending on your output need 343 | position[0][2] = map(position[0][2], 0, SCREEN_HEIGHT, SCREEN_HEIGHT, 0); 344 | 345 | Mouse.moveTo(position[0][1], position[0][2]); 346 | } 347 | #endif 348 | 349 | } 350 | 351 | void send_mouse_click() { 352 | 353 | #if OPTION == 7 354 | if (position[0][1] != 0 && position[0][2] != 0) { 355 | 356 | position[0][1] = map(position[0][1], 0, SCREEN_WIDTH, SCREEN_WIDTH, 0); // map depending on your output need 357 | position[0][2] = map(position[0][2], 0, SCREEN_HEIGHT, SCREEN_HEIGHT, 0); 358 | 359 | Mouse.moveTo(position[0][1], position[0][2]); 360 | Mouse.click(MOUSE_LEFT); 361 | } 362 | #endif 363 | 364 | } 365 | 366 | 367 | void send_keyboard() { // interact as a keyboard, write the input/output you need 368 | 369 | #if OPTION == 6 370 | Keyboard.release(KEY_LEFT); 371 | Keyboard.release(KEY_UP); 372 | Keyboard.release(KEY_DOWN); 373 | Keyboard.release(KEY_RIGHT); 374 | Keyboard.release(KEY_Q); 375 | Keyboard.release(KEY_D); 376 | 377 | for (int i = 0; i < NB_POINT_MAX; i++) { 378 | 379 | if (position[i][1] != 0 && position[i][2] != 0) { 380 | 381 | float positionXfinal_ref = position[i][1] / SCREEN_WIDTH; 382 | float positionYfinal_ref = position[i][2] / SCREEN_HEIGHT; 383 | 384 | 385 | if (0.5 < positionXfinal_ref && positionXfinal_ref < 0.75 && positionYfinal_ref < 0.5) { 386 | if ((positionXfinal_ref - 0.5) <= positionYfinal_ref / 4) { 387 | Keyboard.press(KEY_RIGHT); 388 | } else { 389 | Keyboard.press(KEY_DOWN); 390 | } 391 | } else if (positionXfinal_ref > 0.75 && positionYfinal_ref < 0.5) { 392 | if (((positionXfinal_ref - 0.75) + positionYfinal_ref / 4) <= 0.25) { 393 | Keyboard.press(KEY_DOWN); 394 | } else { 395 | Keyboard.press(KEY_LEFT); 396 | } 397 | } else if (0.5 < positionXfinal_ref && positionXfinal_ref < 0.75 && positionYfinal_ref > 0.5) { 398 | if (((positionXfinal_ref - 0.5) + (positionYfinal_ref - 0.5) / 2) <= 0.25) { 399 | Keyboard.press(KEY_RIGHT); 400 | } else { 401 | Keyboard.press(KEY_UP); 402 | } 403 | } else if (positionXfinal_ref > 0.75 && positionYfinal_ref > 0.5) { 404 | if ((positionXfinal_ref - 0.75) <= (positionYfinal_ref - 0.5) / 2) { 405 | Keyboard.press(KEY_UP); 406 | } else { 407 | Keyboard.press(KEY_LEFT); 408 | } 409 | } else if (5 * SCREEN_WIDTH / 10 > position[i][1] && position[i][1] >= 3 * SCREEN_WIDTH / 10 && position[i][2] < SCREEN_HEIGHT / 2) { 410 | Keyboard.press(KEY_D); 411 | 412 | } else if (3 * SCREEN_WIDTH / 10 > position[i][1] && position[i][2] < SCREEN_HEIGHT / 2) { 413 | Keyboard.press(KEY_Q); 414 | 415 | } else if (5 * SCREEN_WIDTH / 10 > position[i][1] && position[i][1] >= 3 * SCREEN_WIDTH / 10 && position[i][2] > SCREEN_HEIGHT / 2) { 416 | Keyboard.press(KEY_S); 417 | 418 | } else if (3 * SCREEN_WIDTH / 10 > position[i][1] && position[i][2] > SCREEN_HEIGHT / 2) { 419 | Keyboard.press(KEY_E); 420 | } 421 | } 422 | } 423 | #endif 424 | } 425 | 426 | 427 | void send_data_python() { 428 | for (int i = 0; i < NB_POINT_MAX; i++) { 429 | if (position[i][1] != 0 && position[i][2] != 0) { 430 | Serial.print("XX"); 431 | Serial.print(position[i][1]); 432 | Serial.print("XX"); 433 | Serial.print(position[i][2]); 434 | Serial.println("XX"); 435 | } 436 | } 437 | } 438 | 439 | 440 | void send_position_serial() { 441 | 442 | Serial.println("-------------"); 443 | for (int i = 0; i < NB_POINT_MAX; i++) { 444 | if (position[i][1] != 0 && position[i][2] != 0) { 445 | 446 | Serial.print(" X: "); 447 | Serial.print(position[i][1]); 448 | Serial.print(" Y: "); 449 | Serial.print(position[i][2]); 450 | } 451 | } 452 | Serial.println(); 453 | } 454 | 455 | 456 | void send_data_serial() { 457 | 458 | Serial.println("------------------------------"); 459 | for (int j = 0; j < NB_LED; j++) { 460 | int mini = 0, maxi = 0, flag_delta = 0; 461 | for (int i = 0; i < NB_PIXELS; i++) { 462 | if (CALIBRATION_MIN <= tab[j][i] && tab[j][i] <= CALIBRATION_MAX) { 463 | if (flag_delta == 0) { 464 | mini = i; 465 | flag_delta = 1; 466 | } 467 | maxi = i; 468 | } 469 | else { 470 | if (flag_delta == 1) { 471 | Serial.print(" LED : "); 472 | Serial.print(j + 1); 473 | Serial.print(" Pixel : "); 474 | Serial.print(mini); 475 | Serial.print(" - "); 476 | Serial.print(maxi); 477 | Serial.print(" Value : "); 478 | Serial.print(tab[j][mini]); 479 | Serial.print(" - "); 480 | Serial.println(tab[j][maxi]); 481 | } 482 | flag_delta = 0; 483 | } 484 | } 485 | } 486 | } 487 | 488 | 489 | void send_data_processing() { 490 | 491 | int val = 111; // Start a communication 492 | Serial.write( 0xff); 493 | Serial.write( val & 0xff); 494 | delay(1); 495 | 496 | for (int j = 0; j < NB_LED; j++) { 497 | int mini = 0, maxi = 0, flag_delta = 0; // have to test this 498 | for (int i = NB_PIXELS - 1; i >= 0; i--) { 499 | if (CALIBRATION_MIN <= tab[j][i] && tab[j][i] <= CALIBRATION_MAX) { 500 | if (flag_delta == 0) { 501 | mini = i; 502 | flag_delta = 1; 503 | } 504 | maxi = i; 505 | } 506 | else { 507 | if (flag_delta == 1) { 508 | Serial.write( 0xff); 509 | Serial.write( j & 0xff); 510 | Serial.write( mini & 0xff); 511 | Serial.write( maxi & 0xff); 512 | } 513 | flag_delta = 0; 514 | } 515 | } 516 | } 517 | 518 | val = 112; // end of communication 519 | Serial.write( 0xff); 520 | Serial.write( val & 0xff); 521 | delay(PROCESSING_DELAY); 522 | } 523 | 524 | #if OPTION == 8 525 | void send_data_bluetooth() { 526 | char tx_data[4]; 527 | for (int j = 0; j < NB_LED; j++) { 528 | int mini = 0, maxi = 0, flag_delta = 0; // have to test this 529 | for (int i = NB_PIXELS - 1; i >= 0; i--) { 530 | if (CALIBRATION_MIN <= tab[j][i] && tab[j][i] <= CALIBRATION_MAX) { 531 | if (flag_delta == 0) { 532 | mini = i; 533 | flag_delta = 1; 534 | } 535 | maxi = i; 536 | } 537 | else { 538 | if (flag_delta == 1) { 539 | tx_data[0] = j; 540 | tx_data[0] = mini; 541 | tx_data[0] = maxi; 542 | wirelessSPI.write( &tx_data, 4 ); 543 | } 544 | flag_delta = 0; 545 | } 546 | } 547 | } 548 | #endif 549 | 550 | void init_tab() { 551 | 552 | for (int i = 0; i < NB_LED; i++) { 553 | for (int j = 0; j < NB_PIXELS; j++) { 554 | tab[i][j] = 0; 555 | } 556 | } 557 | 558 | for (int i = 0; i < NB_LED; i++) { 559 | tab_position[i][0][0] = i * DISTANCE_BETWEEN_LED; 560 | for (int j = 0; j < NB_BLACK_ZONE_MAX; j++) { 561 | for (int k = 0; k < 2; k++) { 562 | tab_position[i][j + 1][k] = 0; 563 | } 564 | } 565 | } 566 | } 567 | 568 | 569 | boolean read_CIS(int led_on) { 570 | boolean flag_detect = 0; 571 | 572 | digitalWrite(SENSOR_LE, HIGH); 573 | digitalWrite(SENSOR_CLK, HIGH); 574 | digitalWrite(SENSOR_CLK, LOW); 575 | digitalWrite(SENSOR_LE, LOW); 576 | 577 | for (int i = 0; i < NB_PIXELS; i++) { 578 | for (int j = 0; j < (NB_PIXELS_MAX / NB_PIXELS); j++) { // (2700 / 50) = 54 579 | digitalWrite(SENSOR_CLK, HIGH); 580 | digitalWrite(SENSOR_CLK, LOW); 581 | } 582 | 583 | tab[led_on][NB_PIXELS - 1 - i] = analogRead(ANALOG_PIN_Sensor1); 584 | //tab[led_on][i] = analogRead(ANALOG_PIN_Sensor1); 585 | //tab[led_on][(NB_PIXELS*2)-1-i] = analogRead(ANALOG_PIN_Sensor2); // uncomment to use the second sensor 586 | 587 | if (CALIBRATION_MIN <= tab[led_on][NB_PIXELS - 1 - i] && tab[led_on][NB_PIXELS - 1 - i] <= CALIBRATION_MAX) { 588 | flag_detect = 1; 589 | } 590 | } 591 | return flag_detect; 592 | } 593 | 594 | 595 | void init_Pin() { 596 | /*for (int i = 6; i < 22; i++) { 597 | pinMode(i, OUTPUT); 598 | digitalWrite(i, HIGH); 599 | }*/ 600 | pinMode(STP_SDI, OUTPUT); 601 | pinMode(STP_CLK, OUTPUT); 602 | pinMode(STP_LE, OUTPUT); 603 | pinMode(13, OUTPUT); 604 | digitalWrite(STP_LE, LOW); 605 | digitalWrite(STP_SDI, LOW); 606 | digitalWrite(STP_CLK, LOW); 607 | pinMode(SENSOR_LE, OUTPUT); 608 | pinMode(SENSOR_CLK, OUTPUT); 609 | } 610 | 611 | 612 | void LED_IR(int numled, boolean state) { 613 | //digitalWrite(numled + 6, state); //as my LED number is 0 but the pin start at 6 614 | char STP_config[4] = {0, 0, 0, 0}; 615 | if (state == LOW) { 616 | switch (numled) { 617 | 618 | case 0: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x80; break; 619 | case 1: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x40; break; 620 | case 2: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x20; break; 621 | case 3: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x10; break; 622 | case 4: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x08; break; 623 | case 5: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x04; break; 624 | case 6: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x02; break; 625 | case 7: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x01; break; 626 | case 8: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x01; STP_config[3] = 0x00; break; 627 | case 9: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x02; STP_config[3] = 0x00; break; 628 | case 10: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x04; STP_config[3] = 0x00; break; 629 | case 11: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x08; STP_config[3] = 0x00; break; 630 | case 12: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x10; STP_config[3] = 0x00; break; 631 | case 13: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x20; STP_config[3] = 0x00; break; 632 | case 14: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x40; STP_config[3] = 0x00; break; 633 | case 15: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x80; STP_config[3] = 0x00; break; 634 | 635 | case 16: STP_config[0] = 0x00; STP_config[1] = 0x80; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 636 | case 17: STP_config[0] = 0x00; STP_config[1] = 0x40; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 637 | case 18: STP_config[0] = 0x00; STP_config[1] = 0x20; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 638 | case 19: STP_config[0] = 0x00; STP_config[1] = 0x10; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 639 | case 20: STP_config[0] = 0x00; STP_config[1] = 0x08; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 640 | case 21: STP_config[0] = 0x00; STP_config[1] = 0x04; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 641 | case 22: STP_config[0] = 0x00; STP_config[1] = 0x02; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 642 | case 23: STP_config[0] = 0x00; STP_config[1] = 0x01; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 643 | case 24: STP_config[0] = 0x80; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 644 | case 25: STP_config[0] = 0x40; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 645 | case 26: STP_config[0] = 0x20; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 646 | case 27: STP_config[0] = 0x10; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 647 | case 28: STP_config[0] = 0x8; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 648 | case 29: STP_config[0] = 0x04; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 649 | case 30: STP_config[0] = 0x02; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 650 | case 31: STP_config[0] = 0x01; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; break; 651 | 652 | } 653 | } 654 | else { 655 | STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x00; 656 | } 657 | send_data(STP_config[0]); 658 | send_data(STP_config[1]); 659 | send_data(STP_config[2]); 660 | send_data(STP_config[3]); 661 | latch(); 662 | 663 | } 664 | 665 | void send_data(char data) { 666 | for (int i = 0; i < 8; i++) { 667 | if (data & 0x01 << i) { 668 | digitalWrite(STP_SDI, HIGH); 669 | //delayMicroseconds(10); 670 | } 671 | digitalWrite(STP_CLK, HIGH); 672 | //delayMicroseconds(10); 673 | //delay(500); 674 | digitalWrite(STP_SDI, LOW); 675 | digitalWrite(STP_CLK, LOW); 676 | //delay(500); 677 | } 678 | } 679 | 680 | void latch(void) { 681 | digitalWrite(STP_LE, HIGH); 682 | //delayMicroseconds(10); 683 | digitalWrite(STP_LE, LOW); 684 | } 685 | 686 | 687 | void clear_CIS() { 688 | 689 | digitalWrite(SENSOR_LE, HIGH); 690 | digitalWrite(SENSOR_CLK, HIGH); 691 | digitalWrite(SENSOR_CLK, LOW); 692 | digitalWrite(SENSOR_LE, LOW); 693 | 694 | for (int i = 0; i < NB_PIXELS_MAX; i++) { 695 | digitalWrite(SENSOR_CLK, HIGH); 696 | digitalWrite(SENSOR_CLK, LOW); 697 | } 698 | } 699 | 700 | 701 | 702 | 703 | 704 | 705 | -------------------------------------------------------------------------------- /Software/Test_CIS_Program_Arduino&Processing/CIS_Arduino_Color/CIS_Arduino_Color.ino: -------------------------------------------------------------------------------- 1 | 2 | 3 | #define ANALOG_PIN A9 4 | #define SENSOR_LE 2 5 | #define SENSOR_CLK 3 6 | #define LED_DEBUG 13 7 | #define TIME 200 8 | 9 | #define NB_PIXELS 20 10 | #define NB_PIXELS_MAX 2700 11 | 12 | int tab[NB_PIXELS_MAX]; 13 | 14 | void setup() { 15 | pinMode(SENSOR_LE, OUTPUT); 16 | pinMode(SENSOR_CLK, OUTPUT); 17 | pinMode(LED_DEBUG, OUTPUT); 18 | //pinMode(8, OUTPUT); // turn a LED on 19 | //digitalWrite(8, LOW); 20 | Serial.begin(9600); 21 | 22 | } 23 | 24 | void loop() { 25 | 26 | clearData(); 27 | 28 | clear_CIS(); 29 | 30 | read_CIS(); 31 | 32 | send_processing(); 33 | //print_message(); 34 | //digitalWrite(13, !digitalRead(13)); 35 | delay(TIME); 36 | } 37 | 38 | 39 | void clearData(){ 40 | for(int i=0; i> 8) & 0xff); 58 | Serial.write( val & 0xff); 59 | delay(1); 60 | 61 | for(int i=0; i> 8) & 0xff); 65 | Serial.write( val & 0xff); 66 | delay(1); 67 | } 68 | 69 | val = 1027; // last data 70 | Serial.write( 0xff); 71 | Serial.write( (val >> 8) & 0xff); 72 | Serial.write( val & 0xff); 73 | //delay(TIME); 74 | } 75 | 76 | void read_CIS(){ 77 | 78 | digitalWrite(SENSOR_LE, HIGH); 79 | digitalWrite(SENSOR_CLK, HIGH); 80 | digitalWrite(SENSOR_CLK, LOW); 81 | digitalWrite(SENSOR_LE, LOW); 82 | 83 | for(int i=0; i= 1) { 44 | if (port.read() == 0xff) { 45 | val = (port.read() << 8) | (port.read()); 46 | //print("value :"); 47 | //println(val); 48 | 49 | } 50 | tab[cpt] = val; 51 | print(cpt); 52 | print(" "); 53 | println(val); 54 | if(val == 1026) 55 | { 56 | cpt=0; 57 | } 58 | if(cpt == 21) 59 | { 60 | cpt=0; 61 | } 62 | cpt++; 63 | //flag=0; 64 | } 65 | 66 | if(tab[21] == 1027 && tab[20] <= 1024){ 67 | //fill(0); 68 | //rect(width*0.29, height*0.9, width/100*2, width/100*2); 69 | for(int i=2; i<19;i++){ 70 | //fill(tab[i]/4); // convert the 1024 analog 10bits to 255 8bits values 71 | //rect(width*0.9, height/12 + i*24, 24, 24); 72 | for(int j=1; j<=3; j++){ 73 | //stroke(150, 150, 150); 74 | fill(150, 150, 150); 75 | if(tab[i]<= 650){ 76 | //line(width*0.15, height*0.5, width*0.9, height/12 + i*24); 77 | triangle(width*0.15, height*0.5, width*0.9, height/12 + i*24 - 12, width*0.9, height/12 + i*24 +12); 78 | } 79 | } 80 | } 81 | for(int i=2; i<19;i++){ 82 | 83 | if(tab[i]/4 < 125){ 84 | fill(0); 85 | }else{ 86 | fill(tab[i]/4); // convert the 1024 analog 10bits to 255 8bits values 87 | } 88 | rect(width*0.9, height/12 + i*24, 24, 24); 89 | } 90 | //fill(255); 91 | //rect(width*0.71, height*0.9, width/100*2, width/100*2); 92 | 93 | } 94 | stroke(0,0,0); 95 | drawscreen(); 96 | } 97 | 98 | void drawscreen(){ 99 | //fill(0,0,255); 100 | //text("Detection touch screen",width/2-65,20); 101 | rectMode(CENTER); 102 | fill(200, 100, 200); 103 | rect(width*0.15, height*0.5, 40, 40); 104 | } 105 | 106 | void drawcursor(){ 107 | } 108 | 109 | void mousePressed(){ 110 | } -------------------------------------------------------------------------------- /Software/Test_CIS_Program_Arduino&Processing/CIS_array_color/sketch.properties: -------------------------------------------------------------------------------- 1 | mode.id=processing.mode.java.JavaMode 2 | mode=Java 3 | -------------------------------------------------------------------------------- /Software/Test_CIS_Program_Send_Serial/Test_CIS_Program_Send_Serial.ino: -------------------------------------------------------------------------------- 1 | 2 | 3 | #define ANALOG_PIN A9 4 | #define SENSOR_LE 2 5 | #define SENSOR_CLK 3 6 | #define LED_DEBUG 13 7 | #define TIME 200 8 | 9 | #define NB_PIXELS 22 10 | #define NB_PIXELS_MAX 2700 11 | 12 | #define sensibility_1 650 13 | #define sensibility_2 750 14 | #define sensibility_3 900 15 | 16 | 17 | int tab[NB_PIXELS_MAX]; 18 | 19 | void setup() { 20 | pinMode(SENSOR_LE, OUTPUT); 21 | pinMode(SENSOR_CLK, OUTPUT); 22 | pinMode(LED_DEBUG, OUTPUT); 23 | Serial.begin(9600); 24 | /* 25 | for(int i=0; i<16; i++){ 26 | pinMode(i+6, OUTPUT); 27 | digitalWrite(i+6, HIGH); 28 | } 29 | digitalWrite(13, LOW); 30 | digitalWrite(14, LOW); 31 | */ 32 | digitalWrite(LED_DEBUG, HIGH); 33 | } 34 | 35 | void loop() { 36 | 37 | clearData(); 38 | 39 | clear_CIS(); 40 | read_CIS(); 41 | 42 | //digitalWrite(LED_DEBUG, !digitalRead(LED_DEBUG)); 43 | 44 | send_data_serial(); 45 | 46 | delay(TIME); 47 | } 48 | 49 | 50 | 51 | void clearData(){ 52 | for(int i=0; i0; i--){ 60 | 61 | if(tab[i] >= sensibility_3){ 62 | Serial.print("XXX"); 63 | } 64 | else if(tab[i] >= sensibility_2){ 65 | Serial.print("XX "); 66 | } 67 | //else if(tab[i] >= sensibility_1){ 68 | // Serial.print(" X "); 69 | //} 70 | else{ 71 | Serial.print(tab[i]); 72 | } 73 | Serial.print(" "); 74 | } 75 | Serial.println(); 76 | } 77 | 78 | void read_CIS(){ 79 | 80 | digitalWrite(SENSOR_LE, HIGH); 81 | digitalWrite(SENSOR_CLK, HIGH); 82 | digitalWrite(SENSOR_CLK, LOW); 83 | digitalWrite(SENSOR_LE, LOW); 84 | 85 | for(int i=0; i for the multi-point 166 | for(int j=0; j NB_PIXELS/50){ //Safety you can add to avoid too small detection 176 | 177 | Serial.print(" LED : "); 178 | Serial.print(i+1); 179 | Serial.print(" Pixel : "); 180 | Serial.print(mini); 181 | Serial.print(" - "); 182 | Serial.print(maxi); 183 | Serial.print(" Value : "); 184 | Serial.print(tab[i][mini]); 185 | Serial.print(" - "); 186 | Serial.println(tab[i][maxi]); 187 | 188 | if(k <= NB_BLACK_ZONE_MAX){ 189 | k++; // increase the number of black zone per LED (for multi-touch) 190 | } 191 | //Calcul and store the "a" in Y = A*X + B so Y = tab_position[led][1&] * X + tab_position[led][0] 192 | // Here we have : a = (Y - B)/X 193 | 194 | tab_position[i][k][1] = maxi - mini; 195 | tab_position[i][k][0] = ((((((maxi+mini)/2)*CIS_HEIGHT)/NB_PIXELS)+(SCREEN_HEIGHT/2)-(CIS_HEIGHT/2) - tab_position[i][0][0]) / SCREEN_WIDTH); 196 | } 197 | flag_delta = 0; 198 | } 199 | } 200 | } 201 | 202 | 203 | //--------------PART 2 : check the crossing of the functions to calculate the detection points 204 | 205 | for(int i=0; i= 2){ 222 | if(tab_position[j][1][0] != 0){ 223 | 224 | float compareY = tab_position[j][1][0] * positionX_ref + (tab_position[j][0][0]); 225 | 226 | //if the Y of he new line is close to the reference 227 | if(positionY_ref - DELTA/2 <= compareY && compareY <= positionY_ref + DELTA/2){ 228 | /* 229 | Serial.print(i+1); 230 | Serial.print(" "); 231 | Serial.print(j+1); 232 | Serial.print(" "); 233 | Serial.print(cpt); 234 | Serial.print(" "); 235 | Serial.print(compareY); 236 | Serial.print(" "); 237 | Serial.print(positionY_ref); 238 | Serial.print(" "); 239 | Serial.print(tab_position[j][1][0]); 240 | Serial.print(" "); 241 | Serial.println(tab_position[j][0][0]); 242 | */ 243 | positionY_ref = ((positionY_ref * cpt) + compareY)/ (cpt + 1); // adapt the reference position 244 | 245 | // We drop down the detection tab k to don't use the same detection twice 246 | for(int k=1; k< NB_BLACK_ZONE_MAX-1; k++){ 247 | tab_position[j][k][0] = tab_position[j][k+1][0]; 248 | } 249 | cpt++; 250 | } 251 | } 252 | } 253 | 254 | // store a value 255 | if(tab_position[i][1][0] != 0 && tab_position[j][1][0] != 0 && cpt == 0){ 256 | 257 | // when we have two points we calculate the contact 258 | positionX_ref = (tab_position[j][0][0] - tab_position[i][0][0]) / (tab_position[i][1][0] - tab_position[j][1][0]); 259 | positionY_ref = ((((tab_position[i][1][0])*(positionX_ref)) + tab_position[i][0][0]) + (((tab_position[j][1][0])*(positionX_ref)) + tab_position[j][0][0]))/2; 260 | //Serial.print(" j0 ");Serial.print(tab_position[j][0][0]);Serial.print(" i0 ");Serial.print(tab_position[i][0][0]);Serial.print(" i1 ");Serial.print(tab_position[i][1][0]);Serial.print(" j1 ");Serial.print(tab_position[j][1][0]); 261 | //Serial.print(" Xref : ");Serial.print(positionX_ref);Serial.print(" Yref : ");Serial.println(positionY_ref); 262 | // We remove the value used 263 | for(int k=1; k< NB_BLACK_ZONE_MAX-1; k++){ 264 | tab_position[i][k][0] = tab_position[i][k+1][0]; 265 | tab_position[j][k][0] = tab_position[j][k+1][0]; 266 | } 267 | cpt = 2; // the cpt has now two intersections 268 | } 269 | } 270 | if(cpt >= 2){ 271 | //if(positionX_ref < 350 || cpt > 5){ // you can add for debugging, 272 | position[cpt_point][0] = cpt; 273 | position[cpt_point][1] = positionX_ref; 274 | position[cpt_point][2] = positionY_ref; 275 | cpt = -1; 276 | cpt_point++; 277 | /* 278 | Serial.print(" LED: "); 279 | Serial.print(i); 280 | Serial.println(" "); 281 | */ 282 | //} 283 | } 284 | 285 | } 286 | } 287 | 288 | 289 | void send_mouse(){ 290 | 291 | #if OPTION == 5 292 | if(position[0][1] != 0 && position[0][2] !=0){ 293 | 294 | position[0][1] = map(position[0][1], 0, SCREEN_WIDTH, SCREEN_WIDTH, 0); // map depending on your output need 295 | position[0][2] = map(position[0][2], 0, SCREEN_HEIGHT, SCREEN_HEIGHT, 0); 296 | 297 | Mouse.moveTo(position[0][1], position[0][2]); 298 | } 299 | #endif 300 | 301 | } 302 | 303 | void send_mouse_click(){ 304 | 305 | #if OPTION == 7 306 | if(position[0][1] != 0 && position[0][2] !=0){ 307 | 308 | position[0][1] = map(position[0][1], 0, SCREEN_WIDTH, SCREEN_WIDTH, 0); // map depending on your output need 309 | position[0][2] = map(position[0][2], 0, SCREEN_HEIGHT, SCREEN_HEIGHT, 0); 310 | 311 | Mouse.moveTo(position[0][1], position[0][2]); 312 | Mouse.click(MOUSE_LEFT); 313 | } 314 | #endif 315 | 316 | } 317 | 318 | 319 | void send_keyboard(){ // interact as a keyboard, write the input/output you need 320 | 321 | #if OPTION == 6 322 | Keyboard.release(KEY_LEFT); 323 | Keyboard.release(KEY_UP); 324 | Keyboard.release(KEY_DOWN); 325 | Keyboard.release(KEY_RIGHT); 326 | Keyboard.release(KEY_Q); 327 | Keyboard.release(KEY_D); 328 | 329 | for(int i=0; i 0.75 && positionYfinal_ref < 0.5){ 344 | if(((positionXfinal_ref-0.75) + positionYfinal_ref/4) <= 0.25){ 345 | Keyboard.press(KEY_DOWN); 346 | }else{ 347 | Keyboard.press(KEY_LEFT); 348 | } 349 | }else if(0.5 < positionXfinal_ref && positionXfinal_ref < 0.75 && positionYfinal_ref > 0.5){ 350 | if(((positionXfinal_ref-0.5) + (positionYfinal_ref-0.5)/2) <= 0.25){ 351 | Keyboard.press(KEY_RIGHT); 352 | }else{ 353 | Keyboard.press(KEY_UP); 354 | } 355 | }else if(positionXfinal_ref > 0.75 && positionYfinal_ref > 0.5){ 356 | if((positionXfinal_ref-0.75) <= (positionYfinal_ref-0.5)/2){ 357 | Keyboard.press(KEY_UP); 358 | }else{ 359 | Keyboard.press(KEY_LEFT); 360 | } 361 | }else if(5*SCREEN_WIDTH/10 > position[i][1] && position[i][1] >= 3*SCREEN_WIDTH/10 && position[i][2] < SCREEN_HEIGHT/2){ 362 | Keyboard.press(KEY_D); 363 | 364 | }else if(3*SCREEN_WIDTH/10 > position[i][1] && position[i][2] < SCREEN_HEIGHT/2){ 365 | Keyboard.press(KEY_Q); 366 | 367 | }else if(5*SCREEN_WIDTH/10 > position[i][1] && position[i][1] >= 3*SCREEN_WIDTH/10 && position[i][2] > SCREEN_HEIGHT/2){ 368 | Keyboard.press(KEY_S); 369 | 370 | }else if(3*SCREEN_WIDTH/10 > position[i][1] && position[i][2] > SCREEN_HEIGHT/2){ 371 | Keyboard.press(KEY_E); 372 | } 373 | } 374 | } 375 | #endif 376 | } 377 | 378 | 379 | void send_data_python(){ 380 | for(int i=0; i=0; i--){ 451 | if(CALIBRATION_MIN <= tab[j][i] && tab[j][i] <= CALIBRATION_MAX){ 452 | if(flag_delta == 0){ 453 | mini = i; 454 | flag_delta = 1; 455 | } 456 | maxi = i; 457 | } 458 | else{ 459 | if(flag_delta == 1){ 460 | Serial.write( 0xff); 461 | Serial.write( j & 0xff); 462 | Serial.write( mini & 0xff); 463 | Serial.write( maxi & 0xff); 464 | } 465 | flag_delta = 0; 466 | } 467 | } 468 | } 469 | 470 | val = 112; // end of communication 471 | Serial.write( 0xff); 472 | Serial.write( val & 0xff); 473 | delay(PROCESSING_DELAY); 474 | } 475 | 476 | void init_tab(){ 477 | 478 | for(int i=0; i 0) { // Don't read the value before the first sensor for the first LED 50 | readSensors(l, l - 1, 0); 51 | } 52 | readSensors(l, l, 1); 53 | if (l < NB_LED - 1) { // Don't read the value after the last sensor for the last LED 54 | readSensors(l, l + 1, 2); 55 | } 56 | } 57 | digitalWrite(led, !digitalRead(led)); 58 | printDebug(); 59 | 60 | for (int i = 0; i < (NB_SENSORS * NB_SENSOR_PER_LED); i++) { 61 | if (detect[i] == 0 && detect[i + 1] == 0) { 62 | if ( i <= flagValue - 6 || flagValue+6 <= i) { 63 | flagValue = i; 64 | Serial3.write(0xFF); 65 | byte data = map(i, 1 , 47, 0, 255); 66 | Serial3.write(data); 67 | Serial.println(data); 68 | //Serial3.write(0x00); 69 | delay(200); 70 | } 71 | } 72 | } 73 | delay(100); 74 | } 75 | 76 | void printDebug(void) { 77 | Serial.println(); 78 | Serial.println("------------------tableau--------------------"); 79 | //for (int i = 0; i < NB_LED; i++) { 80 | for (int i = NB_LED-1; i >= 0; i--) { 81 | for (int j = 0; j < NB_SENSOR_PER_LED; j++) { 82 | if (sensorsValues[i][j] == 100) { 83 | Serial.print("==="); 84 | if (j == 0) { 85 | detect[i * 3 + 0] = 1; 86 | } 87 | if (j == 1) { 88 | detect[i * 3 + 1] = 1; 89 | } 90 | if (j == 2) { 91 | detect[i * 3 + 2] = 1; 92 | } 93 | } 94 | else if (sensorsValues[i][j] == 999) { 95 | Serial.print("XXX"); 96 | } 97 | else { 98 | Serial.print(sensorsValues[i][j]); 99 | } 100 | 101 | Serial.print(" - "); 102 | } 103 | Serial.print(" LED = "); 104 | Serial.print(i); 105 | Serial.println(); 106 | } 107 | Serial.print("Data = "); 108 | for (int i = 0; i < (NB_LED * 3); i++) { 109 | Serial.print(detect[i]); 110 | Serial.print(" "); 111 | } 112 | Serial.println(); 113 | } 114 | 115 | void clearTable() { 116 | for (int i = 0; i < NB_LED; i++) { 117 | for (int j = 0; j < NB_SENSOR_PER_LED; j++) { 118 | sensorsValues[i][j] = 999; 119 | } 120 | } 121 | 122 | for (int i = 0; i < (NB_SENSORS * NB_SENSOR_PER_LED); i++) { 123 | detect[i] = 0; 124 | } 125 | detect[0] = 1; 126 | detect[(NB_SENSORS * NB_SENSOR_PER_LED) - 1] = 1; 127 | } 128 | 129 | 130 | void readSensors(int led, int sensornb, int nb) { 131 | int data = 0; 132 | int sensor; 133 | 134 | switch (sensornb) { 135 | case 0: sensor = 1; break; 136 | case 1: sensor = 0; break; 137 | case 2: sensor = 3; break; 138 | case 3: sensor = 2; break; 139 | case 4: sensor = 5; break; 140 | case 5: sensor = 4; break; 141 | case 6: sensor = 7; break; 142 | case 7: sensor = 6; break; 143 | 144 | case 8: sensor = 1; break; 145 | case 9: sensor = 0; break; 146 | case 10: sensor = 3; break; 147 | case 11: sensor = 2; break; 148 | case 12: sensor = 5; break; 149 | case 13: sensor = 4; break; 150 | case 14: sensor = 7; break; 151 | case 15: sensor = 6; break; 152 | 153 | } 154 | data = analogRead(sensor); 155 | if (data < THRESHOLD_LOW) { 156 | sensorsValues[led][nb] = 100; 157 | } 158 | else if (data > 1000) { 159 | sensorsValues[led][nb] = 999; 160 | } 161 | else if (data > THRESHOLD_HIGH) { 162 | sensorsValues[led][nb] = 999; 163 | } 164 | else { 165 | sensorsValues[led][nb] = data; 166 | } 167 | } 168 | 169 | void LED_IR(int numled) { 170 | 171 | char STP_config[4] = {0, 0, 0, 0}; 172 | switch (numled) { 173 | 174 | case 7: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x01; STP_config[3] = 0x00; break; 175 | case 6: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x02; STP_config[3] = 0x00; break; 176 | case 5: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x04; STP_config[3] = 0x00; break; 177 | case 4: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x08; STP_config[3] = 0x00; break; 178 | case 3: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x10; STP_config[3] = 0x00; break; 179 | case 2: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x20; STP_config[3] = 0x00; break; 180 | case 1: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x40; STP_config[3] = 0x00; break; 181 | case 0: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x80; STP_config[3] = 0x00; break; 182 | case 8: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x01; break; 183 | case 9: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x02; break; 184 | case 10: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x04; break; 185 | 186 | case 11: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x08; break; 187 | 188 | case 12: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x10; break; 189 | case 13: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x20; break; 190 | case 14: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x40; break; 191 | case 15: STP_config[0] = 0x00; STP_config[1] = 0x00; STP_config[2] = 0x00; STP_config[3] = 0x80; break; 192 | } 193 | 194 | //send_data(STP_config[0]); 195 | //send_data(STP_config[1]); 196 | send_data(STP_config[3]); 197 | send_data(STP_config[2]); 198 | latch(); 199 | } 200 | 201 | void send_data(char data) { 202 | for (int i = 0; i < 8; i++) { 203 | if (data & 0x01 << i) { 204 | digitalWrite(PIN_SDI, HIGH); 205 | //delayMicroseconds(10); 206 | } 207 | digitalWrite(PIN_CLK, HIGH); 208 | //delayMicroseconds(10); 209 | //delay(500); 210 | digitalWrite(PIN_SDI, LOW); 211 | digitalWrite(PIN_CLK, LOW); 212 | //delay(500); 213 | } 214 | } 215 | 216 | void latch(void) { 217 | digitalWrite(PIN_LE, HIGH); 218 | //delayMicroseconds(10); 219 | digitalWrite(PIN_LE, LOW); 220 | } 221 | 222 | 223 | 224 | -------------------------------------------------------------------------------- /Z-wave_Software_Magic_Frame/Z-wave_Z-uno_UART/Z-wave_Z-uno_UART.ino: -------------------------------------------------------------------------------- 1 | 2 | // 13 pin - user LED of Z-Uno board 3 | #define LED_PIN 13 4 | // Potentiometer pin number 5 | #define POT_PIN 6 6 | 7 | // channel number 8 | #define ZUNO_CHANNEL_NUMBER_ONE 1 9 | 10 | // Last saved potentiometer value 11 | byte lastValue; 12 | boolean flagStart = 0;; 13 | 14 | ZUNO_SETUP_CHANNELS(ZUNO_SENSOR_MULTILEVEL_GENERAL_PURPOSE(getter)); 15 | 16 | // the setup routine runs once when you press reset: 17 | void setup() { 18 | Serial1.begin(9600); 19 | Serial.begin(9600); 20 | pinMode(LED_PIN, OUTPUT); // setup pin as output 21 | pinMode(POT_PIN, INPUT); // setup potentiometer pin as input 22 | } 23 | // the loop routine runs over and over again forever: 24 | void loop() { 25 | byte header = 0x00; 26 | 27 | if (Serial1.available() > 0) { 28 | header = Serial1.read(); 29 | delay(1); 30 | Serial.println("Value detected on serial"); 31 | if (header == 0xFF) { 32 | lastValue = Serial1.read(); 33 | Serial.print("The value is : "); 34 | Serial.println(lastValue); 35 | zunoSendReport(ZUNO_CHANNEL_NUMBER_ONE); 36 | delay(100); 37 | } 38 | } 39 | } 40 | 41 | byte getter(void) { 42 | byte tempVariable; 43 | tempVariable = (byte)((((word) lastValue) * 100) / 0xff); 44 | return tempVariable; 45 | } 46 | --------------------------------------------------------------------------------