የአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ)

በዚህ ጣቢያ ላይ ይጀምሩ ማያያዣ.
ማስጀመሪያውን ስለማብራት መረጃን ለማግኘት በጣም ምቹው አማራጭ ከ PC817 optocoupler ጋር አማራጭ ሆኖ ተገኝቷል። መርሃግብራዊ ንድፍየአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ)ቦርዶች ሶስት ተመሳሳይ ወረዳዎችን ይይዛሉ, ሁሉም ነገር በ ABS የፕላስቲክ ሳጥኖች ውስጥ ይቀመጣል, መጠን 100x100 ሚሜ. የ optocouplers ፎቶየአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ) ከሴሚኮንዳክተር ቫልቮች ጋር ከመነሻ መሳሪያዎች ጋር ሲገናኙ, የእነሱ ፍሳሽ ፍሰት PC817 ን ለመክፈት በቂ ነው እና ቆጣሪው በውሸት ይነሳል. እንዲህ ያለውን ሁኔታ ለማስቀረት አንድ ተጨማሪ በኦፕቲኮፕለር ኤልኢዲ (ኦፕቲኮፕለር ኤልኢዲ) ዑደት እና በኦፕሬሽኑ ኤልኢዲ (LED) ላይ በተከታታይ ይታከላል. ይህንን ለማድረግ, jumper J1 ተከፍቷል እና ተጨማሪ LED LED1 ተሽጧል.
የመቀበያው ክፍል የተሠራው በ ላይ ነው ወገን 1የአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ)ወገን 2የአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ)የልማት ሰሌዳ ከ ARDUINO MEGA 2560 ጋር የተገናኘ. ለዚህም, ባለ ሁለት ረድፍ ማገናኛ መጨረሻ ላይ ጥቅም ላይ ይውላል. 240x400 ጥራት ያለው ስክሪን የሚቋቋም ንክኪ እና የሙቀት ዳሳሽ ያለው እንደ የመረጃ ማሳያ መሳሪያ ነው። HX8352B.የአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ) ከዚህም በላይ በማያ ገጹ ላይ ካለው የ ICSP ጋር ያለው ማገናኛ ይወገዳል እና የማይክሮ ኤስዲ ማስገቢያ ጥቅም ላይ አይውልም. እውነታው ግን በ SPI አውቶቡስ ላይ በተፈጠረው ግጭት ምክንያት "ቤተኛው" SD ሶኬት መጠቀም አይቻልም. ለፍላሽ ካርድ፣ የተለየ የካርድ አንባቢ ጥቅም ላይ ውሏል፣ እሱም 3,3V stabilizer እና ቋት ቺፑን በሶስት የውጤት ግዛቶች 74LVS125A ያካትታል። ይሄ ነው ሬኩ እየጠበቀኝ የነበረው። የሶስት-ግዛት ቋት፣ ግን E01-ML01DP5 ወይም የካርድ አንባቢው ሰርቷል። በቤተ መፃህፍቱ አስተያየቶች ውስጥ SdFat ከሌሎች መሳሪያዎች ጋር ስለ አለመጣጣም ማስጠንቀቂያ አይቷል. በTXS0108E ላይ ያለው ደረጃ መቀየሪያ ተወግዶ በ jumpers ተተክቷል፣ ምክንያቱም E01-ML01DP5 ለ 5V ምልክቶች ታጋሽ ነው - አልረዳም። oscilloscope በመጠቀም የካርድ አንባቢ ሲገናኝ በ MISO መስመር ላይ የሲግናል መጥፋት ታይቷል። በጥንቃቄ ሲመረመር የ 4LVS74A የ OE 125 ቻናሎች ማስቻል ግብአቶች በቀላሉ ለጋራ ሽቦ ተሽጠው ስለማንኛውም የሶስተኛ ግዛት ንግግር ሊኖር እንደማይችል ታወቀ። የቋት ቺፕ ከሲግናል መስመሮች ጋር በተከታታይ የተገናኙ 5 KΩ ተከላካይዎችን በመጠቀም ከ3.3V ወደ 3,3V እንደ ቀዳሚ ደረጃ መቀየሪያ ጥቅም ላይ ውሏል። ከ MISO መስመር በስተቀር። የውጤቱ የታችኛው ማብሪያ / ማጥፊያ ወደ መሬት ደረጃ ምልክቶችን ሳቢ ይሆናል። የ MISO መስመር የነቃ ሲግናል ፒን 13 መሆኑን ካወቀ በኋላ ከትራኩ ተቀደደየተሸጠየአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ)በ 9LVS74A CS መሣሪያ መካከል የግቤት ፒን (125) እና የማቋረጫ ተከላካይ ይምረጡ። አሁን፣ የማህደረ ትውስታ ካርዱ መዳረሻ ከሌለ፣ MISO ቋት ተሰናክሏል እና በሌላ መሳሪያ ስራ ላይ ጣልቃ አይገባም።የልማት ሰሌዳ ንድፍየአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ)ተቀባይ በሥራ ላይየአካባቢ ራስ ገዝ የውሂብ ማግኛ ስርዓት (የቀጠለ)ሰዓቱን ለማገናኘት DS3231 ሶፍትዌር I2C አውቶቡስ (TWI) ይጠቀማል።
Arduino IDE ፕሮግራም// አስፈላጊ፡ Adafruit_TFTLCD ቤተ-መጽሐፍት ተለይቶ መሆን አለበት
// ለ TFT ጋሻ ወይም ለተሰበረው ቦርድ የተዋቀረ።
// ለማቀናበር በAdafruit_TFTLCD.h ተገቢ አስተያየቶችን ይመልከቱ።
// በክፍት-ስማርት ቡድን እና በካታሌክስ ቡድን
//[ኢሜል የተጠበቀ]
// መደብር፡ dx.com
// open-smart.aliexpress.com/store/1199788
// የማሳያ ተግባር: ማሳያ ግራፊክስ, ቁምፊዎች
// Arduino አይዲኢ: 1.6.5
// ቦርድ: Arduino UNO R3, Arduino Mega2560, Arduino ሊዮናርዶ

