Mfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea)

Anza kwenye tovuti hii ΠΏΠΎ ссылкС.
Chaguo rahisi zaidi kwa kupata habari juu ya kuwasha mwanzilishi iligeuka kuwa chaguo na optocoupler ya PC817. Mchoro wa mpangilioMfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea)Bodi zina nyaya tatu zinazofanana, kila kitu kinawekwa kwenye masanduku ya plastiki ya ABS, ukubwa wa 100x100 mm. Picha ya optocouplersMfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea) Wakati wa kushikamana na vifaa vya kuanzia na valves za semiconductor, sasa uvujaji wao unatosha kufungua PC817 na counter itasababisha uongo. Ili kuwatenga hali kama hiyo moja zaidi huongezwa kwa mfululizo kwa mzunguko wa LED ya optocoupler na LED ya dalili ya uendeshaji. Ili kufanya hivyo, jumper J1 inafunguliwa na LED1 ya ziada ya LED inauzwa ndani.
Sehemu ya kupokea inafanywa upande wa 1Mfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea)upande wa 2Mfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea)bodi ya maendeleo iliyounganishwa na ARDUINO MEGA 2560. Kwa hili, kiunganishi cha safu mbili hutumiwa mwishoni. Skrini iliyo na azimio la 240x400, iliyo na skrini ya kugusa inayopinga na kihisi joto, hutumiwa kama kifaa cha kuonyesha habari. HX8352B.Mfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea) Zaidi ya hayo, kiunganishi cha ICSP kwenye ubao wa skrini huondolewa na slot ndogo ya SD haitumiki. Ukweli ni kwamba tundu la "asili" la SD haliwezi kutumika kwa sababu ya migogoro kwenye basi ya SPI. Kwa kadi ya flash, kisoma kadi tofauti kilitumiwa, ambacho kilijumuisha utulivu wa 3,3V na chip ya buffer yenye majimbo matatu ya pato 74LVS125A. Hapa ndipo reki ilikuwa inaningoja. Bafa ya serikali tatu, lakini E01-ML01DP5 au kisoma kadi kilifanya kazi. Katika maoni ya maktaba, SdFat iliona onyo kuhusu kutopatana na vifaa vingine. Kiwango cha kubadilisha fedha kwenye TXS0108E kiliondolewa na kubadilishwa na jumpers, kwa sababu E01-ML01DP5 inastahimili ishara za 5V - haikusaidia. Kwa kutumia oscilloscope, upotezaji wa ishara uligunduliwa kwenye laini ya MISO wakati kisoma kadi kiliunganishwa. Baada ya uchunguzi wa makini, iligundua kuwa pembejeo za ishara za kuwezesha za njia za OE 4 za 74LVS125A ziliuzwa tu kwa waya wa kawaida na hakuwezi kuwa na mazungumzo ya hali yoyote ya tatu. Chip ya bafa ilitumika kama kigeuzi cha kiwango cha awali kutoka 5V hadi 3.3V kwa kutumia vipingamizi 3,3 KΞ© vilivyounganishwa katika mfululizo na laini za mawimbi. Isipokuwa kwa mstari wa MISO. Swichi yake ya chini ya pato labda ilivutia ishara kwenye kiwango cha chini. Baada ya kuamua kuwa ishara ya kuwezesha ya laini ya MISO ilikuwa pini 13, ilivunjwa kutoka kwa wimbo nakuuzwaMfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea)kati ya kifaa cha 9LVS74A CS chagua pini ya ingizo (125) na kipinga cha kusitisha. Sasa, ikiwa hakuna ufikiaji wa kadi ya kumbukumbu, buffer ya MISO imezimwa na haiingilii na uendeshaji wa kifaa kingine.Mchoro wa bodi ya maendeleoMfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea)Mpokeaji akifanya kaziMfumo wa Upataji wa Data unaojiendesha wa Ndani (inaendelea)DS3231 hutumia basi ya programu ya I2C (TWI) kuunganisha saa.
Programu ya Arduino IDE// MUHIMU: MAKTABA YA Adafruit_TFTLCD LAZIMA IWE MAALUMU
// IMEANDALIWA KWA AJILI YA NGAO YA TFT AU UBAO WA MLIPUKO.
// TAZAMA MAONI HUSIKA KATIKA Adafruit_TFTLCD.h KWA KUWEKA.
//na Timu ya Open-Smart na Timu ya Catalex
//[barua pepe inalindwa]
//Duka: dx.com
// open-smart.aliexpress.com/store/1199788
// Kazi ya Onyesho: Onyesha picha, wahusika
//Kitambulisho cha Arduino: 1.6.5
// Bodi: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo

