NuMaker-PFM-NUC472: I2C1 LCD draw a moving circle

Committer:
ccli8
Date:
Tue Jul 11 13:41:06 2017 +0800
Revision:
1:219b99b987f0
Parent:
0:72afeb131817
Update mbed-os to mbed-os-5.5.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rkuo2000 0:72afeb131817 1 // NuMaker-PFM-NUC472 : I2C1 LCD draw a moving circle
rkuo2000 0:72afeb131817 2 #include "mbed.h"
rkuo2000 0:72afeb131817 3 #include "math.h"
rkuo2000 0:72afeb131817 4 #include "ssd1306.h"
rkuo2000 0:72afeb131817 5 #include "draw2D.h"
rkuo2000 0:72afeb131817 6
rkuo2000 0:72afeb131817 7 #define PI 3.1415926535
rkuo2000 0:72afeb131817 8
rkuo2000 0:72afeb131817 9 #define X0 15 // Circle initial X
rkuo2000 0:72afeb131817 10 #define Y0 10 // Circle initial Y
rkuo2000 0:72afeb131817 11
rkuo2000 0:72afeb131817 12 I2C i2c1(PD_12, PD_10); // I2C1_SDA, I2C1_SCL
rkuo2000 0:72afeb131817 13
rkuo2000 0:72afeb131817 14 SSD1306 LCD; // LCD connected on I2C1
rkuo2000 0:72afeb131817 15 Draw2D D2D; // Draw2D library
rkuo2000 0:72afeb131817 16
rkuo2000 0:72afeb131817 17 int main() {
rkuo2000 0:72afeb131817 18
rkuo2000 0:72afeb131817 19 int dirX, dirY;
rkuo2000 0:72afeb131817 20 int movX, movY;
rkuo2000 0:72afeb131817 21 int r;
rkuo2000 0:72afeb131817 22 int x, y;
rkuo2000 0:72afeb131817 23
rkuo2000 0:72afeb131817 24 i2c1.frequency(400000);
rkuo2000 0:72afeb131817 25
rkuo2000 0:72afeb131817 26 LCD.initialize();
rkuo2000 0:72afeb131817 27 LCD.clearscreen();
rkuo2000 0:72afeb131817 28
rkuo2000 0:72afeb131817 29 x = X0; // circle center x
rkuo2000 0:72afeb131817 30 y = Y0; // circle center y
rkuo2000 0:72afeb131817 31 r = 3; // circle radius
rkuo2000 0:72afeb131817 32
rkuo2000 0:72afeb131817 33 movX = 3; // x movement
rkuo2000 0:72afeb131817 34 movY = 3; // y movement
rkuo2000 0:72afeb131817 35 dirX = 1; // x direction
rkuo2000 0:72afeb131817 36 dirY = 1; // y direction
rkuo2000 0:72afeb131817 37
rkuo2000 0:72afeb131817 38 while(true) {
rkuo2000 0:72afeb131817 39 D2D.drawCircle(x, y, r, FG_COLOR, BG_COLOR); // draw a circle
rkuo2000 0:72afeb131817 40
rkuo2000 0:72afeb131817 41 Thread::wait(1); // Delay for Vision
rkuo2000 0:72afeb131817 42
rkuo2000 0:72afeb131817 43 D2D.drawCircle(x, y, r, BG_COLOR, BG_COLOR); // erase a circle
rkuo2000 0:72afeb131817 44
rkuo2000 0:72afeb131817 45 x = x + dirX * movX; // change x of circle center
rkuo2000 0:72afeb131817 46 y = y + dirY * movY; // change y of circle center
rkuo2000 0:72afeb131817 47
rkuo2000 0:72afeb131817 48 // boundary check for changing direction
rkuo2000 0:72afeb131817 49 if ((x-r) <=0) {dirX= 1; x= x + dirX*movX;}
rkuo2000 0:72afeb131817 50 else if ((x+r) >=LCD_Xmax) {dirX=-1; x= x + dirX*movX;}
rkuo2000 0:72afeb131817 51
rkuo2000 0:72afeb131817 52 if ((y-r) <=0) {dirY= 1; y= y + dirY*movY;}
rkuo2000 0:72afeb131817 53 else if ((y+r) >=LCD_Ymax) {dirY=-1; y= y + dirY*movY;}
rkuo2000 0:72afeb131817 54 }
rkuo2000 0:72afeb131817 55 }