// ቦርድ፡- ክፍት-ስማርት UNO R3 5V/3.3V፣ Arduino UNO R3፣ Arduino Mega2560
//3.2ኢንች ቲኤፍቲ፡
// 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
//ክፍት-ስማርት 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

#ያካትቱ // ኮር ግራፊክስ ቤተ-መጽሐፍት
//# ያካትቱ // ሃርድዌር-ተኮር ቤተ-መጽሐፍት
#ያካትቱ
MCUFRIEND_kbv tft;
"SdFat.h" ን ያካትቱ // የSdFat ላይብረሪ ይጠቀሙ
SdFat ኤስዲ;
የኤስዲፋይል ፋይል;
ፋይል myFile;
# 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 ቧንቧ;
int rc = 0;

uint8_t ጊዜ_ሴኮንድ_prev;
uint8_t ጊዜ_ቀን_ቀዳሚ;

//**************************************** ****************/ /
// OPEN-SMART TFT Breakout ሰሌዳ ከተጠቀሙ //
// 5V-3.3V ደረጃ መቀየሪያ ወረዳ እንዲጨምሩ ደግመዎ።
// በእርግጥ የ OPEN-SMART UNO ጥቁር ስሪት ከ 5V/3.3V ሃይል መቀየሪያ ጋር መጠቀም ትችላለህ።
// ወደ 3.3 ቪ መቀየር ብቻ ያስፈልግዎታል.
// የ LCD መቆጣጠሪያ ፒን ለማንኛውም ዲጂታል ሊመደብ ይችላል ወይም
// የአናሎግ ፒን ... ግን እንደፈቀደልን የአናሎግ ፒን እንጠቀማለን።
//—————————————-|
// TFT Breakout - Arduino UNO / Mega2560 / OPEN-SMART UNO Black
// ጂኤንዲ - ጂኤንዲ
// 3 ቪ 3 - 3.3 ቪ
//CS - A3
// አርኤስ - A2
// WR - A1
// RD - A0
// RST - ዳግም አስጀምር
// LED - GND
// ዲቢ0 - 8
// ዲቢ1 - 9
// ዲቢ2 - 10
// ዲቢ3 - 11
// ዲቢ4 - 4
// ዲቢ5 - 13
// ዲቢ6 - 6
// ዲቢ7 - 7

// በሰዎች ሊነበቡ የሚችሉ ስሞችን ለአንዳንድ የተለመዱ ባለ 16-ቢት የቀለም እሴቶች መድብ፡
# ጥቁር 0x0000 ይግለጹ
ሰማያዊውን 0x001F ይግለጹ
# RED 0xF800ን ይግለጹ
አረንጓዴውን 0x07E0 ይግለጹ
# CYAN 0x07FFን ይግለጹ
MAGENTA 0xF81Fን ይግለጹ
ቢጫ 0xFFE0ን ይግለጹ
# ነጭ 0xFFFFን ይግለጹ
# GRAY 0x8C51 ይግለጹ
# GRAYD 0x39E7ን ይግለጹ

// Adafruit_TFTLCD tft(LCD_CS፣ LCD_CD፣ LCD_WR፣ LCD_RD፣ LCD_RESET);
// መከላከያውን ከተጠቀሙ, ሁሉም የቁጥጥር እና የውሂብ መስመሮች ተስተካክለዋል, እና
// ቀለል ያለ መግለጫ እንደ አማራጭ መጠቀም ይቻላል፡-
// Adafruit_TFTLCD tft;
uint16_t g_መለያ;

ሕብረቁምፊ dataString;
// ሕብረቁምፊ numfileMonth = "1.txt";
char perv [] = {"2.txt"};
// ሕብረቁምፊ * numfileMonth = "1.txt" (መጠን (numfileMonth));
//////////////////// ///////////////

ባዶነት ማዋቀር (ባዶ) {

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 (እውነት);
///////////////// የስሞች ውጤት፣ የመሳሪያ መለዋወጫዎች፣ የድርጅት ስም
tft.fill ስክሪን (BLACK);
tft.setTextColor (WHITE);
tft.setTextSize (2);
tft.setCursor (8, 0);
tft.println ("ገንቢዎች እና ግንባታ");
tft.setCursor (30, 20);
tft.print (utf8rus ("Constructor V.V."));
tft.setCursor (40, 40);
tft.print (utf8rus ("ተርነር I.I."));
መዘግየት (2000);

radio.መጀመሪያ (); // ሥራ 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); // መረጃ ለመቀበል 1 ፓይፕ ከ1 አስተላላፊ 0xAABBCCDD11 መለያ ጋር ይክፈቱ።
// ውሂብ ለመቀበል ቧንቧ 2 ን ከአስተላላፊ መታወቂያ 2xAABBCCDD0 ይክፈቱ
radio.startListening (); // መቀበያውን ያብሩ, ክፍት ቧንቧዎችን ማዳመጥ ይጀምሩ
// radio.stopListening ();
//////// የአገልግሎት መረጃ ውጤት
tft.fill ስክሪን (BLACK);
tft.setCursor (8, 0);
tft.setTextSize (1);
////////የኤስዲ ካርዱን ማስጀመር ጀምር
Serial.println ("የመጀመሪያ ኤስዲ ካርድ");
tft.println ("የመጀመሪያ ኤስዲ ካርድ");
tft.setCursor (8, 10);
//////// ካርዱን ማስጀመር
ከሆነ (!ኤስዲ.ጀማሪ(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 ከተፈጠረ ወደ ፋይሉ መፃፍ ይቀጥላል
ከሆነ (ኤስዲ. ካለ(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);
}
}

ባዶ ሉፕ (ባዶ) {
//////// ወደ COM ወደብ ማሳያ መዝገብ ለማውጣት ጥያቄ መኖሩን ማረጋገጥ
ከሆነ (Serial.available() > 0) {
ከሆነ (1 == Serial.read ());
//////// እና “1” ተቀባይነት ካገኘ ውፅዓት
ፋይል myFile = SD.open(perv);
// ፋይሉ የሚገኝ ከሆነ ይፃፉለት፡-
ከሆነ (MyFile) {
እያለ (myFile.available()) {
Serial.write (myFile.read ());
}
myFile.close ();
}
ሌላ {
Serial.println ("ስህተት መክፈቻ .txt");
}
}
/////// የንባብ ጊዜ
t = rtc.getTime ();
tft.setTextColor (WHITE);
//////// ሰዓቱ ከተቀየረ, ከዚያም አዲሱን የሰዓት ንባቦችን አሳይ
ከሆነ (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;
}
//////// ቀኑ ከተቀየረ አዲሱን ቀን አሳይ
ከሆነ (የጊዜ_ቀን_ቀድሞ!=t.ቀን) {
tft.setCursor (180, 0); // የጠቋሚውን አቀማመጥ ማዘጋጀት
tft.fillRect (178, 0, 65, 7, GRAY); // የቀን ማሳያ ቦታን ያጽዱ
tft.setTextSize (1);
tft.print (rtc.getDateStr ()); // የማሳያ ቀን ንባቦች
time_day_prev = t.date;
}
////////የሬድዮ መቀበያ ካለ ታዲያ
ከሆነ (radio.available(&ቧንቧ)) {
//////// የተቀባዩ ቋት መሙላቱን ማረጋገጥ፣
radio.read (& data, sizeof (data));
//////// የሚፈለገው አስተላላፊ አድራሻ ካለ፣ እንግዲያውስ
ከሆነ (ቧንቧ == 1) {
//////// ለመወሰን የዜሮዎች ተከታታይ ማመሳሰልን በመጠበቅ ላይ
// የውሂብ እገዳው መጀመሪያ
ከሆነ (ውሂብ == 0000) {
rc = 0;
} else {
rc++;
}
//////// ቆጣሪ ዋጋዎችን መቅዳት እና በ 10 ኛ እና 100 ኛ ሰዓት ውስጥ ማስላት
ከሆነ (rc == 1) {
leb_1 = ውሂብ / 3600.0;
}

ከሆነ (rc == 2) {
leb_2 = ውሂብ / 3600.0;
}

ከሆነ (rc == 3) {
leb_3 = ውሂብ / 3600.0;
}

ከሆነ (rc == 4) {
leb_4 = ውሂብ / 3600.0;
}
}
}
አር++;
k++; // ቆጣሪ ብቻ
//////// የውሂብ ዝመና ከተወሰነ ጊዜ ጋር
ከሆነ ( 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;
}
//////// በየ 10 ደቂቃው በኤስዲ ላይ ውሂብን ወደ ማስታወሻው ይፃፉ።
ከሆነ ((t.min % 10 == 0) && (t.sec == 0)) {
tft.setTextSize (1);
tft.setCursor (200, 10);
tft.setTextColor(BLACK);
//////// ሕብረቁምፊን በ.csv ቅርጸት መፍጠር
ሕብረቁምፊ dataString = ሕብረቁምፊ (rtc.getDateStr()) +"፣"+(rtc.getTimeStr()) +"፣" + (leb_1) + "፣" + (leb_2)
+ "," + (leb_3) + ", " + (leb_4) + ", ";
//////// ወደ ፋይል ጻፍ እና የአጻጻፍ ሂደቱን ውጤቶቹን አውጣ
myFile = SD.open(perv, FILE_WRITE); // "2.txt" የሚባል ፋይል ከሌለ, ይፈጠራል.
ከሆነ (MyFile) {
myFile.println (dataString);
myFile.close ();
tft.fillRect (198, 8, 42, 10, አረንጓዴ);
tft.println ("SD እሺ");
Serial.println ("SD እሺ");
መዘግየት (900); // መዘግየት፣ ያለበለዚያ አንድ ሰከንድ እስኪያልፍ ድረስ 13 ተመሳሳይ ንባቦችን ይመዘግባል
} else {
tft.fillRect (198, 8, 42, 10, RED);
tft.println ("SD ERR");
Serial.println ("SD ERR");
}
}
}የቁምፊ ልወጣ ፕሮግራም/* የሩስያ ቅርጸ-ቁምፊዎችን ከ UTF-8 ወደ ዊንዶውስ-1251 እንደገና ኮድ ያድርጉ */

ሕብረቁምፊ utf8rus(የሕብረቁምፊ ምንጭ)
{
int i,k;
የሕብረቁምፊ ዒላማ;
ያልተፈረመ ቻር n;
ቻር m[2] = {'0', '' };

k = ምንጭ.ርዝመት (); እኔ = 0;

ሳለ (እኔ <k) {
n = ምንጭ[i]; እኔ ++;

ከሆነ (n >= 0xC0) {
መቀየር (n) {
ጉዳይ 0xD0: {
n = ምንጭ[i]; እኔ ++;
ከሆነ (n == 0x81) {n = 0xA8; መሰባበር; }
ከሆነ (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
ለመላቀቅ;
}
ጉዳይ 0xD1: {
n = ምንጭ[i]; እኔ ++;
ከሆነ (n == 0x91) {n = 0xB8; መሰባበር; }
ከሆነ (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
ለመላቀቅ;
}
}
}
ሜትር [0] = n; ዒላማ = ዒላማ + ሕብረቁምፊ (m);
}
መመለስ ዒላማ;
}የ Adafruit_GFX ቤተ-መጽሐፍትን በመጠቀም ለሲሪሊክ ውፅዓት የቁምፊ ትራንስኮዲንግ ፕሮግራም ከዋናው ፕሮግራም ጋር በተመሳሳይ አቃፊ ውስጥ ይቀመጣል። እንዲሁም በAdafruit_GFX ውስጥ ያለውን የ glcdfont.c ፋይል በተለየ ቅርጸ-ቁምፊ መተካት ያስፈልግዎታል። ይህ ነው ቤተ-መጽሐፍት ከሚያስፈልገው ምትክ ጋር. ስለ Russification ተጨማሪ መረጃ በበይነመረብ ላይ በቀላሉ ማግኘት ይቻላል.
ለማጠቃለል, ስርዓቱ በሚጠበቀው መሰረት እንደኖረ እናገራለሁ, የመሳሪያውን የአሠራር ጊዜ ለመቆጣጠር ቀላል ሆኗል. ምንም እንኳን ሁሉም ነገር በዳቦ ሰሌዳዎች ላይ ቢሰበሰብም, ስለ ሥራው አፋጣኝ ቅሬታዎች የሉም. የመጀመሪያዎቹ ንጥረ ነገሮች ከስድስት ወራት በላይ ሲሠሩ እና ክረምቱን ጠብቀው ቆይተዋል. የቅርብ ጊዜ ንድፍ ከመጋቢት 9 ጀምሮ ለ5 ቁጥጥር ክፍሎች እየሰራ ሲሆን የስራ ሰዓቱ በይፋ እየተመዘገበ ነው።

ምንጭ: hab.com

አስተያየት ያክሉ