This class encapsulates all the algorithms required for the displaying strings and time dependent patterns on the lcd.
Dependents: 200943412_QuickClick
Display.cpp
- Committer:
- domkay97
- Date:
- 2017-04-11
- Revision:
- 4:b74041216336
- Parent:
- 2:f0ecd70c9ea2
- Child:
- 5:f8df5fe3dc6c
File content as of revision 4:b74041216336:
#include "Display.h" #include "N5110.h" #include "Gamepad.h" #include <math.h> Display::Display() { _h = 0; _w = 0.4; _a = 0; _A = 0; _v = 0; x = 0; y = 0; x0 = 0; y0 = 0; } Display::~Display() { } void Display::init() { _h = 0; _w = 0.4; _a = 0; _A = 0; _v = 0; x = 0; y = 0; x0 = 0; y0 = 0; } void Display::drawCircle(N5110 &lcd) { lcd.clear(); random_instruction(lcd); Circle(lcd); calculateWait(); _h++; lcd.clear(); lcd.refresh(); } int Display::calculateWait() { _w = 0.4*exp(-0.03465*_h); return _v; } void Display::random_instruction(N5110 &lcd) { _v = rand() % 4 + 1; if (_v == 1){ lcd.printChar('A',42,3); } else if (_v == 2){ lcd.printChar('B',42,3); } else if (_v == 3){ lcd.printChar('X',42,3); } else { lcd.printChar('Y',42,3); } lcd.refresh(); } // function to draw circle void Display::Circle(N5110 &lcd) { // from http://en.wikipedia.org/wiki/Midpoint_circle_algorithm for (int a = 0; a < 8; ++a) { Drawarc(lcd, a); lcd.refresh(); lcd.setBrightness(1.0); wait(_w); lcd.setBrightness(0.0); wait(_w); } } void Display::Drawarc(N5110 &lcd, int a) { x = 20; y = 0; int a1; int b1; radiusError = 1-x; x0 = 42; y0 = 24; while(x >= y) { // if transparent, just draw outline switch(a) { case 0 : {a1 = y; b1 = x * -1; break; } case 1 : {a1 = x; b1 = y * -1; break; } case 2 : {a1 = x; b1 = y; break; } case 3 : {a1 = y; b1 = x; break; } case 4 : {a1 = y * -1; b1 = x; break; } case 5 : {a1 = x * -1; b1 = y; break; } case 6 : {a1 = x * -1; b1 = y * -1; break; } case 7 : {a1 = y * -1; b1 = x * -1; break; } default : { a1 = x; b1 = y * -1; break; } } lcd.setPixel( a1 + x0, b1 + y0); // lcd.setPixel(-x + x0, y + y0); // lcd.setPixel( y + x0, x + y0); // lcd.setPixel(-y + x0, x + y0); // lcd.setPixel(-y + x0, -x + y0); // lcd.setPixel( y + x0, -x + y0); // lcd.setPixel( x + x0, -y + y0); /// lcd.setPixel(-x + x0, -y + y0); y++; if (radiusError<0) { radiusError += 2 * y + 1; } else { x--; radiusError += 2 * (y - x) + 1; } } }