Mathematica-like environment on the mbed using USB keyboard input, VGA output, and a thermal printer.

Dependencies:   mbed Thermal 4DGL-uLCD-SE USBHost_Modified uVGAIII

Committer:
zrussell3
Date:
Thu Dec 13 03:05:28 2018 +0000
Revision:
2:d97e71edb2b3
Parent:
0:824466ffa6da
Child:
3:2b6951038d5b
Printer testing, uLCD connected

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zrussell3 0:824466ffa6da 1 #include "mbed.h"
zrussell3 0:824466ffa6da 2 #include "Thermal.h"
zrussell3 0:824466ffa6da 3 #include "USBHostKeyboard.h"
zrussell3 0:824466ffa6da 4 #include "uVGAIII.h"
zrussell3 0:824466ffa6da 5
zrussell3 2:d97e71edb2b3 6 //#include "stdafx.h"
zrussell3 2:d97e71edb2b3 7 #include <iostream>
zrussell3 2:d97e71edb2b3 8 #include <cstdlib>
zrussell3 2:d97e71edb2b3 9 #include <ctime>
zrussell3 2:d97e71edb2b3 10
zrussell3 0:824466ffa6da 11 #define SIZE_X 480
zrussell3 0:824466ffa6da 12 #define SIZE_Y 800
zrussell3 0:824466ffa6da 13
zrussell3 0:824466ffa6da 14 // Debugging LEDs
zrussell3 0:824466ffa6da 15 DigitalOut led(LED1);
zrussell3 0:824466ffa6da 16 DigitalOut led2(LED2);
zrussell3 0:824466ffa6da 17 DigitalOut led3(LED3);
zrussell3 0:824466ffa6da 18 DigitalOut led4(LED4);
zrussell3 0:824466ffa6da 19
zrussell3 0:824466ffa6da 20 uVGAIII ecran(p9,p10,p11); // serial tx, serial rx, reset pin;
zrussell3 2:d97e71edb2b3 21 uLCD_4DGL uLCD(p13,p14,p12); // serial tx, serial rx, reset pin;
zrussell3 0:824466ffa6da 22 Thermal printer(p28, p27, 19200);
zrussell3 0:824466ffa6da 23
zrussell3 0:824466ffa6da 24 int verticalCursor = 2;
zrussell3 0:824466ffa6da 25 int horizontalCursor = 0;
zrussell3 0:824466ffa6da 26
zrussell3 0:824466ffa6da 27 char currentLine[48];
zrussell3 0:824466ffa6da 28 int currentLineIndex = 0;
zrussell3 0:824466ffa6da 29
zrussell3 2:d97e71edb2b3 30 unsigned char bitmap[5000];
zrussell3 2:d97e71edb2b3 31 char temp[8];
zrussell3 2:d97e71edb2b3 32
zrussell3 2:d97e71edb2b3 33 char getPixel(int x, int y, int bk) {
zrussell3 2:d97e71edb2b3 34 int r = ecran.read_pixel(x, y);
zrussell3 2:d97e71edb2b3 35 if (r == bk) //same as background
zrussell3 2:d97e71edb2b3 36 return '0';
zrussell3 2:d97e71edb2b3 37 else
zrussell3 2:d97e71edb2b3 38 return '1';
zrussell3 2:d97e71edb2b3 39 }
zrussell3 2:d97e71edb2b3 40
zrussell3 2:d97e71edb2b3 41 void makeBitmap() {
zrussell3 2:d97e71edb2b3 42 int bk = ecran.read_pixel(799,479);
zrussell3 2:d97e71edb2b3 43 for (int i = 0; i < 32; ++i) {
zrussell3 2:d97e71edb2b3 44 for (int j = 0; j < 8; ++j) { //get next 8 bits and put them in temp array
zrussell3 2:d97e71edb2b3 45 temp[j] = getPixel(1+((i%2)*8+j),1+(i/2),bk); // wtf
zrussell3 2:d97e71edb2b3 46 //temp[j] = ecran.read_pixel();
zrussell3 2:d97e71edb2b3 47 }
zrussell3 2:d97e71edb2b3 48
zrussell3 2:d97e71edb2b3 49 //need to convert to 0b format
zrussell3 2:d97e71edb2b3 50 char * end;
zrussell3 2:d97e71edb2b3 51 long int value = strtol(temp, &end, 2);
zrussell3 2:d97e71edb2b3 52 bitmap[i] = value;
zrussell3 2:d97e71edb2b3 53 led3 = !led3;
zrussell3 2:d97e71edb2b3 54 }
zrussell3 2:d97e71edb2b3 55 printer.printBitmap(16,16,bitmap);
zrussell3 2:d97e71edb2b3 56 printer.feed(2);
zrussell3 2:d97e71edb2b3 57 }
zrussell3 2:d97e71edb2b3 58
zrussell3 2:d97e71edb2b3 59 /*
zrussell3 0:824466ffa6da 60 // hardcode plot x^2
zrussell3 0:824466ffa6da 61 void plot(void const *)
zrussell3 0:824466ffa6da 62 {
zrussell3 0:824466ffa6da 63 int xOffset = 600;
zrussell3 0:824466ffa6da 64 int yOffset = 260;
zrussell3 0:824466ffa6da 65 int pastX = 0;
zrussell3 0:824466ffa6da 66 int pastY = 0;
zrussell3 0:824466ffa6da 67 int currentX = 0;
zrussell3 0:824466ffa6da 68 int currentY = 0;
zrussell3 0:824466ffa6da 69
zrussell3 0:824466ffa6da 70 for(double i = -20; i < 20; i++) {
zrussell3 0:824466ffa6da 71 //evaluate();
zrussell3 0:824466ffa6da 72 currentX = i*3 + xOffset;
zrussell3 0:824466ffa6da 73 currentY = yOffset-(i*i);
zrussell3 0:824466ffa6da 74 if(pastX == 0){
zrussell3 0:824466ffa6da 75 pastX = currentX;
zrussell3 0:824466ffa6da 76 pastY = currentY;
zrussell3 0:824466ffa6da 77 continue;
zrussell3 0:824466ffa6da 78 }
zrussell3 2:d97e71edb2b3 79 ecran.line(pastX, pastY, currentX, currentY, RED);
zrussell3 0:824466ffa6da 80 //ecran.put_pixel(i*2 + xOffset, yOffset-(i*i),RED);
zrussell3 0:824466ffa6da 81 pastX = currentX;
zrussell3 0:824466ffa6da 82 pastY = currentY;
zrussell3 0:824466ffa6da 83 }
zrussell3 0:824466ffa6da 84 while(1) {
zrussell3 0:824466ffa6da 85 Thread::wait(200);
zrussell3 0:824466ffa6da 86 }
zrussell3 2:d97e71edb2b3 87 }*/
zrussell3 2:d97e71edb2b3 88
zrussell3 2:d97e71edb2b3 89
zrussell3 0:824466ffa6da 90
zrussell3 0:824466ffa6da 91 void onKeyCode(uint8_t key, uint8_t modifier) {
zrussell3 0:824466ffa6da 92
zrussell3 0:824466ffa6da 93 led3 = 1;
zrussell3 0:824466ffa6da 94
zrussell3 0:824466ffa6da 95 if(key == 0) {
zrussell3 0:824466ffa6da 96 led3 = 0;
zrussell3 0:824466ffa6da 97 return;
zrussell3 0:824466ffa6da 98 }
zrussell3 0:824466ffa6da 99
zrussell3 0:824466ffa6da 100 // Handle newline
zrussell3 0:824466ffa6da 101 if(key == 0x0A) {
zrussell3 0:824466ffa6da 102
zrussell3 0:824466ffa6da 103 // Check if going off end of screen
zrussell3 0:824466ffa6da 104 if(verticalCursor > 37) {
zrussell3 0:824466ffa6da 105 ecran.filled_rectangle(0, 0 , 399, 480, DGREY);
zrussell3 0:824466ffa6da 106 verticalCursor = 0;
zrussell3 0:824466ffa6da 107 } else {
zrussell3 0:824466ffa6da 108 // Move cursor to newline
zrussell3 0:824466ffa6da 109 verticalCursor+=2;
zrussell3 0:824466ffa6da 110 }
zrussell3 0:824466ffa6da 111
zrussell3 0:824466ffa6da 112 horizontalCursor = 0;
zrussell3 0:824466ffa6da 113
zrussell3 0:824466ffa6da 114 ecran.move_cursor(verticalCursor, horizontalCursor);
zrussell3 0:824466ffa6da 115
zrussell3 0:824466ffa6da 116 ecran.puts(currentLine);
zrussell3 2:d97e71edb2b3 117
zrussell3 0:824466ffa6da 118 printer.printf(currentLine);
zrussell3 0:824466ffa6da 119 printer.feed(2);
zrussell3 0:824466ffa6da 120
zrussell3 0:824466ffa6da 121 for(size_t i = 0; i < 48; i++) {
zrussell3 0:824466ffa6da 122 currentLine[i] = NULL;
zrussell3 0:824466ffa6da 123 }
zrussell3 0:824466ffa6da 124
zrussell3 0:824466ffa6da 125 currentLineIndex = 0;
zrussell3 0:824466ffa6da 126
zrussell3 0:824466ffa6da 127 led3 = 0;
zrussell3 0:824466ffa6da 128 return;
zrussell3 0:824466ffa6da 129 }
zrussell3 0:824466ffa6da 130
zrussell3 0:824466ffa6da 131 if(key == 0x08)
zrussell3 0:824466ffa6da 132 {
zrussell3 0:824466ffa6da 133 if(currentLineIndex != 0)
zrussell3 0:824466ffa6da 134 {
zrussell3 0:824466ffa6da 135 currentLineIndex--;
zrussell3 0:824466ffa6da 136 currentLine[currentLineIndex] = NULL;
zrussell3 0:824466ffa6da 137 }
zrussell3 0:824466ffa6da 138 led3 = 0;
zrussell3 0:824466ffa6da 139 return;
zrussell3 0:824466ffa6da 140 }
zrussell3 0:824466ffa6da 141
zrussell3 0:824466ffa6da 142 // Move the cursor 1 character over
zrussell3 0:824466ffa6da 143 //ecran.move_cursor(verticalCursor, horizontalCursor++);
zrussell3 0:824466ffa6da 144
zrussell3 0:824466ffa6da 145 // Append character to curret line string
zrussell3 0:824466ffa6da 146 currentLine[currentLineIndex] = (char)key;
zrussell3 0:824466ffa6da 147
zrussell3 0:824466ffa6da 148 if(currentLineIndex < 47) {
zrussell3 0:824466ffa6da 149 currentLineIndex++;
zrussell3 0:824466ffa6da 150 }
zrussell3 0:824466ffa6da 151
zrussell3 0:824466ffa6da 152 led3 = 0;
zrussell3 0:824466ffa6da 153 }
zrussell3 0:824466ffa6da 154
zrussell3 0:824466ffa6da 155 void keyboard_task(void const *) {
zrussell3 0:824466ffa6da 156
zrussell3 0:824466ffa6da 157 USBHostKeyboard keyboard;
zrussell3 0:824466ffa6da 158
zrussell3 0:824466ffa6da 159 while(1) {
zrussell3 0:824466ffa6da 160 // try to connect a USB keyboard
zrussell3 0:824466ffa6da 161 while(!keyboard.connect()) {
zrussell3 0:824466ffa6da 162 Thread::wait(1);
zrussell3 0:824466ffa6da 163 }
zrussell3 0:824466ffa6da 164
zrussell3 0:824466ffa6da 165 if(keyboard.connected()) led2 = 1;
zrussell3 0:824466ffa6da 166
zrussell3 0:824466ffa6da 167 // When connected, attach handler called on keyboard event
zrussell3 0:824466ffa6da 168 keyboard.attach(onKeyCode);
zrussell3 0:824466ffa6da 169
zrussell3 0:824466ffa6da 170 // Wait until the keyboard is disconnected
zrussell3 0:824466ffa6da 171 while(keyboard.connected())
zrussell3 0:824466ffa6da 172 Thread::wait(1);
zrussell3 0:824466ffa6da 173
zrussell3 0:824466ffa6da 174 led2 = 0;
zrussell3 0:824466ffa6da 175 }
zrussell3 0:824466ffa6da 176 }
zrussell3 0:824466ffa6da 177
zrussell3 2:d97e71edb2b3 178 int main() {
zrussell3 2:d97e71edb2b3 179 led = 1;
zrussell3 0:824466ffa6da 180 // Set up display
zrussell3 0:824466ffa6da 181 ecran.baudrate(300000);
zrussell3 0:824466ffa6da 182 ecran.screen_mode(LANDSCAPE);
zrussell3 0:824466ffa6da 183 ecran.graphics_parameters(RESOLUTION, 2);
zrussell3 0:824466ffa6da 184 ecran.touch_status();
zrussell3 2:d97e71edb2b3 185 ecran.background_color(DGREY);
zrussell3 0:824466ffa6da 186 ecran.cls();
zrussell3 0:824466ffa6da 187
zrussell3 0:824466ffa6da 188 ecran.move_cursor(0, 0);
zrussell3 0:824466ffa6da 189 ecran.char_width('d');
zrussell3 0:824466ffa6da 190 ecran.char_height('d');
zrussell3 0:824466ffa6da 191 ecran.text_fgd_color(WHITE);
zrussell3 0:824466ffa6da 192 ecran.text_bgd_color(DGREY);
zrussell3 0:824466ffa6da 193 ecran.puts("Booting up...");
zrussell3 0:824466ffa6da 194
zrussell3 0:824466ffa6da 195 ecran.line(400, 0 , 400, 480, RED);
zrussell3 2:d97e71edb2b3 196 ecran.filled_rectangle(400,0,405,480,RED);
zrussell3 0:824466ffa6da 197
zrussell3 0:824466ffa6da 198 // Use old style threading
zrussell3 0:824466ffa6da 199 Thread keyboardTask(keyboard_task, NULL, osPriorityNormal, 256 * 4);
zrussell3 0:824466ffa6da 200
zrussell3 0:824466ffa6da 201 ecran.move_cursor(2, 0);
zrussell3 0:824466ffa6da 202 ecran.puts("Ready!");
zrussell3 2:d97e71edb2b3 203 //int pix = ecran.read_pixel(400, 0);
zrussell3 2:d97e71edb2b3 204 //printer.printf((char *)pix);
zrussell3 2:d97e71edb2b3 205 makeBitmap();
zrussell3 2:d97e71edb2b3 206 led3 = 1;
zrussell3 0:824466ffa6da 207
zrussell3 0:824466ffa6da 208 //printer.printf("Printing from main");
zrussell3 0:824466ffa6da 209 //printer.feed(2);
zrussell3 0:824466ffa6da 210 //printer.test();
zrussell3 0:824466ffa6da 211
zrussell3 0:824466ffa6da 212 // Clear currentLine array before using
zrussell3 0:824466ffa6da 213 for(size_t i = 0; i < 48; i++) {
zrussell3 0:824466ffa6da 214 currentLine[i] = NULL;
zrussell3 0:824466ffa6da 215 }
zrussell3 0:824466ffa6da 216
zrussell3 0:824466ffa6da 217 //Thread drawPlot(plot, NULL, osPriorityNormal, 256*4);
zrussell3 0:824466ffa6da 218
zrussell3 2:d97e71edb2b3 219 //int pixel = ecran.read_pixel(200, 200);
zrussell3 2:d97e71edb2b3 220 //char arr[10];
zrussell3 2:d97e71edb2b3 221 //itoa(pixel, arr, 2);
zrussell3 2:d97e71edb2b3 222 //ecran.put_string(pixel);
zrussell3 2:d97e71edb2b3 223 //ecran.put_string(arr);
zrussell3 2:d97e71edb2b3 224
zrussell3 2:d97e71edb2b3 225 // char * arr =
zrussell3 2:d97e71edb2b3 226 // reinterpret_cast <char *>(&pixel);
zrussell3 2:d97e71edb2b3 227
zrussell3 2:d97e71edb2b3 228 // printer.puts(arr);
zrussell3 2:d97e71edb2b3 229
zrussell3 0:824466ffa6da 230 while(1) {
zrussell3 0:824466ffa6da 231 led=!led;
zrussell3 0:824466ffa6da 232 Thread::wait(500); // Wait .5s in main thread
zrussell3 0:824466ffa6da 233 }
zrussell3 0:824466ffa6da 234 }