#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "mString.h"
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 display = Adafruit_ILI9341(TFT_CS, TFT_DC);
void setup() {
Serial.begin(9600);
mString<4> ic_name;
display.begin();
ic_name = "50d";
show_icon(0, 0, 10, ic_name);
show_icon(100, 0, 4, ic_name);
ic_name = "50n";
show_icon(150,0, 10, ic_name);
show_icon(100, 30, 4, ic_name);
}
void loop() { }
void show_icon(int x, int y, uint8_t scale, mString<4> & IconName)
{
byte k = 5;
display.fillRect(x - 2, y - 3, scale * 9, scale * 8, ILI9341_BLACK);
display.drawRect(x - 2, y - 3, scale * 9, scale * 8, ILI9341_CYAN);
display.setFont();
display.setTextSize(1);
display.setTextColor(ILI9341_CYAN);
display.setCursor(0, 0);
display.print(IconName.buf);
if (IconName == "01d" || IconName == "01n")
{
if (IconName[2] == 'd')
{
addsun(x + scale * 4, y + scale * 3, scale);
}
if (IconName[2] == 'n')
{
addmoon(x + scale * 4, y + scale * 3, scale);
}
return;
}
else if (IconName == "02d" || IconName == "02n")
{
if (IconName[2] == 'd')
{
addsun(x + scale * 4, y + scale * 3, scale);
addcloud(x, y, scale, ILI9341_WHITE);
}
if (IconName[2] == 'n')
{
addmoon(x + scale * 4, y + scale * 3, scale);
addcloud(x, y, scale, ILI9341_CYAN);
}
return;
}
else if (IconName == "03d" || IconName == "03n")
{
if (IconName[2] == 'd')
{
// addsun(x + scale * 4, y + scale * 3, scale);
addcloud(x, y + scale, scale, ILI9341_WHITE);
}
if (IconName[2] == 'n')
{
// addmoon(x + scale * 4, y + scale * 3, scale);
addcloud(x, y + scale, scale, ILI9341_CYAN);
}
return;
}
else if (IconName == "04d" || IconName == "04n")
{
addcloud(x, y + scale, scale, ILI9341_BLUE);
return;
}
else if (IconName == "09d" || IconName == "09n")
{
addcloud(x, y, scale, ILI9341_CYAN);
addrain( x, y, scale);
return;
}
else if (IconName == "10d" || IconName == "10n")
{
if (IconName[2] == 'd')
{
addsun(x + scale * 4, y + scale * 3, scale);
}
if (IconName[2] == 'n')
{
addmoon(x + scale * 4, y + scale * 3, scale);
}
addcloud(x, y, scale, ILI9341_CYAN);
addrain( x, y, scale);
return;
} //addtstorm
else if (IconName == "11d" || IconName == "11n")
{
addrain( x, y, scale);
addtstorm( x + scale * 4, y + scale * 2, scale);
addcloud(x, y - scale / 2, scale, ILI9341_BLUE);
return;
}
else if (IconName == "13d" || IconName == "13n")
{
addsnow( x, y, scale);
addcloud(x, y - scale / 2, scale, ILI9341_BLUE);
}
else if (IconName == "50d"||IconName == "50n") ;
{
addfog(x,y, scale);
}
}
//#########################################################################################
void addfog(int x, int y, uint8_t scale)
{
display.fillRect(x + scale * 2, y + scale*2, scale * 5, scale, ILI9341_LIGHTGREY);
display.fillRect(x + scale, y + scale * 3, scale * 4, scale, ILI9341_DARKGREY);
display.fillRect(x , y + scale * 4, scale * 6, scale, ILI9341_LIGHTGREY);
display.fillRect(x + scale, y + scale * 5, scale * 6, scale, ILI9341_DARKGREY);
}
// display.fillRect(x + scale,y + scale * 3, scale * 7, scale, ILI9341_YELLOW);
void addtstorm(int x, int y, int scale) {
y = y + scale * 2;
x = x + scale;
for (int i = 0; i < scale; i++) {
display.drawLine(x + i + scale / 2, y, x + i - scale / 2, y + scale, ILI9341_WHITE);
}
display.fillRoundRect(x - scale / 2, y + scale, scale * 3, scale / 2, scale, ILI9341_WHITE);
display.fillTriangle(x + scale, y + scale * 1.5, x + scale * 2, y + scale * 1.5, x, y + scale * 3, ILI9341_WHITE);
}
//#########################################################################################
void addcloud(int x, int y, int scale, uint16_t color) {
byte k = 5;
if (scale < 6) k = 0;
display.fillCircle(x + scale, k + y + scale * 3, scale, color); // Clear left most circle
display.fillCircle(x + scale * 3, k + y + scale * 2, scale * 2, color);
display.fillCircle(x + scale * 5, k + y + scale * 2.5, scale * 1.7, color);
display.fillCircle(x + scale * 7, k + y + scale * 3, scale, color);
display.fillRoundRect(x + scale, k + y + scale * 3, scale * 7, scale * 1.3, scale, color);
}
//#########################################################################################
void addrain(int x, int y, byte scale) {
y = y + scale * 4;
x = x + scale * 2;
for (int i = 0; i < scale; i++) {
display.drawLine(x + 4 * i, y, x + 5 + 4 * i, y + scale * 3, ILI9341_CYAN);
}
}
//#########################################################################################
void addsnow(int x, int y, int scale) {
if (scale < 6)
{
y = y + scale * 5;
x = x + scale ;
for (int i = 0; i <= scale; i++)
display.fillCircle(x + 5 * i, y, 1, ILI9341_CYAN);
return;
}
y = y + scale * 4;
x = x + scale*4 ;
int dxo, dyo, dxi, dyi;
for (int flakes = 0; flakes < 5; flakes++) {
for (int i = 0; i < 360; i = i + 45) {
dxo = 0.5 * scale * cos((i - 90) * 3.14 / 180); dxi = dxo * 0.1;
dyo = 0.5 * scale * sin((i - 90) * 3.14 / 180); dyi = dyo * 0.1;
display.drawLine(dxo + x +flakes * 1.5 * scale - scale * 3, dyo + y + scale * 2, dxi + x + flakes * 1.5 * scale - scale * 3, dyi + y + scale * 2, ILI9341_CYAN);
}
}
}
//#########################################################################################
void addsun(int x, int y, int scale) {
display.fillCircle(x, y, scale * 3, ILI9341_YELLOW);
}
//#########################################################################################
void addmoon (int x, int y, int scale) {
display.fillCircle(x, y, scale * 3, ILI9341_WHITE);
display.fillCircle(x + scale * 2, y, scale * 3, ILI9341_BLACK);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:VCC
lcd1:GND
lcd1:CS
lcd1:RST
lcd1:D/C
lcd1:MOSI
lcd1:SCK
lcd1:LED
lcd1:MISO