Ported Control Serial Display Via Commands. Uses Highest Speed BAUD Rate Possible. You can DRAW,TYPE Create Menus or whatever you like just by communicating with the mbed over serial connection. I did this a while back however Ian Uploaded most of the files i published a while back to his account.

Dependencies:   mbed

Everything should be working. If not start a discussion and i'll help you asap.

Here is some VB.NET code to help you get started playing with the tft screen through serial. This code will create a menu based graphics which you can select the menu on the left of the screen You can create your own in menu graphics and items however you like, and modify the code to make the mbed do anything you like from inside the windows vb.net application, All you will need is 6 buttons on the form.

VB.NET CODE

Imports System.Threading

Public Class Form1
    dim com_port as string =  "COM6" 'CHANGE THIS TO YOUR MBED COM PORT NUMBER
    'Load/Close
    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        SerialPort1.WriteLine("fill,255,255,255")
        SerialPort1.Close()
        Try
            End
        Catch
            Thread.EndThreadAffinity()
        End Try
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        SerialPort1.PortName = com_port
        SerialPort1.Open()
        SerialPort1.WriteLine("fill,255,255,255")
        Thread.Sleep(2000) 'Required
        SerialPort1.WriteLine("rot,3")
        init_menu()
    End Sub

    'Create TFT Graphics
    Public Sub write_text(ByVal msg As String, ByVal x As Integer, ByVal y As Integer, ByVal size As Integer, ByVal rgb As String)
        Dim send_string As String = "text," + msg + "," + x.ToString + "," + y.ToString + "," + size.ToString + "," + rgb
        SerialPort1.WriteLine(send_string)
        Thread.Sleep(40)
    End Sub
    Public Sub create_rect(ByVal sx As Integer, ByVal sy As Integer, ByVal ex As Integer, ByVal ey As Integer, ByVal rgb As String)
        Dim send_string As String = "rect," + sx.ToString + "," + sy.ToString + "," + ex.ToString + "," + ey.ToString + "," + rgb
        SerialPort1.WriteLine(send_string)
        Thread.Sleep(60)
    End Sub
    Public Sub create_fillrect(ByVal sx As Integer, ByVal sy As Integer, ByVal ex As Integer, ByVal ey As Integer, ByVal rgb As String)
        Dim send_string As String = "frect," + sx.ToString + "," + sy.ToString + "," + ex.ToString + "," + ey.ToString + "," + rgb
        SerialPort1.WriteLine(send_string)
        Thread.Sleep(60)
    End Sub
    Public Sub create_line(ByVal sx As Integer, ByVal sy As Integer, ByVal ex As Integer, ByVal ey As Integer, ByVal rgb As String)
        Dim send_string As String = "dline," + sx.ToString + "," + sy.ToString + "," + ex.ToString + "," + ey.ToString + "," + rgb
        SerialPort1.WriteLine(send_string)
        Thread.Sleep(60)
    End Sub
    Public Sub create_circle(ByVal x As Integer, ByVal y As Integer, ByVal size As Integer, ByVal rgb As String)
        Dim send_string As String = "circle," + x.ToString + "," + y.ToString + "," + size.ToString + "," + rgb
        SerialPort1.WriteLine(send_string)
        Thread.Sleep(60)
    End Sub

    'draw main menu UI
    Public Sub init_menu()
        SerialPort1.WriteLine("rot,3")
        write_text("TFT_PANEL", 100, 13, 2, "200,0,0")
        create_line(80, 40, 320, 40, "255,0,0") 'Boarder Horizontal
        create_line(80, 40, 80, 240, "255,0,0") 'Boarder Vertical
        create_fillrect(0, 0, 80, 40, "100,100,100") 'MENU 1
        write_text("Welcome", 12, 17, 1, "0,0,0")
        create_fillrect(0, 40, 80, 40, "100,100,100") 'MENU 2
        write_text("Menu_1", 15, 57, 1, "0,0,0")
        create_fillrect(0, 80, 80, 40, "100,100,100") 'MENU 3
        write_text("Menu_2", 15, 97, 1, "0,0,0")
        create_fillrect(0, 120, 80, 40, "100,100,100") 'MENU 4
        write_text("Menu_3", 15, 137, 1, "0,0,0")
        create_fillrect(0, 160, 80, 40, "100,100,100") 'MENU 5
        write_text("Menu_4", 15, 177, 1, "0,0,0")
        create_fillrect(0, 200, 80, 40, "100,100,100") 'MENU 6
        write_text("Menu_5", 15, 217, 1, "0,0,0")
        'Select Top Menu
        c_menu(0)
    End Sub

    'Unselect previous selected menu tab
    Public Sub unselect()
        If last_selected = 0 Then
            create_fillrect(0, 0, 80, 40, "100,100,100")  'MAIN MENU
            write_text("Welcome", 12, 17, 1, "0,0,0")
        End If
        If last_selected = 1 Then
            create_fillrect(0, 40, 80, 40, "100,100,100") 'MENU 2
            write_text("Menu_1", 15, 57, 1, "0,0,0")
        End If
        If last_selected = 2 Then
            create_fillrect(0, 80, 80, 40, "100,100,100") 'MENU 3
            write_text("Menu_2", 15, 97, 1, "0,0,0")
        End If
        If last_selected = 3 Then
            create_fillrect(0, 120, 80, 40, "100,100,100") 'MENU 4
            write_text("Menu_3", 15, 137, 1, "0,0,0")
        End If
        If last_selected = 4 Then
            create_fillrect(0, 160, 80, 40, "100,100,100") 'MENU 5
            write_text("Menu_4", 15, 177, 1, "0,0,0")
        End If
        If last_selected = 5 Then
            create_fillrect(0, 200, 80, 40, "100,100,100") 'MENU 6
            write_text("Menu_5", 15, 217, 1, "0,0,0")
        End If
    End Sub

    'Select Menu
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        c_menu(0)
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        c_menu(1)
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        c_menu(2)
    End Sub
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        c_menu(3)
    End Sub
    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        c_menu(4)
    End Sub
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        c_menu(5)
    End Sub

    'SELECT MENU GRAPHICS!
    Dim last_selected As Integer
    Public Sub c_menu(ByVal menu As Integer)
        unselect()
        If menu = 0 Then
            last_selected = 0
            create_rect(0, 0, 80, 40, "255,255,255")
            write_text("Welcome", 12, 17, 1, "255,255,255")
            '/IN MENU GRAPHICS
            create_fillrect(81, 41, 320, 240, "200,200,200")
            Thread.Sleep(850) 'Required
            write_text("Welcome_Panel_Menu", 90, 50, 1, "255,0,0")
            write_text("This_Is_A_Welcome_Panel", 90, 70, 1, "255,0,0")
            write_text("Menus_Can_Be_Opened_On_Left", 90, 80, 1, "255,0,0")
            create_circle(100, 100, 5, "255,0,0")
        End If
        If menu = 1 Then
            last_selected = 1
            create_rect(0, 40, 80, 40, "255,255,255")
            write_text("Menu_1", 15, 57, 1, "255,255,255")
            '/IN MENU GRAPHICS
            create_fillrect(81, 41, 320, 240, "200,200,200")
            Thread.Sleep(850) 'Required
            write_text("Menu_1", 90, 50, 1, "255,0,0")
            write_text("THIS_IS_THE_FIRST_MENU", 90, 70, 1, "255,0,0")
            write_text("There_are_more_menus_ahead...", 90, 80, 1, "255,0,0")
        End If
        If menu = 2 Then
            last_selected = 2
            create_rect(0, 80, 80, 40, "255,255,255") 'MENU 3
            write_text("Menu_2", 15, 97, 1, "255,255,255")
            '/IN MENU GRAPHICS
            create_fillrect(81, 41, 320, 240, "200,200,200")
            Thread.Sleep(850) 'Required
            write_text("Menu_2", 90, 50, 1, "255,0,0")
            write_text("THIS_IS_THE_SECOND_MENU", 90, 70, 1, "255,0,0")
            write_text("There_are_more_menus_ahead...", 90, 80, 1, "255,0,0")
        End If
        If menu = 3 Then
            last_selected = 3
            create_rect(0, 120, 80, 40, "255,255,255") 'MENU 3
            write_text("Menu_3", 15, 137, 1, "255,255,255")
            '/IN MENU GRAPHICS
            create_fillrect(81, 41, 320, 240, "200,200,200")
            Thread.Sleep(850) 'Required
            write_text("Menu_3", 90, 50, 1, "255,0,0")
            write_text("THIS_IS_THE_THIRD_MENU", 90, 70, 1, "255,0,0")
            write_text("There_are_more_menus_ahead...", 90, 80, 1, "255,0,0")
        End If
        If menu = 4 Then
            last_selected = 4
            create_rect(0, 160, 80, 40, "255,255,255") 'MENU 4
            write_text("Menu_4", 15, 177, 1, "255,255,255")
            '/IN MENU GRAPHICS
            create_fillrect(81, 41, 320, 240, "200,200,200")
            Thread.Sleep(850) 'Required
            write_text("Menu_4", 90, 50, 1, "255,0,0")
            write_text("THIS_IS_THE_FOURTH_MENU", 90, 70, 1, "255,0,0")
            write_text("There_are_more_menus_ahead...", 90, 80, 1, "255,0,0")
        End If
        If menu = 5 Then
            last_selected = 5
            create_rect(0, 200, 80, 40, "255,255,255") 'MENU 5
            write_text("Menu_5", 15, 217, 1, "255,255,255")
            '/IN MENU GRAPHICS
            create_fillrect(81, 41, 320, 240, "200,200,200")
            Thread.Sleep(850) 'Required
            write_text("Menu_5", 90, 50, 1, "255,0,0")
            write_text("THIS_IS_THE_FIFTH_MENU", 90, 70, 1, "255,0,0")
            write_text("There_are_NO_menus_ahead...", 90, 80, 1, "255,0,0")
        End If
    End Sub
