ืืชืื ืืืชืจ ืื
ืืืคืฉืจืืช ืื ืืื ืืืืชืจ ืืืืืืจ ืืืืข ืขื ืืคืขืืช ืืืชื ืข ืืชืืจืจื ืืืืคืฆืื ืขื ืืฆืื ืืืืคืื PC817. ืชืจืฉืื ืืขืืืืืืืืืืช ืืืืืื ืฉืืืฉื ืืขืืืื ืืืื, ืืื ืืื ื ืืงืืคืกืืืช ืคืืกืืืง ABS ืืืืื 100X100 ื"ื. ืชืืื ื ืฉื ืืฆืืืื ืืืคืื ืืืฉืจ ืื ืืืืืจืื ืืืืฉืืจื ืืชื ืขื ืขื ืฉืกืชืืืื ืืืืืืื ืืืืฆื, ืืจื ืืืืืคื ืฉืืื ืืกืคืืง ืืื ืืคืชืื ืืช ื-PC817 ืืืืื ื ืืืคืขื ืืฆืืจื ืฉืืืื. ืืืืฆืื ืืฆื ืืื
ืืืืง ืืืงืื ืขืฉืื ืขื ืฆื 1ืฆื 2ืืื ืคืืชืื ืืืืืจ ื-ARDUINO MEGA 2560. ืืฉื ืื, ื ืขืฉื ืฉืืืืฉ ืืืืืจ ืื-ืฉืืจื ืืงืฆื. ืืกื ืืจืืืืืฆืื ืฉื 240x400, ืืขื ืืกื ืืืข ืืชื ืืืืช ืืืืืฉื ืืืคืจืืืจื, ืืฉืืฉ ืืืืฉืืจ ืืืฆืืช ืืืืข. HX8352B. ืืชืจ ืขื ืื, ืืืืืจ ื-ICSP ืืืื ืืืกื ืืืกืจ ืืื ื ืขืฉื ืฉืืืืฉ ืืืจืืฅ ื-micro SD. ืืขืืืื ืืื ืฉืื ื ืืชื ืืืฉืชืืฉ ืืฉืงืข ื-SD "ืืืงืืจื" ืขืงื ืืชื ืืฉืืช ืืืคืืง SPI. ืืืจืืืก ืืืืง ื ืขืฉื ืฉืืืืฉ ืืงืืจื ืืจืืืกืื ื ืคืจื ืฉืืื ืืืืฆื 3,3V ืืฉืื ืืืฅ ืขื ืฉืืืฉื ืืฆืื ืคืื 74LVS125A. ืืื ืืืืชื ืื ืืืืจืคื. ืืืืจ ืฉื ืฉืืืฉื ืืฆืืื, ืืื ืื ื-E01-ML01DP5 ืื ืงืืจื ืืืจืืืกืื ืขืืื. ืืืขืจืืช ืืกืคืจืืื, SdFat ืจืื ืืืืจื ืืืื ืื ืชืืืืืช ืืืืฉืืจืื ืืืจืื. ืืืืจ ืืจืืืช ื-TXS0108E ืืืกืจ ืืืืืืฃ ืืืืฉืจืื, ืืืื E01-ML01DP5 ืกืืืื ื ืืืืชืืช 5V - ืื ืื ืขืืจ. ืืืืฆืขืืช ืืืกืืืืกืงืืค ืืืื ืืืืื ืืืช ืืงื MISO ืืืฉืจ ืืืืจ ืงืืจื ืืจืืืกืื. ืืืืจ ืืืืงื ืืืืงืืงืช, ื ืืฆื ืฉืืื ืืกืืช ืฉื ืืืืชืืช ืืืืคืฉืจืื ืฉื ืขืจืืฆื OE 4 ืฉื ื-74LVS125A ืคืฉืื ืืืืืื ืืืื ืืฉืืชืฃ ืืื ืืืื ืืืืืช ืืืืจ ืขื ืืฆื ืฉืืืฉื ืืืฉืื. ืฉืื ืืืืืจ ืฉืืืฉ ืืืืืจ ืจืื ืคืจืืืืืืื ื-5V ื-3.3V ืืืืฆืขืืช ื ืืืื ืฉื 3,3 Kฮฉ ืืืืืืจืื ืืกืืจื ืขื ืงืืื ืืืืช. ืืืฅ ืืืงื MISO. ืืืชื ืืชืืชืื ืฉืื ืื ืจืื ืืฉื ืืืชืืช ืืืคืืก ืืงืจืงืข. ืืืืจ ืฉืงืืขืชื ืฉืืืช ืืืคืขืื ืฉื ืงื MISO ืืื ืคืื 13, ืืื ื ืชืืฉ ืืืืกืืืืืึผืืึธืืืื ืืชืงื 9LVS74A CS ืืืจ ืคืื ืงืื (125) ืืืื ื ืื ืืกืืื. ืืขืช, ืื ืืื ืืืฉื ืืืจืืืก ืืืืืจืื, ืืืืจ MISO ืืืฉืืช ืืืื ื ืืคืจืืข ืืคืขืืื ืฉื ืืืฉืืจ ืืืจ.ืืืืืจืืช ืืื ืืคืืชืืืืงืื ืืคืขืืืื-DS3231 ืืฉืชืืฉ ืืืคืืง I2C ืชืืื ื (TWI) ืืื ืืืืจ ืืช ืืฉืขืื.
ืชืืื ืืช Arduino IDE// ืืฉืื: ืกืคืจืืืช Adafruit_TFTLCD ืืืืืช ืืืืืช ืกืคืฆืืคืืช
// ืืืืืจ ืขืืืจ ืืื ื-TFT ืื ืืื ืืคืจืืฆื.
// ืจืื ืืขืจืืช ืจืืืื ืืืืช ื-Adafruit_TFTLCD.h ืืืืืจื.
//ืขื ืืื Open-Smart Team ื-Catalex Team
//[ืืืื ืืืื"ื]
//ืื ืืช:
//
//ืคืื ืงืฆืืืช ืืืืื: ืืฆืืช ืืจืคืืงื, ืชืืืื
//Arduino IDE: 1.6.5
// ืืื: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo
// ืืื:OPEN-SMART UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2 ืืื ืฅ' TFT:
//
//OPEN-SMART UNO R3 5V / 3.3V:
//
#ืึดืืืึนื // ืกืคืจืืืช ืืจืคืืงื ืืืื
//#ืึดืืืึนื // ืกืคืจืื ืกืคืฆืืคืืช ืืืืืจื
#ืึดืืืึนื
MCUFRIEND_kbv tft;
#include "SdFat.h" // ืืฉืชืืฉ ืืกืคืจืืืช SdFat
SdFat SD;
ืงืืืฅ SdFile;
ืงืืืฅ myFile;
#define SD_CS_PIN SS
#ืึดืืืึนื // ืืืจ ืืช ืืกืคืจืืื ืืขืืืื ืขื ืืคืืง SPI
#ืึดืืืึนื // ืืืจ ืืช ืงืืืฅ ืืืืืจืืช ืืกืคืจืืืช RF24
#ืึดืืืึนื // ืืืจ ืืช ืืกืคืจืืื ืืขืืืื ืขื nRF24L24+
ืจืืื RF24(47, 49);
#ืึดืืืึนื
DS3231 rtc(27, 25);
ืืื t;
uint16_t r = 6000;
uint32_t k = 0;
ื ืชืื ืื ืืจืืืื ื ืืืคืื ืืื ืืชืืื;
ืืฆืืฃ leb_1;
ืืฆืืฃ leb_2;
ืืฆืืฃ leb_3;
ืืฆืืฃ leb_4;
uint8_t pipe;
int rc = 0;
uint8_t time_sec_prev;
uint8_t time_day_prev;
//************************************************** ****************/ /
// ืื ืืชื ืืฉืชืืฉ ืืืื ืคืจืืฆืช TFT OPEN-SMART //
// ืืืืืฅ ืื ืืืืกืืฃ ืืขืื ืืืจื ืืจืื ืฉื 5V-3.3V.
// ืืืืื ืฉืืชื ืืืื ืืืฉืชืืฉ ืืืจืกืช OPEN-SMART UNO ืฉืืืจื ืขื ืืชื ืืคืขืื 5V/3.3V,
// ืืชื ืจืง ืฆืจืื ืืขืืืจ ื-3.3V.
// ื ืืชื ืืืงืฆืืช ืืช ืคืื ื ืืืงืจื ืขืืืจ ื-LCD ืืื ืืืืืืื ืื
// ืคืื ืื ืื ืืืืืื...ืืื ื ืฉืชืืฉ ืืคืื ืื ืืื ืืืืืื ืืคื ืฉืื ืืืคืฉืจ ืื ื
//โโโโโโโโโโโโโโ-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO ืฉืืืจ
// GND - GND
// 3V3 - 3.3V
//CS - A3
// RS - A2
// WR - A1
// RD - A0
// RST - ืืืคืืก
// LED - GND
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7
// ืืงืฆื ืฉืืืช ืื ืืชื ืื ืืงืจืืื ืขื ืืื ืืื ืืืื ืขืจืื ืฆืืข ื ืคืืฆืื ืฉื 16 ืกืืืืืช:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define GREY 0x8C51
#define GRAYD 0x39E7
//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// ืื ืืฉืชืืฉืื ืืืื, ืื ืงืืื ืืืงืจื ืืื ืชืื ืื ืงืืืขืื, ื
// ื ืืชื ืืืฉืชืืฉ ืืืฆืืจื ืคืฉืืื ืืืชืจ:
// Adafruit_TFTLCD tft;
uint16_t g_identifier;
ืืืจืืืช dataString;
//String numfileMonth = "1.txt";
char perv [] = {"2.txt"};
//String *numfileMonth="1.txt" (sizeof (numfileMonth));
//</em></ul></ul><ul> <li> //</em></em> ///
ืืืืจืช ืืื (ืืื) {
rtc.begin();
// ืืื ืืืืืืจ ืืช ืืฉืขื, ืืื ืืช ืืืขืจื ืืฉืืจืืช ืืืจืืฉืืช
// rtc.setDOW(6); // ืืื ืืฉืืืข
// rtc.setTime(22, 04, 0); // ืืื, ืืคืืจืื ืฉื 24 ืฉืขืืช.
// rtc.setDate(4, 5, 2019); // ืชืืจืื, 29 ืืืืงืืืืจ 2018
Serial.begin (2000000);
//////// ืืชืืื ืืกื
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(true);
////////////////////ืคืื ืฉืืืช, ืืืืืจื ืฆืืื, ืฉื ืืืจืืื
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("DEVELOPERS & BUILD");
tft.setCursor(30, 20);
tft.print (utf8rus("Constructor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
ืขืืืื (2000);
radio.begin(); // ืืืืื ืขืืืื nRF24L01+
radio.setChannel(120); // ืฆืืื ืืช ืขืจืืฅ ืงืืืืช ืื ืชืื ืื (ื-0 ืขื 127)
radio.setDataRate(RF24_250KBPS); // ืฆืืื ืืช ืงืฆื ืืขืืจืช ืื ืชืื ืื (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // ืฆืืื ืืช ืืกืคืง ืืืฉืืจ (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // ืคืชื ืฆืื ืืจ ืืื ืขื ืืืืื ืฉื ืืฉืืจ ืืื 1xAABBCCDD1, ืืื ืืงืื ื ืชืื ืื
// ืคืชื ืฆืื ืืจ 2 ืขื ืืฉืืจ ืืืื 2xAABBCCDD0 ืืื ืืงืื ื ืชืื ืื
radio.startListening(); // ืืคืขื ืืช ืืืงืื, ืชืชืืื ืืืืืื ืืฆืื ืืจืืช ืคืชืืืื
// radio.stopListening();
////////ืคืื ืืืืข ืฉืืจืืช
tft.fillScreen(BLACK);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////ืืชืื ืืืชืื ืืช ืืจืืืก ื-SD
Serial.println("ืืจืืืก SD ืจืืฉืื ื");
tft.println("ืืจืืืก SD ืจืืฉืื ื");
tft.setCursor(8, 10);
////////ืืชืืื ืืืจืืืก
if (!SD.begin(SD_CS_PIN)) {
Serial.println("ืืืชืืื ื ืืฉืื!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(BLACK);
tft.println("ืืจืืฉืื ื ืืฉื!");
ืืืืืจ;
}
tft.setTextColor(WHITE);
Serial.println("ืืชืืื ื ืขืฉื");
tft.println("ืืชืืื ื ืขืฉื");
ืขืืืื (2000);
////////ืงืจืืืช ืฉืขื ืืชืืจืื ืืืงืฆืืชื ืืืฉืชื ืื
t = rtc.getTime();
time_sec_prev = t.sec;
time_day_prev = t.date;
////////ืคืื ืืช ืืชืืจืื ืืืื ืืื ืื ืืืืชืื ืขื ืฉืืชืืจืื ืืฉืชื ื ืืชืฆืืื
tft.setCursor(180, 0); // ืืืืจืช ืืืงืื ืืกืื
tft.fillRect(178, 0, 65, 7, GRAY); // ื ืืงืื ืืืืจ ืคืื ืืืื
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////ืคืื ืืช ืืฉื ืฉื ืืืืืืงืื ืืงืจื
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("ืื ื ืืช I"));
////////ืืฆืืจืช ืงืืืฅ ืืืื ืืืืฆืืช ืืชืืฆืื ืฉื ื ืืกืืื ืืืฆืืจื
tft.setTextSize(1);
tft.setCursor(130, 10); // ืื ื ืืฆืจ ืงืืืฅ ืืืื 2.txt, ืืืชืืื ืืงืืืฅ ืชืืืฉื
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
ืืืจ} {
myFile = SD.open(perv, FILE_WRITE); // ืื ืงืืืฅ 2.txt ืื ืงืืื, ืืื ืืืืืฆืจ
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}
ืืืืื ืืืื (ืืืื) {
////////ืืืืงืช ืงืืืื ืฉื ืืงืฉื ืืคืื ืืืื ืืฆื ืืฆืืืช ื-COM
if (Serial.available() > 0) {
if (1 == Serial.read());
////////ืืื "1" ืืชืงืื, ืื ืืคืื
ืงืืืฅ myFile = SD.open(perv);
// ืื ืืงืืืฅ ืืืื, ืืชืื ืื:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
ืืืจ {
Serial.println("ืฉืืืื ืืคืชืืืช .txt");
}
}
////////ืืื ืงืจืืื
t = rtc.getTime();
tft.setTextColor(WHITE);
////////ืื ืืฉืขื ืืฉืชื ืชื, ืืฆื ืืช ืงืจืืืืช ืืฉืขืื ืืืืฉืืช
if ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // ืืืืจืช ืืืงืื ืืกืื
tft.fillRect(118, 0, 50, 7, GRAY); // ื ืืงืื ืืืืจ ืคืื ืืืื
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // ืคืื ืงืจืืืืช ืฉืขืื
time_sec_prev = t.sec;
}
////////ืื ืืชืืจืื ืืฉืชื ื, ืืฆื ืืช ืืชืืจืื ืืืืฉ
if ( time_day_prev != t.date) {
tft.setCursor(180, 0); // ืืืืจืช ืืืงืื ืืกืื
tft.fillRect(178, 0, 65, 7, GRAY); // ื ืงื ืืืืจ ืชืฆืืืช ืชืืจืื
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // ืืฆื ืงืจืืืืช ืชืืจืื
time_day_prev = t.date;
}
////////ืื ืงืืืืช ืจืืื ืืืื ื, ืื
if (radio.available(&pipe)) {
////////ืืืืง ืื ืืืืจ ืืงืืื ืืื,
radio.read(&data, sizeof(data));
////////ืื ืืชืืืช ืืืฉืืจ ืื ืืจืฉืช ืืืื ื, ืื
if (pipe == 1) {
////////ืืืื ืืจืฆืฃ ืกื ืืจืื ืฉื ืืคืกืื ืืื ืืงืืืข
//ืชืืืืช ืืืืง ืื ืชืื ืื
if (ื ืชืื ืื == 0000) {
rc = 0;
ืืืจ} {
rc++;
}
////////ืืงืืืช ืขืจืื ืืื ื ืืืืฉืืื ื-10 ื-100 ืฉื ืืฉืขื
if (rc == 1) {
leb_1 = ื ืชืื ืื / 3600.0;
}
if (rc == 2) {
leb_2 = ื ืชืื ืื / 3600.0;
}
if (rc == 3) {
leb_3 = ื ืชืื ืื / 3600.0;
}
if (rc == 4) {
leb_4 = ื ืชืื ืื / 3600.0;
}
}
}
r++;
k++; // ืจืง ืืื ื
//////// ืขืืืื ื ืชืื ืื ืขื ืืืืืจืืืช ืืกืืืืช
if (r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, GRAYD);
Serial.println("Lebedki I");
tft.setCursor(0, 41);
tft.println(leb_1);
Serial.println(leb_1);
tft.println(leb_2);
Serial.println(leb_2);
tft.println(leb_3);
Serial.println(leb_3);
tft.println(leb_4);
Serial.println(leb_4);
Serial.println(k);
r = 0;
}
////////ืืชืื ื ืชืื ืื ืืืืื ื-SD ืื 10 ืืงืืช.
if ((t.min % 10 == 0) && (t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////ืืฆืืจืช ืืืจืืืช ืืคืืจืื .csv
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////ืืชืื ืืงืืืฅ ืืคืื ืืช ืชืืฆืืืช ืชืืืื ืืืชืืื
myFile = SD.open(perv, FILE_WRITE); // ืื ืืื ืงืืืฅ ืืฉื "2.txt", ืืื ืืืืืฆืจ.
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, GREEN);
tft.println("SD OK");
Serial.println("SD OK");
delay(900); // ืขืืืื, ืืืจืช ืจืืฉื 13 ืงืจืืืืช ืืืืช ืขื ืฉืืืคื ืฉื ืื
ืืืจ} {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}ืชืืื ืืช ืืืืจืช ืชืืืื/* ืงืืืื ืืืืฉ ืฉื ืืืคื ืื ืจืืกืืื ื-UTF-8 ื-Windows-1251 */
ืืืจืืืช utf8rus(ืืงืืจ ืืืจืืืช)
{
int i,k;
ืืืจืช ืืืชืจ;
char unsigned n;
char m[2] = { '0', ' ' };
k = source.length(); i = 0;
while (i < k) {
n = ืืงืืจ[i]; i++;
if (n >= 0xC0) {
switch (n) {
ืืงืจื 0xD0: {
n = ืืงืืจ[i]; i++;
if (n == 0x81) { n = 0xA8; ืืฉืืืจ; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
ืืฉืืืจ;
}
ืืงืจื 0xD1: {
n = ืืงืืจ[i]; i++;
if (n == 0x91) { n = 0xB8; ืืฉืืืจ; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
ืืฉืืืจ;
}
}
}
m[0] = n; target = target + String(m);
}
ืืขื ืืืืจื;
}ืชืืื ืืช ืืืืจื ืฉื ืืชืืืื ืขืืืจ ืคืื ืงืืจืืื ืืืืฆืขืืช ืกืคืจืืืช Adafruit_GFX ืืืืงืืช ืืืืชื ืชืืงืื ืขื ืืชืืื ืืช ืืจืืฉืืช. ืืชื ืื ืฆืจืื ืืืืืืฃ ืืช ืืงืืืฅ glcdfont.c ื-Adafruit_GFX ืืืืคื ืืืจ.
ืืกืืืื, ืืืื ืฉืืืขืจืืช ืขืืื ืืฆืืคืืืช, ืืคื ืงื ืืืชืจ ืื ืืจ ืืช ืืื ืืืคืขืื ืฉื ืืฆืืื. ืืืจืืช ืฉืืื ืืืจืื ืขื ืืืืืช ืืื, ืืื ืชืืื ืืช ืืืืืืืช ืขื ืืขืืืื. ืืืืื ืืื ืืจืืฉืื ืื ืคืืขืืื ืืืจ ืืืชืจ ืืฉืืฉื ืืืืฉืื ืืฉืจืื ืืช ืืืืจืฃ.
ืืงืืจ: www.habr.com