Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)

Начало Π½Π° Π΄Π°Π½Π½ΠΎΠΌ сайтС ΠΏΠΎ ссылкС.
Π‘Π°ΠΌΡ‹ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для использования Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΡΡŠΡ‘ΠΌΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ пускатСля оказался Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с ΠΎΠΏΡ‚ΠΎΠΏΠ°Ρ€ΠΎΠΉ PC817. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΡ…Π΅ΠΌΠ°Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)ΠŸΠ»Π°Ρ‚Ρ‹ содСрТат ΠΏΠΎ Ρ‚Ρ€ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… схСмы, всё ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ ΠΈΠ· ABS пластика, Ρ€Π°Π·ΠΌΠ΅Ρ€ 100Ρ…100 ΠΌΠΌ. Π€ΠΎΡ‚ΠΎ ΠΎΠΏΡ‚ΠΎΠΏΠ°Ρ€Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅) ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ пусковым Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°ΠΌ с ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠΎΠ²Ρ‹ΠΌΠΈ вСнтилями ΠΈΡ… Ρ‚ΠΎΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ достаточСн для открытия Π Π‘817 ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΆΠ½ΠΎΠ΅ срабатываниС счётчика. Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΎΠΉ ситуации ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² Ρ†Π΅ΠΏΡŒ свСтодиода ΠΎΠΏΡ‚ΠΎΠΏΠ°Ρ€Ρ‹ ΠΈ свСтодиода ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ добавляСтся Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½. Для этого размыкаСтся ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠ° J1 ΠΈ впаиваСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ свСтодиод LED1.
ΠŸΡ€ΠΈΡ‘ΠΌΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π° сторона 1Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)сторона 2Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)ΠΌΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΉ ΠΊ ARDUINO MEGA 2560. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ двухрядный Ρ€Π°Π·ΡŠΡ‘ΠΌ Π½Π° Ρ‚ΠΎΡ€Ρ†Π΅. Π’ качСствС устройства отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ рСзистивный Ρ‚Π°Ρ‡ ΠΈ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ экран с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ 240Ρ…400 HX8352B.Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅) ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ Ρ€Π°Π·ΡŠΡ‘ΠΌ ΠΊ ICSP Π½Π° ΠΏΠ»Π°Ρ‚Π΅ экрана Π΄Π΅ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Π½Π΅Π·Π΄ΠΎ для ΠΌΠΈΠΊΡ€ΠΎ- SD. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Β«Ρ€ΠΎΠ΄Π½ΠΎΠ΅Β» Π³Π½Π΅Π·Π΄ΠΎ SD нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π½Π° шинС SPI. Для Ρ„Π»Π΅Ρˆ- ΠΊΠ°Ρ€Ρ‚Ρ‹ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ€Π΄Ρ€ΠΈΠ΄Π΅Ρ€ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π² составС стабилизатор 3,3Π’ ΠΈ Π±ΡƒΡ„Π΅Ρ€Π½ΡƒΡŽ микросхСму с трСмя состояниями Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ² 74LVS125A. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΆΠ΄Π°Π»ΠΈ мСня Π³Ρ€Π°Π±Π»ΠΈ. Π‘ΡƒΡ„Π΅Ρ€ с трСмя состояниями, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈΠ»ΠΈ E01-ML01DP5 ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Π΄Ρ€ΠΈΠ΄Π΅Ρ€. Π’ коммСнтариях Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SdFat разглядСл ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ нСсовмСстимости с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ устройствами. Π‘Ρ‹Π» ΡƒΠ΄Π°Π»Ρ‘Π½ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π½Π° TXS0108E ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‘Π½ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠ°ΠΌΠΈ, Ρ‚.ΠΊ. E01-ML01DP5 Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π΅Π½ ΠΊ 5Π’ сигналам- Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ осциллографа выявлСно ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ сигнала Π½Π° Π»ΠΈΠ½ΠΈΠΈ MISO ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ°Ρ€Π΄Ρ€ΠΈΠ΄Π΅Ρ€Π°. ΠŸΡ€ΠΈ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ рассмотрСнии Π±Ρ‹Π»ΠΎ установлСно, Ρ‡Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΡ… сигналов ΠžΠ• 4-Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² 74LVS125A Π±Ρ‹Π»ΠΈ просто припаяны ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Ρƒ ΠΈ Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ состоянии Ρ€Π΅Ρ‡ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ. БуфСрная микросхСма использовалась ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΎΡ‚ 5Π’ ΠΊ 3.3Π’ с использованиСм рСзисторов 3,3 КОм Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ с ΡΠΈΠ³Π½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ линиями. ΠšΡ€ΠΎΠΌΠ΅ Π»ΠΈΠ½ΠΈΠΈ MISO. Π•Ρ‘ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ вСроятно притягивал сигналы ΠΊ ΡƒΡ€ΠΎΠ²Π½ΡŽ Β«Π·Π΅ΠΌΠ»ΠΈΒ». ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ сигнал Π»ΠΈΠ½ΠΈΠΈ MISO- это Π²Ρ‹Π²ΠΎΠ΄ 13, ΠΎΠ½ Π±Ρ‹Π» ΠΎΡ‚ΠΎΡ€Π²Π°Π½ ΠΎΡ‚ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ ΠΈΠΏΡ€ΠΈΠΏΠ°ΡΠ½Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π° (9) 74LVS125A Π²Ρ‹Π±ΠΎΡ€Π° устройства CS ΠΈ рСзистором согласования. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ссли Π½Π΅Ρ‚ обращСния ΠΊ ΠΊΠ°Ρ€Ρ‚Π΅ памяти, MISO- Π±ΡƒΡ„Π΅Ρ€ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ устройства.Π‘Ρ…Π΅ΠΌΠ° ΠΌΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ‹Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)ΠŸΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ Π² Ρ€Π°Π±ΠΎΡ‚Π΅Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ автономная систСма сбора Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ часов Π½Π° DS3231 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ программная шина I2C (TWI).
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Arduino IDE// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
//by Open-Smart Team and Catalex Team
//[email protected]
//Store: dx.com
// open-smart.aliexpress.com/store/1199788
//Demo Function: Display graphics, characters
//Arduino IDE: 1.6.5
// Board: Arduino UNO R3, Arduino Mega2560,Arduino Leonardo

