Advertisement
mx270a

Electric Imp 1.3" OLED SH1106 via I2C

Jan 11th, 2016
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.71 KB | None | 0 0
  1. hardware.i2c89.configure(CLOCK_SPEED_400_KHZ);
  2. oled <- hardware.i2c89;
  3. local i2c_address = 0x78;
  4.  
  5.  
  6. function ASCII_8bit(c) {
  7. switch (c) {
  8. case "!": return "\x00\x00\x5F\x00\x00";
  9. case "\"": return "\x00\x07\x00\x07\x00";
  10. case "#": return "\x14\x7F\x14\x7F\x14";
  11. case "$": return "\x24\x2A\x7F\x2A\x12";
  12. case "%": return "\x23\x13\x08\x64\x62";
  13. case "&": return "\x36\x49\x55\x22\x50";
  14. case "'": return "\x00\x05\x03\x00\x00";
  15. case "(": return "\x00\x1C\x22\x41\x00";
  16. case ")": return "\x00\x41\x22\x1C\x00";
  17. case "*": return "\x14\x08\x3E\x08\x14";
  18. case "+": return "\x08\x08\x3E\x08\x08";
  19. case "'": return "\x00\x50\x30\x00\x00";
  20. case "-": return "\x08\x08\x08\x08\x08";
  21. case ".": return "\x00\x60\x60\x00\x00";
  22. case "/": return "\x20\x10\x08\x04\x02";
  23. case "0": return "\x3E\x51\x49\x45\x3E";
  24. case "1": return "\x00\x42\x7F\x40\x00";
  25. case "2": return "\x42\x61\x51\x49\x46";
  26. case "3": return "\x21\x41\x45\x4B\x31";
  27. case "4": return "\x18\x14\x12\x7F\x10";
  28. case "5": return "\x27\x45\x45\x45\x39";
  29. case "6": return "\x3C\x4A\x49\x49\x30";
  30. case "7": return "\x01\x71\x09\x05\x03";
  31. case "8": return "\x36\x49\x49\x49\x36";
  32. case "9": return "\x06\x49\x49\x29\x1E";
  33. case ":": return "\x00\x36\x36\x00\x00";
  34. case ";": return "\x00\x56\x36\x00\x00";
  35. case "<": return "\x08\x14\x22\x41\x00";
  36. case "=": return "\x14\x14\x14\x14\x14";
  37. case ">": return "\x00\x41\x22\x14\x08";
  38. case "?": return "\x02\x01\x51\x09\x06";
  39. case "@": return "\x32\x49\x79\x41\x3E";
  40. case "A": return "\x7E\x11\x11\x11\x7E";
  41. case "B": return "\x7F\x49\x49\x49\x36";
  42. case "C": return "\x3E\x41\x41\x41\x22";
  43. case "D": return "\x7F\x41\x41\x22\x1C";
  44. case "E": return "\x7F\x49\x49\x49\x41";
  45. case "F": return "\x7F\x09\x09\x09\x01";
  46. case "G": return "\x3E\x41\x49\x49\x7A";
  47. case "H": return "\x7F\x08\x08\x08\x7F";
  48. case "I": return "\x00\x41\x7F\x41\x00";
  49. case "J": return "\x20\x40\x41\x3F\x01";
  50. case "K": return "\x7F\x08\x14\x22\x41";
  51. case "L": return "\x7F\x40\x40\x40\x40";
  52. case "M": return "\x7F\x02\x0C\x02\x7F";
  53. case "N": return "\x7F\x04\x08\x10\x7F";
  54. case "O": return "\x3E\x41\x41\x41\x3E";
  55. case "P": return "\x7F\x09\x09\x09\x06";
  56. case "Q": return "\x3E\x41\x51\x21\x5E";
  57. case "R": return "\x7F\x09\x19\x29\x46";
  58. case "S": return "\x46\x49\x49\x49\x31";
  59. case "T": return "\x01\x01\x7F\x01\x01";
  60. case "U": return "\x3F\x40\x40\x40\x3F";
  61. case "V": return "\x1F\x20\x40\x20\x1F";
  62. case "W": return "\x3F\x40\x38\x40\x3F";
  63. case "X": return "\x63\x14\x08\x14\x63";
  64. case "Y": return "\x07\x08\x70\x08\x07";
  65. case "Z": return "\x61\x51\x49\x45\x43";
  66. case "[": return "\x00\x7F\x41\x41\x00";
  67. case "\\": return "\x02\x04\x08\x10\x20";
  68. case "]": return "\x00\x41\x41\x7F\x00";
  69. case "^": return "\x04\x02\x01\x02\x04";
  70. case "_": return "\x40\x40\x40\x40\x40";
  71. case "`": return "\x00\x01\x02\x04\x00";
  72. case "a": return "\x20\x54\x54\x54\x78";
  73. case "b": return "\x7F\x48\x44\x44\x38";
  74. case "c": return "\x38\x44\x44\x44\x20";
  75. case "d": return "\x38\x44\x44\x48\x7F";
  76. case "e": return "\x38\x54\x54\x54\x18";
  77. case "f": return "\x08\x7E\x09\x01\x02";
  78. case "g": return "\x0C\x52\x52\x52\x3E";
  79. case "h": return "\x7F\x08\x04\x04\x78";
  80. case "i": return "\x00\x44\x7D\x40\x00";
  81. case "j": return "\x20\x40\x44\x3D\x00";
  82. case "k": return "\x7F\x10\x28\x44\x00";
  83. case "l": return "\x00\x41\x7F\x40\x00";
  84. case "m": return "\x7C\x04\x18\x04\x78";
  85. case "n": return "\x7C\x08\x04\x04\x78";
  86. case "o": return "\x38\x44\x44\x44\x38";
  87. case "p": return "\x7C\x14\x14\x14\x08";
  88. case "q": return "\x08\x14\x14\x18\x7C";
  89. case "r": return "\x7C\x08\x04\x04\x08";
  90. case "s": return "\x48\x54\x54\x54\x20";
  91. case "t": return "\x04\x3F\x44\x40\x20";
  92. case "u": return "\x3C\x40\x40\x20\x7C";
  93. case "v": return "\x1C\x20\x40\x20\x1C";
  94. case "w": return "\x3C\x40\x30\x40\x3C";
  95. case "x": return "\x44\x28\x10\x28\x44";
  96. case "y": return "\x0C\x50\x50\x50\x3C";
  97. case "z": return "\x44\x64\x54\x4C\x44";
  98. case "{": return "\x00\x08\x36\x41\x00";
  99. case "|": return "\x00\x00\x7F\x00\x00";
  100. case "}": return "\x00\x41\x36\x08\x00";
  101. case "~": return "\x10\x08\x08\x10\x08";
  102. case "\xB0": return "\x00\x00\x07\x05\x07"; //degree
  103. default: return "\x00\x00\x00\x00\x00"; //space
  104. }
  105. }
  106. function sendChar8(data) {
  107. local char = ASCII_8bit(data);
  108. oled.write(i2c_address, "\x40"+char+"\x00\x00"); // 0x00 for some gap
  109. }
  110. function sendString8(y, x, textString) {
  111. setXY(y,x);
  112. foreach(character in textString) {
  113. if ((character & 0xE0) != 0xC0) { //Ignore the first byte of all 2-bytes unicode characters
  114. sendChar8(format("%c", character));
  115. }
  116. }
  117. }
  118.  
  119.  
  120. function ASCII_16bit_Top(c) {
  121. switch (c) {
  122. case "!": return "\xFF\xFF\xFF";
  123. case "\"": return "\x1F\x1F\x1F\x00\x1F\x1F\x1F";
  124. case "#": return "\x30\x30\xB0\xF8\xFF\x37\xB0\xF8\xFF\x37\x30";
  125. case "$": return "\x38\x7C\xE6\xFF\xC6\x8C\x08";
  126. case "%": return "\x7E\xFF\xC3\xC3\xFF\x7E\x00\xC0\xF0\x3E\x0F\x01\x00\x00\x00";
  127. case "&": return "\x00\x00\x9C\xFE\xFF\xF3\xE3\xFF\x3E\x1C\x00\x00\x00";
  128. case "'": return "\x1F\x1F\x1F";
  129. case "(": return "\xF0\xFE\x0F\x01";
  130. case ")": return "\x01\x0F\xFE\xF0";
  131. case "*": return "\x0C\x4C\xE8\x3F\x3F\xF8\x4C\x0C";
  132. case "+": return "\xC0\xC0\xC0\xC0\xFC\xFC\xFC\xC0\xC0\xC0\xC0";
  133. case "'": return "\x00\x00\x00";
  134. case "-": return "\x00\x00\x00\x00\x00\x00";
  135. case ".": return "\x00\x00\x00";
  136. case "/": return "\x00\x00\xE0\xFC\x3F\x03";
  137. case "0": return "\xF8\xFE\xFF\x07\x03\x07\xFF\xFE\xF8";
  138. case "1": return "\x70\x38\x38\x1C\xFF\xFF\xFF";
  139. case "2": return "\x0C\x0E\x0F\x03\x83\xC3\xFF\xFE\x3C";
  140. case "3": return "\x0C\x0E\x0F\xC3\xC3\xE3\xFF\xFE\x3C";
  141. case "4": return "\x00\x00\xC0\xE0\x38\x1E\xFF\xFF\xFF\x00\x00";
  142. case "5": return "\xC0\xFC\xFF\x7F\x63\xE3\xE3\xC3\x80";
  143. case "6": return "\xF8\xFE\xFE\xC7\x63\xE7\xEF\xCE\x84";
  144. case "7": return "\x03\x03\x03\xC3\xF3\xFB\x3F\x0F\x07";
  145. case "8": return "\x1C\x3E\xFF\xE3\xC3\xE3\xFF\x3E\x1C";
  146. case "9": return "\xF8\xFE\xFE\x87\x03\x87\xFE\xFE\xF8";
  147. case ":": return "\x1C\x1C\x1C";
  148. case "": return "\x1C\x1C\x1C";
  149. case "<": return "\xC0\xC0\xE0\x60\x70\x30\x30\x38\x18\x1C";
  150. case "=": return "\x70\x70\x70\x70\x70\x70\x70\x70\x70\x70";
  151. case ">": return "\x1C\x18\x38\x30\x30\x70\x60\xE0\xC0\xC0";
  152. case "?": return "\x0C\x0E\x0F\x07\x83\xC3\xE7\xFF\x7E\x3C";
  153. case "@": return "\xE0\xF8\x3C\xCE\xF6\x3B\x1B\x1B\xF3\xFB\x7B\x06\x0E\xFC\xF0\x00";
  154. case "A": return "\x00\x00\x80\xF8\xFF\x3F\x07\x3F\xFF\xF8\xC0\x00\x00";
  155. case "B": return "\xFF\xFF\xFF\xC7\xC7\xC7\xC7\xC7\xFF\xFE\x3C\x00";
  156. case "C": return "\xF0\xFC\xFE\x1E\x07\x07\x07\x07\x0F\x1E\x1E\x08";
  157. case "D": return "\xFF\xFF\xFF\x07\x07\x07\x07\x07\x1F\xFE\xFC\xF0";
  158. case "E": return "\xFF\xFF\xFF\xC7\xC7\xC7\xC7\xC7\xC7\xC7\x07";
  159. case "F": return "\xFF\xFF\xFF\xC7\xC7\xC7\xC7\xC7\xC7\x07";
  160. case "G": return "\xF0\xF8\xFC\x1E\x0E\x07\x07\x87\x87\x87\x8E\x9E\x9C\x88";
  161. case "H": return "\xFF\xFF\xFF\xC0\xC0\xC0\xC0\xC0\xC0\xFF\xFF\xFF";
  162. case "I": return "\xFF\xFF\xFF";
  163. case "J": return "\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF";
  164. case "K": return "\xFF\xFF\xFF\xC0\xE0\xF0\xFC\xFE\x8F\x07\x03\x01";
  165. case "L": return "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00";
  166. case "M": return "\xFF\xFF\xFF\x07\xFF\xF8\xC0\x00\xC0\xF8\xFF\x07\xFF\xFF\xFF";
  167. case "N": return "\xFF\xFF\xFF\x1E\x7C\xF0\xC0\x00\x00\xFF\xFF\xFF";
  168. case "O": return "\xF0\xFC\xFE\x1E\x0F\x07\x07\x07\x07\x0F\x1E\xFE\xFC\xF0";
  169. case "P": return "\xFF\xFF\xFF\xC7\xC7\xC7\xC7\xC7\xFF\xFE\x7C";
  170. case "Q": return "\xF0\xFC\xFE\x1E\x0F\x07\x07\x07\x07\x0F\x1E\xFE\xFC\xF0\x00";
  171. case "R": return "\xFF\xFF\xFF\xC7\xC7\xC7\xC7\xC7\xFF\xFE\x7C\x00";
  172. case "S": return "\x38\x7E\xFE\xEF\xC7\xC7\xC7\x8F\x9E\x9E\x18";
  173. case "T": return "\x07\x07\x07\x07\xFF\xFF\xFF\x07\x07\x07\x07";
  174. case "U": return "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF";
  175. case "V": return "\x03\x1F\xFF\xFC\xE0\x00\x00\x00\xE0\xFC\xFF\x1F\x03";
  176. case "W": return "\x03\x3F\xFF\xFC\xC0\x00\xC0\xFC\xFF\x0F\xFF\xFC\xC0\x00\xC0\xFC\xFF\x3F\x03";
  177. case "X": return "\x03\x07\x1F\x7C\xF8\xE0\xF8\x7C\x1F\x07\x03";
  178. case "Y": return "\x03\x07\x1F\x3C\xF8\xE0\xC0\xE0\xF8\x3C\x1F\x07\x03";
  179. case "Z": return "\x00\x07\x07\x07\x87\xE7\xF7\x7F\x3F\x1F\x0F";
  180. case "[": return "\xFF\xFF\x03\x03";
  181. case "\\": return "\x03\x3F\xFC\xC0\x00\x00";
  182. case "]": return "\x03\x03\xFF\xFF";
  183. case "^": return "\x80\xE0\xF8\x7E\x0F\x0F\x7E\xF8\xE0\x80";
  184. case "_": return "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  185. case "`": return "\x01\x03\x07\x04";
  186. case "a": return "\x40\x60\x30\x30\x30\xB0\xF0\xE0\xC0\x00";
  187. case "b": return "\xFE\xFE\xFE\x60\x30\x30\x70\xF0\xE0\x80";
  188. case "c": return "\x80\xE0\xE0\x70\x30\x30\x70\xE0\x40";
  189. case "d": return "\x80\xE0\xF0\x70\x30\x30\x60\xFE\xFE\xFE";
  190. case "e": return "\x80\xE0\xE0\x30\x30\x30\xF0\xE0\xC0";
  191. case "f": return "\x30\xFC\xFE\xFE\x36\x36\x06";
  192. case "g": return "\xE0\xF8\xFC\x1C\x0C\x0C\x18\xFC\xFC\xFC";
  193. case "h": return "\xFE\xFE\xFE\x60\x30\x30\x30\xF0\xE0\xC0";
  194. case "i": return "\xF6\xF6\xF6";
  195. case "j": return "\x00\x00\xF6\xF6\xF6";
  196. case "k": return "\xFE\xFE\xFE\x80\xC0\xE0\x70\x30\x10";
  197. case "l": return "\xFE\xFE\xFE";
  198. case "m": return "\xF0\xF0\xF0\x60\x30\x30\xF0\xE0\xC0\x60\x30\x30\xF0\xE0\xC0";
  199. case "n": return "\xF0\xF0\xF0\x60\x30\x30\x70\xF0\xE0\xC0";
  200. case "o": return "\x80\xE0\xE0\x70\x30\x30\x70\xE0\xE0\x80";
  201. case "p": return "\xFC\xFC\xFC\x18\x0C\x0C\x1C\xFC\xF8\xE0";
  202. case "q": return "\xF0\xF8\xFC\x1C\x0C\x0C\x18\xFC\xFC\xFC";
  203. case "r": return "\xF0\xF0\xF0\x60\x30\x30\x30";
  204. case "s": return "\xC0\xE0\xF0\x30\x30\x30\x70\x60\x40";
  205. case "t": return "\x30\xF8\xFC\xFE\x30\x30";
  206. case "u": return "\xF0\xF0\xF0\x00\x00\x00\x00\xF0\xF0\xF0";
  207. case "v": return "\x70\xF0\xF0\x00\x00\x00\xF0\xF0\x70";
  208. case "w": return "\x30\xF0\xF0\x80\x00\x80\xF0\xF0\xF0\x80\x00\x80\xF0\xF0\x30";
  209. case "x": return "\x30\x70\xF0\xC0\x80\xC0\xF0\x70\x30";
  210. case "y": return "\x38\xF8\xF8\xC0\x00\xC0\xF8\xF8\x38";
  211. case "z": return "\x30\x30\x30\x30\xB0\xF0\xF0\x70";
  212. case "{": return "\xC0\xC0\xFE\x3F\x03\x03";
  213. case "|": return "\xFF\xFF\x00";
  214. case "}": return "\x03\x03\x3F\xFE\xC0\xC0";
  215. case "~": return "\x80\xC0\xC0\xC0\xC0\xC0\x80\x80\x80\x80\xC0";
  216. case "\xB0": return "\x1E\x33\x21\x21\x33\x1E"; //degrees
  217. default: return "\x00\x00\x00\x00\x00"; //space
  218. }
  219. }
  220. function ASCII_16bit_Bottom(c) {
  221. switch (c) {
  222. case "!": return "\x71\x77\x71";
  223. case "\"": return "\x00\x00\x00\x00\x00\x00\x00";
  224. case "#": return "\x06\x76\x7F\x1F\x06\x76\x7F\x1F\x06\x06\x06";
  225. case "$": return "\x06\x0E\x18\x7F\x19\x0F\x07";
  226. case "%": return "\x00\x00\x00\x00\x60\x7C\x1F\x03\x00\x3E\x7F\x63\x63\x7F\x3E";
  227. case "&": return "\x1E\x3F\x7F\x73\x61\x61\x77\x7F\x3E\x3E\x3F\x77\x20";
  228. case "'": return "\x00\x00\x00";
  229. case "(": return "\x07\x3F\x78\x40";
  230. case ")": return "\x40\x78\x3F\x07";
  231. case "*": return "\x00\x00\x00\x00\x00\x00\x00\x00";
  232. case "+": return "\x01\x01\x01\x01\x1F\x1F\x1F\x01\x01\x01\x01";
  233. case "'": return "\x9C\xDC\x7C";
  234. case "-": return "\x07\x07\x07\x07\x07\x07";
  235. case ".": return "\x70\x70\x70";
  236. case "/": return "\x60\x7E\x1F\x01\x00\x00";
  237. case "0": return "\x0F\x3F\x7F\x70\x60\x70\x7F\x3F\x0F";
  238. case "1": return "\x00\x00\x00\x00\x7F\x7F\x7F";
  239. case "2": return "\x60\x78\x7C\x7F\x6F\x63\x61\x60\x60";
  240. case "3": return "\x18\x38\x78\x60\x60\x61\x7F\x3F\x1F";
  241. case "4": return "\x0E\x0F\x0D\x0C\x0C\x0C\x7F\x7F\x7F\x0C\x0C";
  242. case "5": return "\x18\x38\x78\x70\x60\x70\x7F\x3F\x0F";
  243. case "6": return "\x0F\x3F\x3F\x70\x60\x70\x3F\x3F\x0F";
  244. case "7": return "\x00\x78\x7F\x7F\x07\x00\x00\x00\x00";
  245. case "8": return "\x1E\x3F\x7F\x71\x60\x71\x7F\x3F\x1E";
  246. case "9": return "\x10\x39\x7B\x73\x63\x71\x3F\x3F\x0F";
  247. case ":": return "\x0E\x0E\x0E";
  248. case "": return "\x0E\x2E\x1E";
  249. case "<": return "\x01\x01\x03\x03\x07\x07\x06\x0E\x0E\x1C";
  250. case "=": return "\x0E\x0E\x0E\x0E\x0E\x0E\x0E\x0E\x0E\x0E";
  251. case ">": return "\x1C\x0E\x0E\x06\x07\x07\x03\x03\x01\x01";
  252. case "?": return "\x00\x00\x00\x77\x77\x77\x01\x00\x00\x00";
  253. case "@": return "\x07\x1F\x38\x77\x6F\xCC\xCC\xC6\xCF\xCF\xCC\xEE\x67\x73\x31\x10";
  254. case "A": return "\x60\x7C\x7F\x1F\x0F\x0E\x0E\x0E\x0F\x1F\x7F\x7C\x60";
  255. case "B": return "\x7F\x7F\x7F\x71\x71\x71\x71\x71\x71\x7F\x3F\x1E";
  256. case "C": return "\x07\x1F\x3F\x3C\x70\x70\x70\x70\x78\x3C\x3C\x08";
  257. case "D": return "\x7F\x7F\x7F\x70\x70\x70\x70\x70\x38\x3F\x1F\x07";
  258. case "E": return "\x7F\x7F\x7F\x71\x71\x71\x71\x71\x71\x71\x70";
  259. case "F": return "\x7F\x7F\x7F\x01\x01\x01\x01\x01\x01\x00";
  260. case "G": return "\x03\x0F\x1F\x3C\x38\x70\x70\x73\x73\x73\x3B\x3F\x3F\x1F";
  261. case "H": return "\x7F\x7F\x7F\x01\x01\x01\x01\x01\x01\x7F\x7F\x7F";
  262. case "I": return "\x7F\x7F\x7F";
  263. case "J": return "\x0E\x3E\x3E\x78\x70\x70\x70\x3F\x3F\x1F";
  264. case "K": return "\x7F\x7F\x7F\x03\x01\x00\x01\x07\x1F\x7E\x78\x60";
  265. case "L": return "\x7F\x7F\x7F\x70\x70\x70\x70\x70\x70\x70";
  266. case "M": return "\x7F\x7F\x7F\x00\x00\x0F\x7F\x7C\x7F\x0F\x00\x00\x7F\x7F\x7F";
  267. case "N": return "\x7F\x7F\x7F\x00\x00\x01\x07\x1F\x3C\x7F\x7F\x7F";
  268. case "O": return "\x07\x1F\x3F\x3C\x78\x70\x70\x70\x70\x78\x3C\x3F\x1F\x07";
  269. case "P": return "\x7F\x7F\x7F\x01\x01\x01\x01\x01\x01\x00\x00";
  270. case "Q": return "\x07\x1F\x3F\x3C\x78\x70\x74\x7E\x7C\x78\x3C\x7F\xFF\xE7\x40";
  271. case "R": return "\x7F\x7F\x7F\x01\x01\x03\x07\x1F\x7E\x7C\x70\x40";
  272. case "S": return "\x0C\x3C\x3C\x78\x71\x71\x71\x7B\x3F\x3F\x1E";
  273. case "T": return "\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00";
  274. case "U": return "\x0F\x3F\x3F\x78\x70\x70\x70\x70\x78\x3F\x3F\x0F";
  275. case "V": return "\x00\x00\x00\x07\x3F\x7F\x78\x7F\x3F\x07\x00\x00\x00";
  276. case "W": return "\x00\x00\x03\x7F\x7F\x7C\x7F\x1F\x00\x00\x00\x1F\x7F\x7C\x7F\x7F\x07\x00\x00";
  277. case "X": return "\x60\x70\x7C\x1F\x0F\x03\x0F\x1F\x7C\x70\x60";
  278. case "Y": return "\x00\x00\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x00\x00";
  279. case "Z": return "\x78\x7C\x7E\x7F\x77\x73\x70\x70\x70\x70\x70";
  280. case "[": return "\x7F\x7F\x60\x60";
  281. case "\\": return "\x00\x00\x03\x1F\x7E\x60";
  282. case "]": return "\x60\x60\x7F\x7F";
  283. case "^": return "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  284. case "_": return "\x60\x60\x60\x60\x60\x60\x60\x60\x60\x60\x60";
  285. case "`": return "\x00\x00\x00\x00";
  286. case "a": return "\x1C\x3E\x7F\x63\x63\x31\x3F\x7F\x7F\x40";
  287. case "b": return "\x7F\x7F\x7F\x30\x60\x60\x70\x7F\x3F\x0F";
  288. case "c": return "\x0F\x3F\x3F\x70\x60\x60\x70\x38\x10";
  289. case "d": return "\x0F\x3F\x7F\x70\x60\x60\x30\x7F\x7F\x7F";
  290. case "e": return "\x0F\x3F\x3F\x73\x63\x63\x73\x33\x13";
  291. case "f": return "\x00\x7F\x7F\x7F\x00\x00\x00";
  292. case "g": return "\x61\x67\xEF\xCE\xCC\xCC\xC6\xFF\x7F\x3F";
  293. case "h": return "\x7F\x7F\x7F\x00\x00\x00\x00\x7F\x7F\x7F";
  294. case "i": return "\x7F\x7F\x7F";
  295. case "j": return "\xC0\xC0\xFF\xFF\x7F";
  296. case "k": return "\x7F\x7F\x7F\x03\x07\x1F\x7E\x78\x60";
  297. case "l": return "\x7F\x7F\x7F";
  298. case "m": return "\x7F\x7F\x7F\x00\x00\x00\x7F\x7F\x7F\x00\x00\x00\x7F\x7F\x7F";
  299. case "n": return "\x7F\x7F\x7F\x00\x00\x00\x00\x7F\x7F\x7F";
  300. case "o": return "\x0F\x3F\x3F\x70\x60\x60\x70\x3F\x3F\x0F";
  301. case "p": return "\xFF\xFF\xFF\x0C\x18\x18\x1C\x1F\x0F\x03";
  302. case "q": return "\x03\x0F\x1F\x1C\x18\x18\x0C\xFF\xFF\xFF";
  303. case "r": return "\x7F\x7F\x7F\x00\x00\x00\x00";
  304. case "s": return "\x11\x33\x73\x67\x67\x67\x7E\x3E\x1C";
  305. case "t": return "\x00\x3F\x7F\x7F\x60\x60";
  306. case "u": return "\x1F\x3F\x7F\x70\x60\x60\x30\x7F\x7F\x7F";
  307. case "v": return "\x00\x03\x1F\x7F\x78\x7F\x1F\x03\x00";
  308. case "w": return "\x00\x01\x1F\x7F\x78\x7F\x0F\x00\x0F\x7F\x78\x7F\x1F\x01\x00";
  309. case "x": return "\x60\x70\x7D\x1F\x0F\x1F\x7D\x70\x60";
  310. case "y": return "\xC0\xC0\xE7\xFF\x7E\x1F\x07\x00\x00";
  311. case "z": return "\x70\x78\x7E\x6F\x67\x63\x60\x60";
  312. case "{": return "\x00\x00\x3F\x7F\x60\x60";
  313. case "|": return "\xFF\xFF\x00";
  314. case "}": return "\x60\x60\x7F\x3F\x00\x00";
  315. case "~": return "\x03\x01\x01\x01\x01\x03\x03\x03\x03\x03\x01";
  316. case "\xB0": return "\x00\x00\x00\x00\x00\x00"; //degrees
  317. default: return "\x00\x00\x00\x00\x00"; //space
  318. }
  319. }
  320. function sendChar16_Top(data) {
  321. local char = ASCII_16bit_Top(data);
  322. oled.write(i2c_address, "\x40"+char+"\x00\x00\x00"); // 0x00 for some gap
  323. }
  324. function sendChar16_Bottom(data) {
  325. local char = ASCII_16bit_Bottom(data);
  326. oled.write(i2c_address, "\x40"+char+"\x00\x00\x00"); // 0x00 for some gap
  327. }
  328. function sendString16(y, x, textString) {
  329. setXY(y,x);
  330. foreach(character in textString) {
  331. if ((character & 0xE0) != 0xC0) { //Ignore the first byte of all 2-bytes unicode characters
  332. sendChar16_Top(format("%c", character));
  333. }
  334. }
  335. setXY(y+1,x);
  336. foreach(character in textString) {
  337. if ((character & 0xE0) != 0xC0) { //Ignore the first byte of all 2-bytes unicode characters
  338. sendChar16_Bottom(format("%c", character));
  339. }
  340. }
  341. }
  342.  
  343.  
  344. function sendChar(data) {
  345. oled.write(i2c_address, format("%c%c",0x40, data));
  346. }
  347. function sendcommand(data) {
  348. oled.write(i2c_address, format("%c%c",0x80, data));
  349. }
  350. function clear_display() {
  351. local i;
  352. local k;
  353. for(k=0;k<8;k++) {
  354. setXY(k,0);
  355. for(i=0;i<132;i++) {
  356. sendChar(0);
  357. }
  358. }
  359. }
  360. function setXY(row, col) {
  361. sendcommand(0xb0+row); //set page address
  362. sendcommand(0x00+(8*col&0x0f)); //set low col address
  363. sendcommand(0x10+((8*col>>4)&0x0f)); //set high col address
  364. }
  365. function init_OLED() {
  366. sendcommand(0xae); //turn display off
  367. clear_display(); // clear garbage
  368. sendcommand(0xaf); //turn display on
  369. sendcommand(0xa1); //flip vertical A0/A1
  370. sendcommand(0xc8); //flip horizontal C0/C8
  371. sendcommand(0xa6); //normal/reverse display A6/A7
  372. }
  373.  
  374. init_OLED();
  375. sendString8(0, 1, "1.3\" OLED SH1106");
  376. sendString8(2, 1, "8-Bit Font");
  377. sendString16(4, 1, "16-Bit Font");
  378.  
  379. local i = 0;
  380. function loop() {
  381. i++;
  382. sendString16(6, 1, "T=" + i.tostring() + "°F");
  383. imp.wakeup(1, loop);
  384. }
  385. loop();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement