Tsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba)

Fara akan wannan rukunin yanar gizon mahada.
Zaɓin mafi dacewa don dawo da bayanai game da kunna mai farawa ya zama zaɓi tare da PC817 optocoupler. Tsarin tsariTsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba)Allunan sun ƙunshi da'irori iri ɗaya guda uku, duk abin da aka sanya a cikin akwatunan filastik ABS, girman 100x100 mm. Hoton na'urorin daukar hotoTsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba) Lokacin da aka haɗa su da na'urori masu farawa tare da bawul ɗin semiconductor, ɗigon ruwan su ya isa ya buɗe PC817 kuma na'urar zata fara haifar da ƙarya. Don ware irin wannan yanayin Ana ƙara ƙarin guda ɗaya a jere zuwa kewaye na LED na optocoupler da LED nunin aiki. Don yin wannan, an buɗe jumper J1 kuma ana siyar da ƙarin LED LED1 a ciki.
Ana yin ɓangaren karɓa akan gefe 1Tsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba)gefe 2Tsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba)allon ci gaba da aka haɗa zuwa ARDUINO MEGA 2560. Don wannan, ana amfani da haɗin layi biyu a ƙarshen. Ana amfani da allo mai ƙudurin 240x400, yana da allon taɓawa mai tsayayya da firikwensin zafin jiki, azaman na'urar nunin bayanai. HX8352.Tsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba) Haka kuma, an cire mai haɗawa zuwa ICSP akan allon allo kuma ba a amfani da ramin micro SD. Gaskiyar ita ce, ba za a iya amfani da soket ɗin SD na "ƙasa" ba saboda rikici akan bas ɗin SPI. Don katin filasha, an yi amfani da mai karanta katin daban, wanda ya haɗa da 3,3V stabilizer da guntu buffer tare da jihohi uku na fitarwa 74LVS125A. Anan rake yake jirana. Buffer na jihohi uku, amma ko dai E01-ML01DP5 ko mai karanta katin yayi aiki. A cikin sharhin ɗakin karatu, SdFat ya ga gargaɗi game da rashin jituwa da wasu na'urori. An cire mai sauya matakin akan TXS0108E kuma an maye gurbinsa da masu tsalle, saboda E01-ML01DP5 yana jure wa siginar 5V - bai taimaka ba. Yin amfani da oscilloscope, an gano asarar sigina akan layin MISO lokacin da aka haɗa mai karanta katin. Bayan an yi nazari a hankali, an gano cewa abubuwan da ke ba da damar siginar tashoshi na OE 4 na 74LVS125A an sayar da su ne kawai zuwa waya gama gari kuma ba za a iya yin magana game da kowace jiha ta uku ba. An yi amfani da guntun buffer azaman mai canza matakin farko daga 5V zuwa 3.3V ta amfani da masu tsayayyar 3,3 KΩ da aka haɗa cikin jeri tare da layin sigina. Sai dai layin MISO. Fitowar sa ta ƙasa mai yiwuwa ya jawo sigina zuwa matakin ƙasa. Bayan an ƙaddara cewa siginar kunna layin MISO shine fil 13, an cire shi daga waƙar kumasaidaTsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba)tsakanin na'urar 9LVS74A CS zaþi fil shigar (125) da kuma tsayayyen resistor. Yanzu, idan babu damar yin amfani da katin ƙwaƙwalwar ajiya, MISO buffer yana kashe kuma baya tsoma baki tare da aikin wata na'ura.zanen allon ci gabaTsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba)Mai karɓa yana aikiTsarin Sayen Bayanai Mai Zaman Kanta na Gida (ci gaba)DS3231 yana amfani da bas ɗin I2C software (TWI) don haɗa agogo.
Shirin Arduino IDE// MUHIMMI: Adafruit_TFTLCD LIBRARY DOLE YA YI MUSAMMAN
// AKA SANTA DON KOWANE GARKUWAN TFT KO HUKUNCIN KARYA.
// DUBA MASU SHARHI A ADAFruit_TFTLCD.h DON SATA.
// ta Buɗe-Smart Team da Catalex Team
//[email kariya]
// Store: dx.com
// bude-smart.aliexpress.com/store/1199788
// Ayyukan Demo: Nuni zane-zane, haruffa
//Arduino IDE: 1.6.5
// Hukumar: 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
// BUDE-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

