Vizic Technologies
/
PaintPro
SMARTGPU professional paint application! Be sure to load the image to the micro SD card first!
main.cpp
- Committer:
- emmanuelchio
- Date:
- 2011-09-14
- Revision:
- 0:d6ede4c39036
File content as of revision 0:d6ede4c39036:
/**************************************************************************************/ /*SMARTGPU intelligent embedded graphics processor unit those examples are for use the SMARTGPU with the mbed microcontoller, just connect tx,rx,and reset Board: http://www.vizictechnologies.com/#/desarrollo/4554296549 This example requires pre-loaded content, an image to the micro SD card! www.vizictechnologies.com Vizic Technologies copyright 2011 */ /**************************************************************************************/ /**************************************************************************************/ #include "mbed.h" #include "SMARTGPU.h" SMARTGPU lcd(p13,p14,p15); //(TX,RX,Reset); //Each time we use the touchscreen we must define a int array that stores the X and Y readed or touched coordinates. int touch[2]; //Each time we use the touchicon we must define a char array that stores the name of the touched icon. char icon[3]; char pixelArray[3]; //Array to store the RGB888 pixel obtained with memoryRead() /**************************************************/ //Funcion to convert a 3 byte array to an int RGB565 int RGB888ToRGB565(char pixBuffer[]){ //get an array of 3 bytes( red, green, blue), and convert them to RGB565 returned in an int unsigned char R,G,B; unsigned int col; unsigned long colour; R=pixBuffer[0]; G=pixBuffer[1]; B=pixBuffer[2]; ((unsigned char *) &colour)[1]=(R & 0xF8); R=G; G=G>>5; ((unsigned char *) &colour)[1]|=G; G=(R<<3)& 0xE0; ((unsigned char *) &colour)[0]=B; ((unsigned char *) &colour)[0]=((unsigned char *) &colour)[0]>>3; ((unsigned char *) &colour)[0]|=G; col=colour; return col; } int main() { lcd.reset(); //physically reset SMARTGPU lcd.start(); //initialize the SMARTGPU processor unsigned char penSize=1; int colPaint=BLACK; char pen[4]={'x','0','1',0x00}; //Array that show the current penSize lcd.baudChange(2000000); // Set a fast baud!, always that we use touch functions is recommended to use fast baud rates //Load paint design lcd.imageSD(0,0,"paint"); lcd.string(7,54,48,65,GREEN,FONT1,FILL,"Erase"); //draw Erase word lcd.string(77,54,110,65,GREEN,FONT1,FILL,pen); //draw penSize while(1){ //Start the Paint application while(!lcd.touchScreen(touch)); //Wait for a touch on the screen to do something //Once we get a touch somewhere on the screen: if((touch[YCOORD]-penSize)<67){ //the touch was on the menu if(touch[XCOORD]<45){ //touch on erase circle lcd.drawRectangle(0,67,319,239,WHITE,1); //Draw a white rectangle on drawing area }else if(touch[XCOORD]<75){ //touch to select the eraser colPaint=WHITE; lcd.drawCircle(25,34,14,colPaint,FILL); //draw WHITE colour circle on top left corner }else if(touch[XCOORD]<108){ //touch to change pen Size penSize=penSize*2; //double the penSize if(penSize==16){ //maximum pen size = 8, if we reach 16 we set to 1. penSize=1; } pen[1]=(penSize/10)+0x30; //get the tens of penSize and convert them to ascii pen[2]=(penSize%10)+0x30; //get the ones of penSize and convert them to ascii lcd.string(77,54,110,65,GREEN,FONT1,FILL,pen);//draw penSize wait_ms(500); //delay to avoid fast penSize changing }else if(touch[XCOORD]<312 & touch[YCOORD]>20 & touch[YCOORD]<59){ //touch on the colours bar lcd.memoryRead(touch[XCOORD],touch[YCOORD],touch[XCOORD],touch[YCOORD],pixelArray); //assign new colour based on touch coordinates and memory read, this function return a 24 bit pixel array, colPaint=RGB888ToRGB565(pixelArray); lcd.drawCircle(25,34,14,colPaint,FILL); //draw new selected colour on top left corner } }else{ //Touch on drawing area lcd.drawCircle(touch[XCOORD],touch[YCOORD],penSize,colPaint,FILL); //Draw } } }