End Class
Committer:
Elitism
Date:
Thu Aug 28 18:34:10 2014 +0000
Revision:
1:993a4757891d
Parent:
0:d67893e6f32f
Added/modified info

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Elitism 1:993a4757891d 1 //This code is not ported :)
Elitism 0:d67893e6f32f 2
Elitism 0:d67893e6f32f 3 #include "ILI9340_Driver.h"
Elitism 0:d67893e6f32f 4
Elitism 1:993a4757891d 5 //(mosi,miso,sck,cs,rst,d/c) Create Display Object.
Elitism 0:d67893e6f32f 6 ILI9340_Display tft = ILI9340_Display(p5, p6, p7, p24, p25, p26);
Elitism 0:d67893e6f32f 7
Elitism 0:d67893e6f32f 8 //USB Serial - Onboard USB (Requires USB Serial Driver): https://mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe
Elitism 0:d67893e6f32f 9 Serial serial(USBTX, USBRX);
Elitism 0:d67893e6f32f 10
Elitism 0:d67893e6f32f 11 //Serial String Command Parser
Elitism 0:d67893e6f32f 12 #define NFIELDS (11) //Max Commands
Elitism 0:d67893e6f32f 13 char* pFields[NFIELDS];
Elitism 0:d67893e6f32f 14 void ParseCommands(char* Buffer, char** pFields, uint32_t numFields, char* delimiter)
Elitism 0:d67893e6f32f 15 {
Elitism 0:d67893e6f32f 16 char* pString = Buffer;
Elitism 0:d67893e6f32f 17 char* pField;
Elitism 0:d67893e6f32f 18
Elitism 0:d67893e6f32f 19 for (uint32_t i=0; i<numFields; i++) {
Elitism 0:d67893e6f32f 20 pField = strtok(pString, delimiter);
Elitism 0:d67893e6f32f 21 if (pField != NULL) {
Elitism 0:d67893e6f32f 22 pFields[i] = pField;
Elitism 0:d67893e6f32f 23 } else {
Elitism 0:d67893e6f32f 24 pFields[i] = "";
Elitism 0:d67893e6f32f 25 }
Elitism 0:d67893e6f32f 26 pString = NULL; //parse next
Elitism 0:d67893e6f32f 27 }
Elitism 0:d67893e6f32f 28 if (strcmp("init", pFields[0]) == 0) {
Elitism 0:d67893e6f32f 29 ILI9340_Display tft = ILI9340_Display(p5, p6, p7, p24, p25, p26);
Elitism 0:d67893e6f32f 30 tft.DispInit();
Elitism 0:d67893e6f32f 31 tft.FillScreen(ILI9340_WHITE);
Elitism 0:d67893e6f32f 32 }
Elitism 0:d67893e6f32f 33 if (strcmp("rect", pFields[0]) == 0) {
Elitism 0:d67893e6f32f 34 //X,Y,X,Y,R,G,B
Elitism 0:d67893e6f32f 35 tft.DrawRect(atoi(pFields[1]),atoi(pFields[2]),atoi(pFields[3]),atoi(pFields[4]),uint16_t(tft.Colour565(atoi(pFields[5]), atoi(pFields[6]), atoi(pFields[7]))));
Elitism 0:d67893e6f32f 36 }
Elitism 0:d67893e6f32f 37 if (strcmp("frect", pFields[0]) == 0) {
Elitism 1:993a4757891d 38 //X,Y,X,Y,R,G,B
Elitism 0:d67893e6f32f 39 tft.FillRect(atoi(pFields[1]), atoi(pFields[2]), atoi(pFields[3]), atoi(pFields[4]), uint16_t(tft.Colour565(atoi(pFields[5]), atoi(pFields[6]), atoi(pFields[7]))));
Elitism 0:d67893e6f32f 40 }
Elitism 0:d67893e6f32f 41 if (strcmp("dline", pFields[0]) == 0) {
Elitism 1:993a4757891d 42 //X,Y,X,Y,R,G,B
Elitism 0:d67893e6f32f 43 tft.DrawLine(atoi(pFields[1]), atoi(pFields[2]), atoi(pFields[3]), atoi(pFields[4]), uint16_t(tft.Colour565(atoi(pFields[5]), atoi(pFields[6]), atoi(pFields[7]))));
Elitism 0:d67893e6f32f 44 }
Elitism 0:d67893e6f32f 45 if (strcmp("circle", pFields[0]) == 0) {
Elitism 0:d67893e6f32f 46 //X,Y,SIZE,R,G,B
Elitism 0:d67893e6f32f 47 tft.DrawCircle(atoi(pFields[1]), atoi(pFields[2]), atoi(pFields[3]), uint16_t(tft.Colour565(atoi(pFields[4]), atoi(pFields[5]), atoi(pFields[6]))));
Elitism 0:d67893e6f32f 48 }
Elitism 0:d67893e6f32f 49 if (strcmp("px", pFields[0]) == 0) {
Elitism 0:d67893e6f32f 50 //X,Y,R,G,B
Elitism 0:d67893e6f32f 51 tft.DrawPixel(atoi(pFields[1]),atoi(pFields[2]),uint16_t(tft.Colour565(atoi(pFields[3]), atoi(pFields[4]), atoi(pFields[5]))));
Elitism 0:d67893e6f32f 52 }
Elitism 0:d67893e6f32f 53 if (strcmp("fill", pFields[0]) == 0) {
Elitism 0:d67893e6f32f 54 //R,G,B
Elitism 0:d67893e6f32f 55 tft.FillScreen(uint16_t(tft.Colour565(atoi(pFields[1]), atoi(pFields[2]), atoi(pFields[3]))));
Elitism 0:d67893e6f32f 56 }
Elitism 0:d67893e6f32f 57 if (strcmp("text", pFields[0]) == 0) {
Elitism 0:d67893e6f32f 58 //text,String,X,Y,Size,Color
Elitism 1:993a4757891d 59 int i = 0;
Elitism 1:993a4757891d 60 while(pFields[1][i] != 0) {
Elitism 1:993a4757891d 61 if(pFields[1][i] == '_') {
Elitism 1:993a4757891d 62 pFields[1][i] = ' '; //Replace Char In String (For Spaces)
Elitism 1:993a4757891d 63 }
Elitism 1:993a4757891d 64 i++;
Elitism 1:993a4757891d 65 }
Elitism 0:d67893e6f32f 66 tft.DrawString(pFields[1], atoi(pFields[2]), atoi(pFields[3]), atoi(pFields[4]), uint16_t(tft.Colour565(atoi(pFields[5]), atoi(pFields[6]), atoi(pFields[7]))));
Elitism 0:d67893e6f32f 67 }
Elitism 0:d67893e6f32f 68 if (strcmp("rot", pFields[0]) == 0) {
Elitism 0:d67893e6f32f 69 tft.SetRotation(atoi(pFields[1]));
Elitism 0:d67893e6f32f 70 }
Elitism 0:d67893e6f32f 71 }
Elitism 0:d67893e6f32f 72
Elitism 0:d67893e6f32f 73 int main(int argc, char* argv[])
Elitism 0:d67893e6f32f 74 {
Elitism 1:993a4757891d 75 //Init display on reset/power up
Elitism 0:d67893e6f32f 76 ILI9340_Display tft = ILI9340_Display(p5, p6, p7, p24, p25, p26);
Elitism 0:d67893e6f32f 77 tft.DispInit();
Elitism 0:d67893e6f32f 78 tft.FillScreen(ILI9340_WHITE);
Elitism 1:993a4757891d 79 ////////////////////////////////////////////////////////////////////////////////
Elitism 0:d67893e6f32f 80 //Serial String Parse Commands Example
Elitism 0:d67893e6f32f 81 //
Elitism 0:d67893e6f32f 82 // command txt vector font_size R G B
Elitism 0:d67893e6f32f 83 //Set Text On Screen: "text", "hello world",20,10, 2, 255,255,255
Elitism 0:d67893e6f32f 84 //
Elitism 0:d67893e6f32f 85 // command vector_start vector_end R G B
Elitism 0:d67893e6f32f 86 //Creating Rectangle Example: "rect", 20,40, 30,70, 255,255,255
Elitism 0:d67893e6f32f 87 //
Elitism 0:d67893e6f32f 88 //These commands are sent from serial to the MBED
Elitism 0:d67893e6f32f 89 //You can easily work out the other commands by looking above and reading
Elitism 0:d67893e6f32f 90 //the ones i showed examples for above
Elitism 1:993a4757891d 91 //Note: When command (text), make sure you seperate each word with a _ character
Elitism 1:993a4757891d 92 /////////////////////////////////////////////////////////////////////////////////
Elitism 0:d67893e6f32f 93 serial.baud(921600);
Elitism 1:993a4757891d 94 char buf[100]; //change this if you are sending a larger string to the mbed via serial.
Elitism 0:d67893e6f32f 95 while (1) {
Elitism 0:d67893e6f32f 96 serial.scanf("%s", buf);
Elitism 0:d67893e6f32f 97 ParseCommands(buf, pFields, NFIELDS, ",");
Elitism 0:d67893e6f32f 98 }
Elitism 0:d67893e6f32f 99 ////////////////////////////////////////////////////////
Elitism 0:d67893e6f32f 100 }