// Ubao: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

#pamoja na // Maktaba ya michoro ya msingi
//#pamoja na // Maktaba maalum ya vifaa
#pamoja na
MCUFRIEND_kbv tft;
#pamoja na "SdFat.h" // Tumia maktaba ya SdFat
SdFat SD;
faili ya SdFile;
Faili myFile;
#fafanua SD_CS_PIN SS

#pamoja na // Unganisha maktaba kufanya kazi na basi ya SPI
#pamoja na // Unganisha faili ya mipangilio kutoka kwa maktaba ya RF24
#pamoja na // Unganisha maktaba kufanya kazi na nRF24L24+
redio ya RF24(47, 49);

#pamoja na

DS3231 rtc(27, 25);
Muda t;

uint16_t r = 6000;
uint32_t k = 0;

data tete ambayo haijasainiwa;
kuelea leb_1;
kuelea leb_2;
kuelea leb_3;
kuelea leb_4;

bomba la uint8_t;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//************************************************ ****************/ /
// Ikiwa unatumia bodi ya kuzuka ya OPEN-SMART TFT //
// Pendekeza uongeze mzunguko wa kubadilisha kiwango cha 5V-3.3V.
// Bila shaka unaweza kutumia toleo la OPEN-SMART UNO Nyeusi na swichi ya nguvu ya 5V/3.3V,
// unahitaji tu kubadili 3.3V.
// Pini za udhibiti za LCD zinaweza kupewa dijiti yoyote au
// pini za analogi...lakini tutatumia pini za analogi jinsi hii inavyoturuhusu
//β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”-|
// Kuzuka kwa TFT - Arduino UNO / Mega2560 / OPEN-SMART UNO Nyeusi
// GND - GND
// 3V3 - 3.3V
//CS - A3
// RS - A2
// WR - A1
// RD - A0
// RST - WEKA UPYA
// LED - GND
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7

// Peana majina yanayoweza kusomeka na binadamu kwa baadhi ya thamani za kawaida za rangi 16-bit:
#fafanua NYEUSI 0x0000
#fafanua BLUE 0x001F
#fafanua RED 0xF800
#fafanua KIJANI 0x07E0
#fafanua CYAN 0x07FF
#fafanua MAGENTA 0xF81F
#fafanua MANJANO 0xFFE0
#fafanua NYEUPE 0xFFFF
#fafanua KIJIVU 0x8C51
#fafanua GRAYD 0x39E7

// Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Ikiwa unatumia ngao, mistari yote ya udhibiti na data ni fasta, na
// tamko rahisi zaidi linaweza kutumika kwa hiari:
// Adafruit_TFTLCD tft;
kitambulisho cha uint16_t g_;

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