#hada da // Core graphics library
//#hade // takamaiman ɗakin karatu na Hardware
#hada da
MCUFRIEND_kbv tft;
#hade "SdFat.h" // Yi amfani da ɗakin karatu na SdFat
SDFat SD;
SdFile fayil;
Fayil myFile;
# ayyana SD_CS_PIN SS

#haɗa // Haɗa ɗakin karatu don aiki tare da bas ɗin SPI
#haɗa // Haɗa fayil ɗin saiti daga ɗakin karatu na RF24
#hade // Haɗa ɗakin karatu don aiki tare da nRF24L24+
RF24 rediyo (47, 49);

#hada da

DS3231 rtc (27, 25);
Lokaci t;

uint16_t r = 6000;
uint32_t k = 0;

dogayen bayanan da ba a sanya hannu ba masu canzawa;
yawo leb_1;
yawo leb_2;
yawo leb_3;
yawo leb_4;

uint8_t bututu;
int rc = 0;

uint8_t time_sec_prev;
uint8_t time_day_prev;

//************************************ *************** / /
// Idan kuna amfani da OPEN-SMART TFT breakout board //
// Na ba ku shawarar ƙara 5V-3.3V matakin juyawa kewaye.
// Tabbas zaku iya amfani da OPEN-SMART UNO Black version tare da 5V/3.3V ikon sauya,
// kawai kuna buƙatar canzawa zuwa 3.3V.
// Ana iya sanya fil ɗin sarrafawa don LCD zuwa kowane dijital ko
// analog fil ... amma za mu yi amfani da fil ɗin analog kamar yadda wannan ya ba mu damar
//—————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO Black
// GND - GND
// 3V3 - 3.3V
//CS- A3
// RS-A2
// WR - A1
// RD - A0
// RST - Sake saitin
// LED - GND
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7

// Sanya sunaye masu iya karantawa ga wasu nau'ikan launi 16-bit gama gari:
# ayyana BLACK 0x0000
# ayyana BLUE 0x001F
# ayyana RED 0xF800
# ayyana GREEN 0x07E0
# ayyana CYAN 0x07FF
#bayyana MAGENTA 0xF81F
# ayyana YELLOW 0xFFE0
# ayyana WHITE 0xFFFF
# ayyana GRAY 0x8C51
#bayyana GRAYD 0x39E7

// Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Idan amfani da garkuwa, duk sarrafawa da layin bayanai an gyara su, kuma
// za a iya amfani da mafi sauƙi furci da zaɓi:
// Adafruit_TFTLCD tft;
uint16_t g_identifier;

Bayanin kirtani;
//Kirtani numfileMonth = "1.txt";
char perv [] = {"2.txt"};
// Zaren * numfileMonth = "1.txt" (girman (numfileMonth));
///////////////////////// /////////////

