Staðbundið sjálfstætt gagnaöflunarkerfi (framhald)

Byrjaðu á þessari síðu по ссылке.
Þægilegasti kosturinn til að sækja upplýsingar um að kveikja á ræsirnum reyndist vera valkosturinn með PC817 optocoupler. SkýringarmyndStaðbundið sjálfstætt gagnaöflunarkerfi (framhald)Í brettunum eru þrjár eins hringrásir, allt er sett í ABS plastkassa, stærð 100x100 mm. Mynd af optocouplersStaðbundið sjálfstætt gagnaöflunarkerfi (framhald) Þegar tengt er við ræsitæki með hálfleiðaralokum nægir lekastraumur þeirra til að opna PC817 og teljarinn ræsir ranglega. Að útiloka slíkt ástand einum til viðbótar er bætt við í röð við hringrás ljósdíóðunnar optocoupler og aðgerðaljósdíóðan. Til að gera þetta er jumper J1 opnaður og viðbótar LED LED1 er lóðuð inn.
Móttökuhlutinn er gerður á hlið 1Staðbundið sjálfstætt gagnaöflunarkerfi (framhald)hlið 2Staðbundið sjálfstætt gagnaöflunarkerfi (framhald)þróunarborð sem er tengt við ARDUINO MEGA 2560. Til þess er tvíraða tengi notað í endann. Skjár með 240x400 upplausn, með viðnámssnertiskjá og hitaskynjara, er notaður sem upplýsingaskjábúnaður. HX8352B.Staðbundið sjálfstætt gagnaöflunarkerfi (framhald) Þar að auki er tengið við ICSP á skjáborðinu fjarlægt og micro SD raufin er ekki notuð. Staðreyndin er sú að ekki er hægt að nota „native“ SD fals vegna átaka á SPI strætó. Fyrir flash-kortið var notaður sérstakt kortalesari sem innihélt 3,3V sveiflujöfnun og biðminni með þremur úttaksstöðu 74LVS125A. Þetta er þar sem hrífan beið mín. Þriggja staða biðminni, en annað hvort E01-ML01DP5 eða kortalesarinn virkaði. Í athugasemdum bókasafnsins sá SdFat viðvörun um ósamrýmanleika við önnur tæki. Stigbreytirinn á TXS0108E var fjarlægður og skipt út fyrir jumpers, vegna þess E01-ML01DP5 þolir 5V merki - það hjálpaði ekki. Með því að nota sveiflusjá fannst merkjatap á MISO línunni þegar kortalesari var tengdur. Við nákvæma athugun kom í ljós að inntak virkjunarmerkja OE 4 rásanna á 74LVS125A var einfaldlega lóðað við sameiginlegan vír og ekki var hægt að tala um neitt þriðja ástand. Stuðpúðaflísinn var notaður sem frumstæður stigbreytir frá 5V til 3.3V með því að nota 3,3 KΩ viðnám tengd í röð við merkjalínurnar. Fyrir utan MISO línuna. Úttaksbotnrofi hans dró líklega merki til jarðhæðar. Eftir að hafa komist að því að virkjunarmerki MISO línunnar væri pinna 13, var það rifið af brautinni oglóðaðurStaðbundið sjálfstætt gagnaöflunarkerfi (framhald)á milli 9LVS74A CS tækisins velurðu inntakspinna (125) og lúkningarviðnám. Nú, ef það er enginn aðgangur að minniskortinu, er MISO biðminni óvirkt og truflar ekki virkni annars tækis.Skýringarmynd þróunartöfluStaðbundið sjálfstætt gagnaöflunarkerfi (framhald)Móttökutæki í gangiStaðbundið sjálfstætt gagnaöflunarkerfi (framhald)DS3231 notar hugbúnað I2C strætó (TWI) til að tengja klukkuna.
Arduino IDE forrit// MIKILVÆGT: Adafruit_TFTLCD BÓKASAFN VERÐUR að vera sérstaklega
// SKILDIR FYRIR ANNAÐHvort TFT SKJÖLDURINN EÐA BRÚTABLAÐIÐ.
// SJÁ VIÐKOMANDI ATHUGIÐ Í Adafruit_TFTLCD.h FYRIR UPPSETNINGU.
//af Open-Smart Team og Catalex Team
//[netvarið]
//Geymsla: dx.com
// open-smart.aliexpress.com/store/1199788
//Demo Virka: Sýna grafík, stafi
//Arduino IDE: 1.6.5
// Stjórn: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

// Stjórn: 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

#meðfylgja // Kjarna grafíksafn
//#innihalda // Vélbúnaðarsérstakt bókasafn
#meðfylgja
MCUFRIEND_kbv tft;
#include "SdFat.h" // Notaðu SdFat bókasafnið
SdFat SD;
SdFile skrá;
Skrá myFile;
#skilgreina SD_CS_PIN SS