// Board:OPEN-SMART UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2INCH TFT:
// www.aliexpress.com/store/product/3-2-TFT-LCD-Display-module-Touch-Screen-Shield-board-onboard-temperature-sensor-w-Touch-Pen/1199788_32755473754.html?spm=2114.12010615.0.0.bXDdc3
//OPEN-SMART UNO R3 5V / 3.3V:
// www.aliexpress.com/store/product/OPEN-SMART-5V-3-3V-Compatible-UNO-R3-CH340G-ATMEGA328P-Development-Board-with-USB-Cable-for/1199788_32758607490.html?spm=2114.12010615.0.0.ckMTaN

#include <Adafruit_GFX.h> // Core graphics library
//#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include Β«SdFat.hΒ» // Use the SdFat library
SdFat SD;
SdFile file;
File myFile;
#define SD_CS_PIN SS

#include <SPI.h> // ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с шиной SPI
#include <nRF24L01.h> // ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» настроСк ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ RF24
#include <RF24.h> // ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с nRF24L01+
RF24 radio(47, 49);

#include <DS3231.h>

DS3231 rtc(27, 25);
Time t;

uint16_t r = 6000;
uint32_t k = 0;

volatile unsigned long data;
float leb_1;
float leb_2;
float leb_3;
float leb_4;

uint8_t pipe;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//***********************************************//
// If you use OPEN-SMART TFT breakout board //
// Reconmmend you to add 5V-3.3V level converting circuit.
// Of course you can use OPEN-SMART UNO Black version with 5V/3.3V power switch,
// you just need switch to 3.3V.
// The control pins for the LCD can be assigned to any digital or
// analog pins…but we’ll use the analog pins as this allows us to
//—————————————-|
// TFT Breakout β€” Arduino UNO / Mega2560 / OPEN-SMART UNO Black
// GND β€” GND
// 3V3 β€” 3.3V
// CS β€” A3
// RS β€” A2
// WR β€” A1
// RD β€” A0
// RST β€” RESET
// LED β€” GND
// DB0 β€” 8
// DB1 β€” 9
// DB2 β€” 10
// DB3 β€” 11
// DB4 β€” 4
// DB5 β€” 13
// DB6 β€” 6
// DB7 β€” 7

// Assign human-readable names to some common 16-bit color values:
#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 GRAY 0x8C51
#define GRAYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;
uint16_t g_identifier;

String dataString;
//String numfileMonth =Β«1.txtΒ»;
char perv [] = {Β«2.txtΒ»};
//String *numfileMonth=Β«1.txtΒ» (sizeof (numfileMonth));
///////////////////////////////////////////////////////////////////

void setup(void) {

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(Β«ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π’.Π’.Β» ));
tft.setCursor (40, 40);
tft.print (utf8rus(Β«Π’ΠΎΠΊΠ°Ρ€ΡŒ И.И.Β» ));
delay (2000);

