Vizic Technologies
/
SimpleClock_SG2
Simple Clock Demo - MBED + SmartGPU2 board
Diff: main.cpp
- Revision:
- 0:795e0e8e9cdc
- Child:
- 1:4803259f24d3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jul 10 03:40:50 2013 +0000 @@ -0,0 +1,105 @@ +/**************************************************************************************/ +/*SMARTGPU2 intelligent embedded graphics processor unit + those examples are for use the SMARTGPU2 with the mbed microcontoller, just connect tx,rx,and reset + Board: + http://vizictechnologies.com/#/smart-gpu-2/4577779046 + + www.vizictechnologies.com + Vizic Technologies copyright 2013 */ +/**************************************************************************************/ +/**************************************************************************************/ + +#include "mbed.h" +#include "SMARTGPU2.h" + +//we define a new structure of INT instead of UNSIGNED INT +typedef struct { + int x; //X axis + int y; //Y axis +} POINTINT; //to create a point with point.x and point.y variable + +#define CLOCKBODYCOLOUR BLACK //colour for the body clock +#define CLOCKEDGECOLOUR GREEN //colour for the edge of the clock +#define SECCOL YELLOW //seconds hand colour +#define MINCOL MAGENTA //minutes hand colour +#define HOURCOL RED //hours hand colour +#define HALFX LCD_WIDTH/2 //this point represent the x center of the clock where math is done +#define HALFY LCD_HEIGHT/2 //this point represent the y center of the clock where math is done + +SMARTGPU2 lcd(TXPIN,RXPIN,RESETPIN); //create our object called "lcd" + +/***************************************************/ +/***************************************************/ +void initializeSmartGPU2(void){ //Initialize SMARTGPU2 Board + lcd.reset(); //physically reset SMARTGPU2 + lcd.start(); //initialize the SMARTGPU2 processor +} + +/***************************************************/ +/***************************************************/ +/***************************************************/ +/***************************************************/ +int main() { + POINTINT secP,minsP,hourP; + AXIS updatedXPosition; + int secs=15; + int mins=45; + int hours=2; + int angleH,angleM,angleS; + int handHour=75;//hand size + int handMin=85;//hand size + int handSec=95;//hand size + + initializeSmartGPU2(); //Init communication with SmartGPU2 board + + lcd.baudChange(BAUD7); //set a fast baud! for fast drawing + lcd.drawCircle(160,120,110,CLOCKBODYCOLOUR,FILL); //draw clock body + lcd.drawCircle(160,120,110,CLOCKEDGECOLOUR,UNFILL); //draw clock edge + + //config strings + lcd.setTextColour(CLOCKEDGECOLOUR); + lcd.setTextSize(FONT5); + lcd.setTextBackFill(TRANS); + + while(1){ + //Do some Math to get the second point of the clock hands. (first point is always the center of the clock) + angleS=secs*6; //get the current seconds in angle form, a circle have 360 degrees divided by 60 seconds = 6, then we multiply the 6 by the current seconds to get current angle + secP.x=((sin((angleS*3.14)/180)) * handSec); //get X component of the second's hand + secP.y=((cos((angleS*3.14)/180)) * handSec); //get Y component of the second's hand + angleM=mins*6; //get the current minutes in angle form, a circle have 360 degrees divided by 60 minutes = 6, then we multiply the 6 by the current minutes to get current angle + minsP.x=((sin((angleM*3.14)/180)) * handMin); //get X component of the minutes's hand + minsP.y=((cos((angleM*3.14)/180)) * handMin); //get Y component of the minutes's hand + angleH=hours*30; //get the current hours in angle form, a circle have 360 degrees divided by 12 hours = 30, then we multiply the 30 by the current hours to get current angle + hourP.x=((sin((angleH*3.14)/180)) * handHour); //get X component of the hours's hand + hourP.y=((cos((angleH*3.14)/180)) * handHour); //get Y component of the hours's hand + + lcd.putLetter(146,22,'1',&updatedXPosition); //Draw the 1 + lcd.putLetter(updatedXPosition,22,'2',&updatedXPosition); //Draw the 2 + + //Draw current time hands + lcd.drawLine(HALFX,HALFY,HALFX+minsP.x,HALFY-minsP.y,MINCOL); // Draw the minutes hand, first point is the center of the clock, and the second is the point obtained by doing math + lcd.drawLine(HALFX,HALFY,HALFX+hourP.x,HALFY-hourP.y,HOURCOL); // Draw the hours hand, first point is the center of the clock, and the second is the point obtained by doing math + lcd.drawLine(HALFX,HALFY,HALFX+secP.x,HALFY-secP.y,SECCOL); // Draw the seconds hand, first point is the center of the clock, and the second is the point obtained by doing math + lcd.drawCircle(HALFX,HALFY,5,SECCOL,FILL); // Draw the center of the second's hand + + wait_ms(1000); // wait for one second delay (we dont need to explain why we're waiting one second, right?) + + secs++; // increase seconds + if(secs==60){ // if we reach 60 seconds + mins++; // increase the minutes + if(mins==60){ // if we reach 60 minutes + hours++; // increase the minutes + if(hours==12){ // if we reach 12 hours + hours=0; // clear hours + } + mins=0; // clear minutes + } + secs=0; // clear seconds + } + + //Erase all hands + lcd.drawLine(HALFX,HALFY,HALFX+secP.x,HALFY-secP.y,CLOCKBODYCOLOUR); // Erase Second's hand + lcd.drawLine(HALFX,HALFY,HALFX+minsP.x,HALFY-minsP.y,CLOCKBODYCOLOUR); // Erase Minute's hand + lcd.drawLine(HALFX,HALFY,HALFX+hourP.x,HALFY-hourP.y,CLOCKBODYCOLOUR); // Erase Hour's hand + } +} \ No newline at end of file