#innihalda // Tengdu bókasafnið til að vinna með SPI strætó
#innihalda // Tengdu stillingaskrána úr RF24 bókasafninu
#innihalda // Tengdu bókasafnið til að vinna með nRF24L24+
RF24 útvarp (47, 49);

#innihalda

DS3231 rtc(27, 25);
Tími t;

uint16_t r = 6000;
uint32_t k = 0;

rokgjörn óundirrituð löng gögn;
fljóta leb_1;
fljóta leb_2;
fljóta leb_3;
fljóta leb_4;

uint8_t pípa;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//********************************************* ***************/ /
// Ef þú notar OPEN-SMART TFT brotspjald //
// Mæli með að bæta við 5V-3.3V stigumbreytirás.
// Auðvitað er hægt að nota OPEN-SMART UNO Black útgáfu með 5V/3.3V aflrofa,
// þú þarft bara að skipta yfir í 3.3V.
// Hægt er að tengja stýripinna fyrir LCD-skjáinn á hvaða stafræna eða
// analog pinna...en við munum nota hliðrænu pinnana þar sem þetta gerir okkur kleift
//——————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO Svartur
// 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

// Úthlutaðu mönnum læsilegum nöfnum nokkrum algengum 16-bita litagildum:
#define SVART 0x0000
#define BLUE 0x001F
#define RED 0xF800
#skilgreina GRÆNT 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#skilgreina GUL 0xFFE0
#define WHITE 0xFFFF
#define GREY 0x8C51
#define GREYD 0x39E7

//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Ef þú notar skjöldinn eru allar stjórnunar- og gagnalínur fastar, og
// einfaldari yfirlýsingu er mögulega hægt að nota:
// Adafruit_TFTLCD tft;
uint16_t g_auðkenni;

String dataString;
//String numfileMonth = "1.txt";
bleikju perv [] = {"2.txt"};
//String *numfileMonth="1.txt" (stærð (numfileMonth));
////////////////////////////////////////////////// ///////////////////