usanidi batili (utupu) {

rtc.anza();

// Ili kuweka wakati, futa mistari muhimu
// rtc.setDOW(6); // Siku ya wiki
// rtc.setTime(22, 04, 0); // Muda, katika muundo wa saa 24.
// rtc.setDate(4, 5, 2019); // Tarehe, Oktoba 29, 2018

Seri.begin (2000000);
//////// Uanzishaji wa skrini
tft.anza(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(kweli);
/////////////////// Pato la majina, vifaa vya ziada, jina la shirika
tft.fillScreen(NYEUSI);
tft.setTextColor(NYEUPE);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("WAENDELEZI & KUJENGA");
tft.setCursor(30, 20);
tft.print (utf8rus("Mjenzi V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("Turner I.I." ));
kuchelewa (2000);

redio.anza(); // Anzisha kazi nRF24L01+
radio.setChannel(120); // Bainisha njia ya kupokea data (kutoka 0 hadi 127)
radio.setDataRate(RF24_250KBPS); // Bainisha kiwango cha uhamisho wa data (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Bainisha nguvu ya kisambaza data (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe(1, 0xAABBCCDD11LL); // Fungua bomba 1 na kitambulisho cha transmita 1 0xAABBCCDD11, ili kupokea data
// Fungua bomba 2 na kitambulisho cha transmita 2xAABBCCDD0 ili kupokea data
radio.startListening(); // Washa mpokeaji, anza kusikiliza bomba wazi
// radio.stopListening();
//////// Pato la habari ya huduma
tft.fillScreen(NYEUSI);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////Anza kuanzisha kadi ya SD
Serial.println("Kadi ya SD ya Awali");
tft.println("Kadi ya SD ya Awali");
tft.setCursor(8, 10);
////////Kuanzisha kadi
ikiwa (!SD.anza(SD_CS_PIN)) {
Serial.println("awali imeshindwa!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(BLACK);
tft.println("Awali imeshindwa!");
kurudi;
}
tft.setTextColor(NYEUPE);
Serial.println("uanzishaji umefanywa");
tft.println("Uanzishaji umefanywa");
kuchelewa (2000);
//////// Wakati na tarehe ya kusoma na kuziweka kwa vigezo
t = rtc.getTime();
time_sec_prev = t.sec;
time_day_prev = t.tarehe;
//////// Toa tarehe kwa lazima ili usisubiri tarehe ibadilike ili kuonyesha
tft.setCursor(180, 0); // kuweka nafasi ya mshale
tft.fillRect(178, 0, 65, 7, KIJIVU); // kusafisha eneo la pato la wakati
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Pato jina la vitu vya kudhibiti
tft.setTextSize(2);
tft.setCursor(60, 25);
tft.println (utf8rus("Winches I");
//////// Kuunda faili ya logi na kutoa matokeo ya jaribio la uundaji
tft.setTextSize(1);
tft.setCursor(130, 10); // ikiwa faili ya logi 2.txt imeundwa, basi kuandika kwa faili itaendelea
ikiwa (SD.exists(perv)) {
//tft.setCursor(0, 90);
tft.println(perv);
Serial.println(perv);
} Mwingine {
myFile = SD.open(perv, FILE_WRITE); // ikiwa faili 2.txt haipo, itaundwa
myFile.close();
tft.println(perv);
Serial.println(perv);
}
}

kitanzi batili (batili) {
////////Kuangalia kuwepo kwa ombi la kutoa logi kwa kufuatilia bandari ya COM
ikiwa (Serial.available() > 0) {
ikiwa (1 == Serial.read());
//////// Na ikiwa "1" inakubaliwa, basi pato
Faili myFile = SD.open(perv);
// ikiwa faili inapatikana, iandikie:
ikiwa (myFile) {
wakati (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
mwingine {
Serial.println("hitilafu katika kufungua .txt");
}
}
///////// Wakati wa kusoma
t = rtc.getTime();
tft.setTextColor(NYEUPE);
////////Ikiwa wakati umebadilika, basi onyesha usomaji mpya wa saa
ikiwa ( time_sec_prev != t.sec) {
tft.setCursor(120, 0); // kuweka nafasi ya mshale
tft.fillRect(118, 0, 50, 7, KIJIVU); // kusafisha eneo la pato la wakati
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // usomaji wa saa ya pato
time_sec_prev = t.sec;
}
////////Ikiwa tarehe imebadilika, basi onyesha tarehe mpya
ikiwa ( time_day_prev != t.date) {
tft.setCursor(180, 0); // kuweka nafasi ya mshale
tft.fillRect(178, 0, 65, 7, KIJIVU); // wazi eneo la kuonyesha tarehe
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // onyesha usomaji wa tarehe
time_day_prev = t.tarehe;
}
////////Ikiwa mapokezi ya redio yanapatikana, basi
ikiwa (redio.inapatikana(&pipe)) {
/////////kuangalia ikiwa kihifadhi cha kupokea kimejaa,
radio.soma(&data, sizeof(data));
//////// ikiwa anwani ya transmita inayohitajika inapatikana, basi
ikiwa (bomba == 1) {
///////// tunasubiri mlolongo wa kusawazisha wa sufuri ili kuamua
// mwanzo wa kizuizi cha data
ikiwa (data == 0000) {
rc = 0;
} Mwingine {
rc++;
}
////////Kurekodi thamani za kaunta na kuzihesabu katika 10 na 100 za saa
ikiwa (rc == 1) {
leb_1 = data / 3600.0;
}

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

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

ikiwa (rc == 4) {
leb_4 = data / 3600.0;
}
}
}
r++;
k++; // tu counter
//////// Sasisho la data na upimaji fulani
ikiwa ( 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;
}
//////// Andika data kwenye logi kwenye SD kila baada ya dakika 10.
ikiwa ((t.min % 10 == 0) && ( t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(BLACK);
////////Kuunda mfuatano katika umbizo la .csv
String dataString = String (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) + ", " + (leb_1) + ", " + (leb_2)
+ ", " + (leb_3) + ", " + (leb_4) + ", ";
//////// Andika kwa faili na toa matokeo ya mchakato wa kuandika
myFile = SD.open(perv, FILE_WRITE); // ikiwa hakuna faili inayoitwa "2.txt", itaundwa.
ikiwa (myFile) {
myFile.println(dataString);
myFile.close();
tft.fillRect(198, 8, 42, 10, KIJANI);
tft.println("SD OK");
Serial.println("SD OK");
kuchelewa (900); // kuchelewesha, vinginevyo hurekodi usomaji 13 sawa hadi sekunde ipite
} Mwingine {
tft.fillRect(198, 8, 42, 10, RED);
tft.println("SD ERR");
Serial.println("SD ERR");
}
}
}Mpango wa kubadilisha wahusika/* Rekodi fonti za Kirusi kutoka UTF-8 hadi Windows-1251 */

Kamba utf8rus(Chanzo cha kamba)
{
int i,k;
Lengo la kamba;
char isiyotiwa sahihi n;
char m[2] = { '0', ' ' };

k = chanzo.urefu (); mimi = 0;

wakati (i <k) {
n = chanzo[i]; i++;

ikiwa (n >= 0xC0) {
kubadili (n) {
kesi 0xD0: {
n = chanzo[i]; i++;
ikiwa (n == 0x81) {n = 0xA8; mapumziko; }
ikiwa (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
kuvunja;
}
kesi 0xD1: {
n = chanzo[i]; i++;
ikiwa (n == 0x91) {n = 0xB8; mapumziko; }
ikiwa (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
kuvunja;
}
}
}
m[0] = n; lengo = lengo + Kamba (m);
}
lengo la kurudi;
}Mpango wa kubadilisha msimbo wa herufi kwa pato la Kicyrillic kwa kutumia maktaba ya Adafruit_GFX huwekwa kwenye folda sawa na programu kuu. Pia unahitaji kubadilisha faili ya glcdfont.c katika Adafruit_GFX na fonti tofauti. Hapa maktaba na uingizwaji unaohitajika. Maelezo zaidi kuhusu Urassification yanaweza kupatikana kwa urahisi kwenye mtandao.
Kwa muhtasari, nitasema kwamba mfumo uliishi kulingana na matarajio, imekuwa rahisi kufuatilia wakati wa uendeshaji wa vifaa. Ingawa kila kitu kimekusanywa kwenye mbao za mkate, hakuna malalamiko ya haraka kuhusu kazi hiyo. Vipengele vya kwanza vimekuwa vikifanya kazi kwa zaidi ya miezi sita na vimenusurika wakati wa baridi. Muundo wa hivi karibuni Imekuwa ikifanya kazi kwa vitengo 9 vinavyodhibitiwa tangu Machi 5 na wakati wa kufanya kazi unasajiliwa rasmi kwa kuitumia.

Chanzo: mapenzi.com

Kuongeza maoni