radio.begin(); // Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ nRF24L01+
radio.setChannel(120); // Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°Π½Π°Π» ΠΏΡ€ΠΈΡ‘ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΡ‚ 0 Π΄ΠΎ 127)
radio.setDataRate (RF24_250KBPS); // Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS β€” 1ΠœΠ±ΠΈΡ‚/сСк
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); // ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ 1 Ρ‚Ρ€ΡƒΠ±Ρƒ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ 1 ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° 0xAABBCCDD11, для ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…
// ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ 2 Ρ‚Ρ€ΡƒΠ±Ρƒ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ 2 ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° 0xAABBCCDD22, для ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…
radio.startListening (); // Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ, Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ±Ρ‹
// radio.stopListening ();
////////Π’Ρ‹Π²ΠΎΠ΄ слуТСбной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ
tft.fillScreen(BLACK);
tft.setCursor (8, 0);
tft.setTextSize(1);
////////Начало ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ SD ΠΊΠ°Ρ€Ρ‚Ρ‹
Serial.println(Β«Initial SD cardΒ»);
tft.println(Β«Initial SD cardΒ»);
tft.setCursor (8, 10);
////////Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠ°Ρ€Ρ‚Ρ‹
if (!SD.begin(SD_CS_PIN)) {
Serial.println(Β«initial failed!Β»);
tft.fillRect ( 8, 10, 85, 7, RED);
tft.setTextColor(BLACK);
tft.println(Β«Initial failed!Β»);
return;
}
tft.setTextColor(WHITE);
Serial.println(Β«initialization doneΒ»);
tft.println(Β«Initialization doneΒ»);
delay (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);
} else {
myFile = SD.open(perv, FILE_WRITE); // Ссли Ρ„Π°ΠΉΠ»Π° 2.txt Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ создан
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

void loop(void) {
////////ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сущСствования запроса Π²Ρ‹Π²ΠΎΠ΄Π° Π»ΠΎΠ³Π° Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ БОМ- ΠΏΠΎΡ€Ρ‚Π°
if (Serial.available() > 0) {
if (1 == Serial.read());
////////И Ссли принята Β«1Β»- Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄
File myFile = SD.open(perv);
// if the file is available, write to it:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println(Β«error opening .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 ( data == 0000 ) {
rc = 0;
} else {
rc ++;
}
////////Π—Π°ΠΏΠΈΡΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ счётчиков ΠΈ расчёт ΠΈΡ… Π² 10 ΠΈ 100-Ρ… долях часа
if ( rc == 1 ) {
leb_1 = data / 3600.0;
}

if ( rc == 2 ) {
leb_2 = data / 3600.0;
}

if ( rc == 3 ) {
leb_3 = data / 3600.0;
}

if ( rc == 4 ) {
leb_4 = data / 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 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ, ΠΏΠΎΠΊΠ° сСкунда Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚
} else {
tft.fillRect ( 198, 8, 42, 10, RED);
tft.println(Β«SD ERRΒ»);
Serial.println(Β«SD ERRΒ»);
}
}
}ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ символов/* Recode russian fonts from UTF-8 to Windows-1251 */

String utf8rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { ‘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;//0x2F
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ символов для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Adafruit_GFX помСщаСтся Π² ΠΎΠ΄Π½Ρƒ ΠΏΠ°ΠΏΠΊΡƒ с основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Π•Ρ‰Π΅ Π½Π°Π΄ΠΎ Π² Adafruit_GFX Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» glcdfont.с с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ. Π—Π΄Π΅ΡΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ русификации Π»Π΅Π³ΠΊΠΎ ищСтся Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.
Подводя ΠΈΡ‚ΠΎΠ³ скаТу Ρ‡Ρ‚ΠΎ систСма ΠΎΠΏΡ€Π°Π²Π΄Π°Π»Π° Π½Π°Π΄Π΅ΠΆΠ΄Ρ‹, стало ΠΏΡ€ΠΎΡ‰Π΅ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ оборудования. Π₯ΠΎΡ‚ΡŒ всё собрано Π½Π° ΠΌΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Π°Ρ…, ΠΈ Π² срочном порядкС Π½Π°Ρ€Π΅ΠΊΠ°Π½ΠΈΠΉ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π΅Ρ‚. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ элСмСнты Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»ΡƒΠ³ΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ»ΠΈ Π·ΠΈΠΌΡƒ. ПослСдняя конструкция Π½Π° 9 ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с 5 ΠΌΠ°Ρ€Ρ‚Π° ΠΈ ΠΏΠΎ Π½Π΅ΠΉ ΠΈΠ΄Π΅Ρ‚ рСгистрация Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡƒΠΆΠ΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