ógilt uppsetning (ógilt) {

rtc.begin();

// Til að stilla tímann skaltu afskrifa nauðsynlegar línur
// rtc.setDOW(6); // Dagur vikunnar
// rtc.setTime(22, 04, 0); // Tími, í 24 tíma sniði.
// rtc.setDate(4, 5, 2019); // Dagsetning 29. október 2018

Serial.begin (2000000);
//////// Uppstilling skjás
tft.begin(0x65);
tft.endurstilla();
tft.setRotation(0);
tft.cp437(satt);
//////////////////framleiðsla nafna, fylgihluti búnaðar, heiti fyrirtækis
tft.fillScreen(SVART);
tft.setTextColor(HVÍTUR);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("ÞRÓNARAR & BYGGJA");
tft.setCursor(30, 20);
tft.print (utf8rus("Constructor V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
delay(2000);

radio.begin(); // Hefja vinnu nRF24L01+
radio.setChannel(120); // Tilgreindu gagnamóttökurásina (frá 0 til 127)
radio.setDataRate(RF24_250KBPS); // Tilgreindu gagnaflutningshraðann (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Tilgreindu afl sendisins (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Opnaðu 1 pípu með auðkenni 1 sendi 0xAABBCCDD11, til að taka á móti gögnum
// Opnaðu pípu 2 með auðkenni sendis 2xAABBCCDD0 til að taka á móti gögnum
radio.startHlusta(); // Kveiktu á viðtækinu, byrjaðu að hlusta á opnar pípur
// radio.stopHlustun();
////////Framleiðsla þjónustuupplýsinga
tft.fillScreen(SVART);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Byrjaðu að frumstilla SD-kortið
Serial.println("Upphaflegt SD kort");
tft.println("Upphaflegt SD kort");
tft.setCursor(8, 10);
////////Fjarlægja kortið
if (!SD.begin(SD_CS_PIN)) {
Serial.println("upphaflega mistókst!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(SVART);
tft.println("Upphaf mistókst!");
aftur;
}
tft.setTextColor(HVÍTUR);
Serial.println("frumstilling lokið");
tft.println("Frumstilling lokið");
delay(2000);
////////Lesa tíma og dagsetningu og úthluta þeim breytum
t = rtc.getTime();
time_sec_prev = t.sek;
time_day_prev = t.date;
////////Valdu út dagsetninguna til að bíða ekki eftir að dagsetningin breytist til birtingar
tft.setCursor(180, 0); // stillir bendilinn
tft.fillRect(178, 0, 65, 7, GRÁR); // hreinsar tímaúttakssvæðið
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Gefðu út heiti stýrihluta
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Vinjur I"));
////////Búa til annálaskrá og gefa út niðurstöðu sköpunartilraunarinnar
tft.setTextSize(1);
tft.setCursor(130, 10); // ef log skrá 2.txt er búin til, þá mun ritun í skrána halda áfram
if (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Else {
myFile = SD.open(perv, FILE_WRITE); // ef skrá 2.txt er ekki til verður hún búin til
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

ógild lykkja (ógilt) {
////////Að athuga hvort beiðni sé til um að senda út annál til COM tengi skjásins
if (Serial.available() > 0) {
if (1 == Serial.read());
////////Og ef “1” er samþykkt, þá úttakið
File myFile = SD.open(perv);
// ef skráin er tiltæk skaltu skrifa á hana:
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
Annar {
Serial.println("villa við að opna .txt");
}
}
////////Lestrartími
t = rtc.getTime();
tft.setTextColor(HVÍTUR);
////////Ef tíminn hefur breyst skaltu sýna nýju klukkuna
if (time_sec_prev != t.sec) {
tft.setCursor(120, 0); // stillir bendilinn
tft.fillRect(118, 0, 50, 7, GRÁR); // hreinsar tímaúttakssvæðið
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // gefa út klukkuaflestur
time_sec_prev = t.sek;
}
////////Ef dagsetningin hefur breyst skaltu sýna nýju dagsetninguna
if (time_day_prev != t.date) {
tft.setCursor(180, 0); // stillir bendilinn
tft.fillRect(178, 0, 65, 7, GRÁR); // hreinsa dagsetningu sýna svæði
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // birta dagsetningarlestur
time_day_prev = t.date;
}
////////Ef útvarpsmóttaka er tiltæk, þá
if (radio.available(&pipe)) {
////////athugar hvort móttökubuffið sé fullt,
radio.read(&data, sizeof(data));
////////ef nauðsynlegt vistfang sendis er tiltækt, þá
ef (pípa == 1) {
////////bíða eftir samstillingaröð af núllum til að ákvarða
//upphaf gagnablokkarinnar
if (gögn == 0000) {
rc = 0;
} Else {
rc++;
}
////////Skrá teljaragildi og reikna þau í 10. og 100. úr klukkustund
ef (rc == 1) {
leb_1 = gögn / 3600.0;
}

ef (rc == 2) {
leb_2 = gögn / 3600.0;
}

ef (rc == 3) {
leb_3 = gögn / 3600.0;
}

ef (rc == 4) {
leb_4 = gögn / 3600.0;
}
}
}
r++;
k++; // bara teljari
//////// Gagnauppfærsla með ákveðinni tíðni
ef (r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, GRÁR);
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;
}
////////Skrifaðu gögn í skrána á SD á 10 mínútna fresti.
if ((t.mín. % 10 == 0) && (t.sek == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(SVART);
////////Búa til streng á .csv sniði
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
////////Skrifaðu í skrá og sendu út niðurstöður ritunarferlisins
myFile = SD.open(perv, FILE_WRITE); // ef það er engin skrá sem heitir “2.txt” verður hún búin til.
if (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, GRÆNT);
tft.println("SD OK");
Serial.println("SD OK");
delay(900); // seinkun, skráir annars 13 eins lestur þar til sekúnda er liðin
} Else {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Forrit til að breyta persónum/* Endurkóðu rússneskt letur frá UTF-8 í Windows-1251 */

Strengur utf8rus(Strengjauppspretta)
{
int i,k;
Strengjamarkmið;
óundirrituð bleikja n;
bleikja m[2] = { '0', ' ' };

k = source.length(); i = 0;

á meðan (i < k) {
n = heimild[i]; i++;

if (n >= 0xC0) {
skipta (n) {
tilfelli 0xD0: {
n = heimild[i]; i++;
ef (n == 0x81) {n = 0xA8; brjóta; }
ef (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
brjóta;
}
tilfelli 0xD1: {
n = heimild[i]; i++;
ef (n == 0x91) {n = 0xB8; brjóta; }
ef (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
brjóta;
}
}
}
m[0] = n; target = target + Strengur(m);
}
skilamarkmið;
}Stafnaumskráningarforritið fyrir kýrilískt úttak með því að nota Adafruit_GFX bókasafnið er sett í sömu möppu og aðalforritið. Þú þarft líka að skipta út glcdfont.c skránni í Adafruit_GFX fyrir annað letur. Hér bókasafn með nauðsynlegum afleysingar. Frekari upplýsingar um Russification má auðveldlega finna á netinu.
Til að draga saman mun ég segja að kerfið hafi staðið undir væntingum, það er orðið auðveldara að fylgjast með notkunartíma búnaðarins. Þrátt fyrir að allt sé sett saman á brauðplötur er ekki kvartað strax yfir verkinu. Fyrstu þættirnir hafa virkað í meira en sex mánuði og lifað af veturinn. Nýjasta hönnun Það hefur verið í gangi fyrir 9 stýrðar einingar síðan 5. mars og er verið að skrá rekstrartíma formlega með því að nota það.

Heimild: www.habr.com

Bæta við athugasemd