#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD(0x27,16,2);
#define VERT_PIN A0
#define HORZ_PIN A1
#define SEL_PIN 2
const int r1=6;
const int g1=3;
const int b1=5;
const int r=11;
const int b=10;
const int g=9;
int red,blue,green;
float s_second;
float f_second;
float e_second;
float e_second1;
float e_second2;
float e_second3;
float s_g = 0;
float s_r = 0;
float s_yr = 0;
float s_yl = 0;
byte D[8] = { 0b01110, // это Д
0b01010,
0b01010,
0b01010,
0b01010,
0b11111,
0b10001,
0b00000 };
byte NI[8] = { 0b10101, // это Й
0b10001,
0b10011,
0b10101,
0b11001,
0b10001,
0b10001,
0b00000 };
byte B[8] = { 0b11111, // это Б
0b10000,
0b10000,
0b11110,
0b10001,
0b10001,
0b11110,
0b00000 };
byte N[8] = { 0b10001, // это И
0b10001,
0b10011,
0b10101,
0b11001,
0b10001,
0b10001,
0b00000 };
byte GG[8] = { 0b11111, // это Г
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b00000 };
String utf8rus(String source) {
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
void setup()
{
LCD.init();
LCD.backlight();
LCD.createChar(1, D);
LCD.createChar(2, NI);
LCD.createChar(3, B);
LCD.createChar(4, N);
LCD.createChar(5, GG);
LCD.setCursor(2,0);
LCD.print("M");
LCD.print(char(4));
LCD.print("P");
LCD.print(char(5));
LCD.print("OPO");
LCD.print(char(1));
LCD.print("CK");
LCD.print(char(4));
LCD.print(char(2));
LCD.setCursor(5,1);
LCD.print("AH");
LCD.print(char(1));
LCD.print("PE");
LCD.print(char(2));
LCD.print(" ");
pinMode(r, OUTPUT);
pinMode(b, OUTPUT);
pinMode(g, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(b1, OUTPUT);
pinMode(g1, OUTPUT);
pinMode(VERT_PIN, INPUT);
pinMode(HORZ_PIN, INPUT);
pinMode(SEL_PIN, INPUT_PULLUP);
delay(2000);
LCD.clear();
}
void loop()
{
int horz = analogRead(HORZ_PIN);
int vert = analogRead(VERT_PIN);
s_second = millis();
LCD.setCursor(0,0);
LCD.print("G:");
LCD.setCursor(8,0);
LCD.print("R:");
LCD.setCursor(0,1);
LCD.print("Yr:");
LCD.setCursor(8,1);
LCD.print("Yl:");
if (vert < 512) {
red=255;
green=0;
blue=0;
analogWrite(r, red);
analogWrite(b, blue);
analogWrite(g, green);
f_second = millis();
e_second += (f_second - s_second) / 1000;
s_r = e_second;
LCD.setCursor(10,0);
LCD.print(s_r);
}
if (vert > 512) {
red=0;
green=255;
blue=0;
analogWrite(r1, red);
analogWrite(b1, blue);
analogWrite(g1, green);
f_second = millis();
e_second1 += (f_second - s_second) / 1000;
s_g = e_second1;
LCD.setCursor(2,0);
LCD.print(s_g);
}
if (horz != 512) {
red=255;
green=255;
blue=0;
analogWrite(r, red);
analogWrite(b, blue);
analogWrite(g, green);
red=0;
green=0;
blue=0;
analogWrite(r1, red);
analogWrite(b1, blue);
analogWrite(g1, green);
delay(500);
red=255;
green=255;
blue=0;
analogWrite(r1, red);
analogWrite(b1, blue);
analogWrite(g1, green);
f_second = millis();
e_second2 += (f_second - s_second) / 1000;
s_yr = e_second2;
LCD.setCursor(3,1);
LCD.print(s_yr);
red=0;
green=0;
blue=0;
analogWrite(r, red);
analogWrite(b, blue);
analogWrite(g, green);
f_second = millis();
e_second3 += (f_second - s_second) / 1000;
s_yl = e_second3;
LCD.setCursor(11,1);
LCD.print(s_yl);
delay(500);
}
if (horz != 512) {
red=0;
green=0;
blue=0;
analogWrite(r, red);
analogWrite(b, blue);
analogWrite(g, green);
}
if (vert == 512) {
red=0;
green=0;
blue=0;
analogWrite(r, red);
analogWrite(b, blue);
analogWrite(g, green);
analogWrite(r1, red);
analogWrite(b1, blue);
analogWrite(g1, green);
}
}