saitin fanko (wofi) {

rtc.begin();

// Don saita lokacin, ba da amsa ga layukan da suka dace
// rtc.setDOW(6); // Ranar mako
// rtc.setTime (22, 04, 0); // Lokaci, a cikin tsarin sa'o'i 24.
// rtc.setDate(4, 5, 2019); // Ranar, Oktoba 29, 2018

Serial. Shiga (2000000);
//////// Farkon allo
tft.fara (0x65);
tft.reset();
tft.setRotation (0);
tft.cp437 (gaskiya);
///////////////// Fitar da sunaye, na'urorin haɗi, sunan ƙungiya
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor (8, 0);
tft.println ("Masu Haɓakawa & Gina");
tft.setCursor (30, 20);
tft.print (utf8rus ("Constructor V.V."));
tft.setCursor (40, 40);
tft.print (utf8rus ("Turner I.I."));
jinkirta (2000);

radio.fara(); // Fara aiki nRF24L01+
radio.setChannel(120); // Ƙayyade tashar liyafar bayanai (daga 0 zuwa 127)
radio.setDataRate(RF24_250KBPS); // Ƙayyade ƙimar canja wurin bayanai (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Mbit/s
radio.setPALevel(RF24_PA_MAX); // Ƙayyade ikon watsawa (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
radio.openReadingPipe (1, 0xAABBCCDD11LL); // Buɗe bututu 1 tare da mai gano mai watsawa 1 0xAABBCCDD11, don karɓar bayanai
// Buɗe bututu 2 tare da ID mai watsawa 2xAABBCCDD0 don karɓar bayanai
radio.fara Sauraron(); // Kunna mai karɓa, fara sauraron buɗaɗɗen bututu
// radio.stopSauraro();
////////Fitar bayanin sabis
tft.fillScreen(BLACK);
tft.setCursor (8, 0);
tft.setTextSize(1);
////////Fara ƙaddamar da katin SD
Serial.println("Katin SD na farko");
tft.println ("Katin SD na farko");
tft.setCursor (8, 10);
//////// Fara katin
idan (!SD.fara (SD_CS_PIN)) {
Serial.println ("na farko ya kasa!");
tft.fillRect (8, 10, 85, 7, RED);
tft.setTextColor(BLACK);
tft.println ("Na farko ya kasa!");
dawowa;
}
tft.setTextColor(WHITE);
Serial.println ("farawa da aka yi");
tft.println ("An gama farawa");
jinkirta (2000);
////////Karanta lokaci da kwanan wata da sanya su ga masu canji
t = rtc.getTime ();
time_sec_prev = t.sec;
time_day_prev = t.date;
//////// Fitar da kwanan wata da karfi don kar a jira ranar ta canza don nunawa
tft.setCursor (180, 0); // saita wurin siginan kwamfuta
tft.fillRect(178, 0, 65, 7, GRAY); // share lokacin fitarwa yankin
tft.setTextSize(1);
tft.print(rtc.getDateStr());
////////Fitar sunan abubuwan sarrafawa
tft.setTextSize(2);
tft.setCursor (60, 25);
tft.println (utf8rus("Winches I"));
//////// Kirkirar fayil ɗin log da fitar da sakamakon ƙoƙarin ƙirƙirar
tft.setTextSize(1);
tft.setCursor (130, 10); // idan an ƙirƙiri log file 2.txt, to rubuta zuwa fayil ɗin zai ci gaba
idan (SD. akwai (perv)) {
//tft.setCursor (0, 90);
tft.println (perv);
Serial.println (perv);
} da {
myFile = SD.bude (perv, FILE_WRITE); // idan fayil 2.txt ba ya wanzu, za a ƙirƙira shi
myFile.close ();
tft.println (perv);
Serial.println (perv);
}
}

rashin aiki madauki (wofi) {
////////Duba wanzuwar buƙatun don fitar da log ɗin zuwa mai duba tashar tashar COM
idan (Serial.available()> 0) {
idan (1 == Serial.read());
//////// Kuma idan "1" aka karɓa, to, fitarwa
Fayil myFile = SD.bude(perv);
// idan fayil ɗin yana samuwa, rubuta zuwa gare shi:
idan (myFile) {
yayin (myFile.available()) {
Serial.write (myFile.read());
}
myFile.close ();
}
wasu {
Serial.println ("kuskuren budewa .txt");
}
}
////////Lokacin karatu
t = rtc.getTime ();
tft.setTextColor(WHITE);
//////// Idan lokaci ya canza, to, nuna sabon karatun agogo
idan ( time_sec_prev! = t.sec) {
tft.setCursor (120, 0); // saita wurin siginan kwamfuta
tft.fillRect(118, 0, 50, 7, GRAY); // share lokacin fitarwa yankin
tft.setTextSize(1);
tft.print(rtc.getTimeStr()); // karatun agogon fitarwa
time_sec_prev = t.sec;
}
//////// Idan kwanan wata ya canza, to, nuna sabon kwanan wata
idan (lokaci_day_prev! = t.date) {
tft.setCursor (180, 0); // saita wurin siginan kwamfuta
tft.fillRect(178, 0, 65, 7, GRAY); // share wurin nunin kwanan wata
tft.setTextSize(1);
tft.print(rtc.getDateStr()); // nuni karatun kwanan wata
time_day_prev = t.date;
}
////////Idan akwai liyafar rediyo, to
idan (radio.available(& bututu)) {
//////// duba ko an cika buffer ɗin karɓa,
radio.read(&data, sizeof(data));
//////// idan akwai adireshin watsawa da ake buƙata, to
idan (bututu = 1) {
///////// jiran jerin sifilai na aiki tare don tantancewa
//farkon bayanan toshe
idan (bayanai = 0000) {
rc = 0;
} da {
rc++;
}
////////Kididdigar ƙididdigewa da ƙididdige su a cikin 10th da 100ths na awa ɗaya
idan (rc == 1) {
leb_1 = bayanai / 3600.0;
}

idan (rc == 2) {
leb_2 = bayanai / 3600.0;
}

idan (rc == 3) {
leb_3 = bayanai / 3600.0;
}

idan (rc == 4) {
leb_4 = bayanai / 3600.0;
}
}
}
ba r++;
ku++; // kawai counter
//////// Sabunta bayanai tare da takamaiman lokaci
idan (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; ku.
}
////////Rubuta bayanai zuwa log ɗin akan SD kowane minti 10.
idan ((t.min % 10 == 0) && (t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor (200, 10);
tft.setTextColor(BLACK);
//////// Kirkirar kirtani a tsarin .csv
Saitin dataString = Zari (rtc.getDateStr()) + ", "+(rtc.getTimeStr()) +", "+ (leb_1) + "," + (leb_2)
+ "," + (leb_3) + "," + (leb_4) + ", ";
//////// Rubuta zuwa fayil kuma fitar da sakamakon aikin rubutun
myFile = SD.bude (perv, FILE_WRITE); // idan babu fayil mai suna "2.txt", za a ƙirƙira shi.
idan (myFile) {
myFile.println (dataString);
myFile.close ();
tft.fillRect(198, 8, 42, 10, GREEN);
tft.println ("SD Ok");
Serial.println ("SD Ok");
jinkirta (900); // jinkiri, in ba haka ba yana yin rikodin karatu iri ɗaya har sai daƙiƙa 13 ya wuce
} da {
tft.fillRect (198, 8, 42, 10, RED);
tft.println ("SD ERR");
Serial.println ("SD ERR");
}
}
}Shirin canza hali/* Sake rikodin rubutun Rasha daga UTF-8 zuwa Windows-1251 */

String utf8rus (Madogararsa)
{
int i,k;
Maƙasudin igiya;
ba sa hannu n;
m[2] = {'0', '' ;

k = tushen.tsawon (); ina = 0;

yayin (i <k) {
n = tushen[i]; ina ++;

idan (n>= 0xC0) {
canza (n) {
hali 0xD0: {
n = tushen[i]; ina ++;
idan (n == 0x81) {n = 0xA8; karya; }
idan (n>= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
karya.
}
hali 0xD1: {
n = tushen[i]; ina ++;
idan (n == 0x91) {n = 0xB8; karya; }
idan (n>= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
karya.
}
}
}
m [0] = n; manufa = manufa + String (m);
}
mayar da manufa;
}Shirin canza haruffa don fitowar Cyrillic ta amfani da ɗakin karatu na Adafruit_GFX an sanya shi a cikin babban fayil ɗin tare da babban shirin. Hakanan kuna buƙatar maye gurbin fayil ɗin glcdfont.c a cikin Adafruit_GFX tare da font daban. Yana da ɗakin karatu tare da maye gurbin da ake bukata. Ana iya samun ƙarin bayani game da Russification cikin sauƙi akan Intanet.
Don taƙaitawa, zan ce tsarin ya rayu har zuwa tsammanin, ya zama sauƙi don saka idanu lokacin aiki na kayan aiki. Ko da yake an tattara komai a kan allunan burodi, babu wani gunaguni na gaggawa game da aikin. Abubuwan farko sun yi aiki fiye da watanni shida kuma sun tsira daga hunturu. Sabon zane Yana gudana don raka'a masu sarrafawa 9 tun ranar 5 ga Maris kuma ana yin rajistar lokacin aiki bisa hukuma ta amfani da shi.

source: www.habr.com

Add a comment