ఈ సైట్లో ప్రారంభించండి
స్టార్టర్ను ఆన్ చేయడం గురించి సమాచారాన్ని తిరిగి పొందడానికి అత్యంత అనుకూలమైన ఎంపిక PC817 ఆప్టోకప్లర్తో ఎంపికగా మారింది. సర్క్యూట్ రేఖాచిత్రంబోర్డులు మూడు సారూప్య సర్క్యూట్లను కలిగి ఉంటాయి, ప్రతిదీ ABS ప్లాస్టిక్ పెట్టెల్లో ఉంచబడుతుంది, పరిమాణం 100x100 mm. ఆప్టోకప్లర్స్ ఫోటో సెమీకండక్టర్ వాల్వ్లతో ప్రారంభ పరికరాలకు కనెక్ట్ చేసినప్పుడు, PC817ని తెరవడానికి వారి లీకేజ్ కరెంట్ సరిపోతుంది మరియు కౌంటర్ తప్పుగా ట్రిగ్గర్ అవుతుంది. అటువంటి పరిస్థితిని మినహాయించడానికి
స్వీకరించే భాగం తయారు చేయబడింది వైపు 1వైపు 2డెవలప్మెంట్ బోర్డ్ ARDUINO MEGA 2560కి కనెక్ట్ చేయబడింది. దీని కోసం, చివరిలో డబుల్-రో కనెక్టర్ ఉపయోగించబడుతుంది. 240x400 రిజల్యూషన్ కలిగిన స్క్రీన్, రెసిస్టివ్ టచ్స్క్రీన్ మరియు ఉష్ణోగ్రత సెన్సార్ కలిగి, సమాచార ప్రదర్శన పరికరంగా ఉపయోగించబడుతుంది. HX8352B. అంతేకాకుండా, స్క్రీన్ బోర్డ్లోని ICSPకి కనెక్టర్ తీసివేయబడుతుంది మరియు మైక్రో SD స్లాట్ ఉపయోగించబడదు. వాస్తవం ఏమిటంటే SPI బస్లో వైరుధ్యం కారణంగా "స్థానిక" SD సాకెట్ ఉపయోగించబడదు. ఫ్లాష్ కార్డ్ కోసం, ఒక ప్రత్యేక కార్డ్ రీడర్ ఉపయోగించబడింది, ఇందులో 3,3V స్టెబిలైజర్ మరియు మూడు అవుట్పుట్ స్టేట్స్ 74LVS125A ఉన్న బఫర్ చిప్ ఉన్నాయి. ఇక్కడే రేక్ నా కోసం వేచి ఉంది. మూడు-రాష్ట్ర బఫర్, కానీ E01-ML01DP5 లేదా కార్డ్ రీడర్ పని చేస్తుంది. లైబ్రరీ వ్యాఖ్యలలో, SdFat ఇతర పరికరాలతో అననుకూలత గురించి హెచ్చరికను చూసింది. TXS0108Eలోని స్థాయి కన్వర్టర్ తీసివేయబడింది మరియు జంపర్లతో భర్తీ చేయబడింది, ఎందుకంటే E01-ML01DP5 5V సిగ్నల్లను తట్టుకుంటుంది - ఇది సహాయం చేయలేదు. ఓసిల్లోస్కోప్ ఉపయోగించి, కార్డ్ రీడర్ కనెక్ట్ చేయబడినప్పుడు 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లో సంబంధిత వ్యాఖ్యలను చూడండి.
//ఓపెన్-స్మార్ట్ టీమ్ మరియు కాటలెక్స్ టీమ్ ద్వారా
//[ఇమెయిల్ రక్షించబడింది]
//స్టోర్:
//
//డెమో ఫంక్షన్: గ్రాఫిక్స్, క్యారెక్టర్లను ప్రదర్శించండి
//Arduino IDE: 1.6.5
// బోర్డు: Arduino UNO R3, Arduino Mega2560, Arduino Leonardo
// బోర్డు:ఓపెన్-స్మార్ట్ UNO R3 5V / 3.3V, Arduino UNO R3, Arduino Mega2560
//3.2 అంగుళాల TFT:
//
//ఓపెన్-స్మార్ట్ UNO R3 5V / 3.3V:
//
#చేర్చండి // కోర్ గ్రాఫిక్స్ లైబ్రరీ
//# చేర్చండి // హార్డ్వేర్-నిర్దిష్ట లైబ్రరీ
#చేర్చండి
MCUFRIEND_kbv tft;
#"SdFat.h"ని చేర్చండి // SdFat లైబ్రరీని ఉపయోగించండి
SdFat SD;
SdFile ఫైల్;
ఫైల్ 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 time_sec_prev;
uint8_t time_day_prev;
//*************************************************** ****************//
// మీరు OPEN-SMART TFT బ్రేక్అవుట్ బోర్డ్ని ఉపయోగిస్తే //
// 5V-3.3V స్థాయి కన్వర్టింగ్ సర్క్యూట్ను జోడించమని మిమ్మల్ని సిఫార్సు చేస్తున్నాము.
// వాస్తవానికి మీరు 5V/3.3V పవర్ స్విచ్తో OPEN-SMART UNO బ్లాక్ వెర్షన్ను ఉపయోగించవచ్చు,
// మీరు కేవలం 3.3Vకి మారాలి.
// LCD కోసం కంట్రోల్ పిన్లను ఏదైనా డిజిటల్ లేదా కేటాయించవచ్చు
// అనలాగ్ పిన్లు...కానీ ఇది మాకు అనుమతించిన విధంగా మేము అనలాగ్ పిన్లను ఉపయోగిస్తాము
//—————————————-|
// TFT బ్రేక్అవుట్ - Arduino UNO / Mega2560 / OPEN-SMART UNO బ్లాక్
// GND - GND
// 3V3 - 3.3V
//CS - A3
// RS - A2
// WR - A1
// RD - A0
// RST - రీసెట్
// LED - GND
// DB0 - 8
// DB1 - 9
// DB2 - 10
// DB3 - 11
// DB4 - 4
// DB5 - 13
// DB6 - 6
// DB7 - 7
// కొన్ని సాధారణ 16-బిట్ రంగు విలువలకు మానవులు చదవగలిగే పేర్లను కేటాయించండి:
#BLACK 0x0000ని నిర్వచించండి
#BLUE 0x001Fని నిర్వచించండి
#RED 0xF800ని నిర్వచించండి
#GREEN 0x07E0ని నిర్వచించండి
#CYAN 0x07FFని నిర్వచించండి
#MAGENTA 0xF81Fని నిర్వచించండి
#YELLOW 0xFFE0ని నిర్వచించండి
#WHITE 0xFFFFని నిర్వచించండి
#GRAY 0x8C51ని నిర్వచించండి
#GRAYD 0x39E7ని నిర్వచించండి
//Adafruit_TFTLCD tft (LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// షీల్డ్ని ఉపయోగిస్తుంటే, అన్ని నియంత్రణ మరియు డేటా లైన్లు స్థిరంగా ఉంటాయి మరియు
// సరళమైన ప్రకటనను ఐచ్ఛికంగా ఉపయోగించవచ్చు:
// Adafruit_TFTLCD tft;
uint16_t g_identifier;
స్ట్రింగ్ డేటా స్ట్రింగ్;
//స్ట్రింగ్ numfileMonth = "1.txt";
చార్ perv [] = {"2.txt"};
//స్ట్రింగ్ *numfileMonth="1.txt" (sizeof (numfileMonth));
////////////////////////////////////////////////// ////////////////
శూన్య సెటప్ (శూన్యమైనది) {
rtc.begin();
// సమయాన్ని సెట్ చేయడానికి, అవసరమైన పంక్తులను తీసివేయండి
// rtc.setDOW(6); // వారంలో రోజు
// rtc.setTime(22, 04, 0); // సమయం, 24 గంటల ఆకృతిలో.
// rtc.setDate(4, 5, 2019); // తేదీ, అక్టోబర్ 29, 2018
సీరియల్.బెగిన్ (2000000);
//////// స్క్రీన్ ప్రారంభించడం
tft.begin(0x65);
tft.reset();
tft.setRotation(0);
tft.cp437(నిజం);
//////////////////పేర్ల అవుట్పుట్, పరికరాల ఉపకరణాలు, సంస్థ పేరు
tft.fillScreen(బ్లాక్);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(8, 0);
tft.println("డెవలపర్లు & బిల్డ్");
tft.setCursor(30, 20);
tft.print (utf8rus("కన్స్ట్రక్టర్ V.V." ));
tft.setCursor(40, 40);
tft.print (utf8rus("టర్నర్ I.I." ));
ఆలస్యం (2000);
radio.begin(); // 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 ట్రాన్స్మిటర్ 1xAABBCCDD0 ఐడెంటిఫైయర్తో 11 పైపును తెరవండి
// డేటాను స్వీకరించడానికి ట్రాన్స్మిటర్ ID 2xAABBCCDD2తో పైప్ 0ని తెరవండి
radio.startListening(); // రిసీవర్ను ఆన్ చేయండి, పైపులను తెరిచి వినడం ప్రారంభించండి
// radio.stopListening();
////////సేవా సమాచారం యొక్క అవుట్పుట్
tft.fillScreen(బ్లాక్);
tft.setCursor(8, 0);
tft.setTextSize(1);
////////SD కార్డ్ని ప్రారంభించడం ప్రారంభించండి
Serial.println("ప్రారంభ SD కార్డ్");
tft.println("ప్రారంభ SD కార్డ్");
tft.setCursor(8, 10);
////////కార్డును ప్రారంభించడం
అయితే (!SD.begin(SD_CS_PIN)) {
Serial.println("ప్రారంభ విఫలమైంది!");
tft.fillRect(8, 10, 85, 7, RED);
tft.setTextColor(బ్లాక్);
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 సృష్టించబడితే, ఫైల్కి రాయడం కొనసాగుతుంది
ఉంటే (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);
}
}
శూన్య లూప్ (శూన్యమైనది) {
////////COM పోర్ట్ మానిటర్కు లాగ్ను అవుట్పుట్ చేయడానికి అభ్యర్థన ఉనికిని తనిఖీ చేస్తోంది
ఉంటే (Serial.available() > 0) {
అయితే (1 == Serial.read());
////////మరియు “1” అంగీకరించబడితే, అప్పుడు అవుట్పుట్
ఫైల్ myFile = SD.open(perv);
// ఫైల్ అందుబాటులో ఉంటే, దానికి వ్రాయండి:
అయితే (myFile) {
అయితే (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
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;
}
////////తేదీ మారినట్లయితే, కొత్త తేదీని ప్రదర్శించండి
అయితే (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;
}
////////రేడియో రిసెప్షన్ అందుబాటులో ఉంటే, అప్పుడు
ఉంటే (radio.available(&pipe)) {
////////రిసీవ్ బఫర్ నిండిందో లేదో తనిఖీ చేస్తోంది,
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;
}
}
}
r++;
k++; // కేవలం ఒక కౌంటర్
//////// నిర్దిష్ట ఆవర్తనంతో డేటా అప్డేట్
అయితే (r >= 6500) {
tft.setTextSize(2);
tft.fillRect(0, 41, 180, 64, GRAYD);
Serial.println("లెబెడ్కి 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 నిమిషాలకు SDలోని లాగ్కు డేటాను వ్రాయండి.
అయితే ((t.min % 10 == 0) && (t.sec == 0)) {
tft.setTextSize(1);
tft.setCursor(200, 10);
tft.setTextColor(బ్లాక్);
////////.csv ఆకృతిలో స్ట్రింగ్ను సృష్టిస్తోంది
స్ట్రింగ్ డేటాస్ట్రింగ్ = స్ట్రింగ్ (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, GREEN);
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 నుండి Windows-1251 వరకు రష్యన్ ఫాంట్లను రీకోడ్ చేయండి */
స్ట్రింగ్ utf8rus (స్ట్రింగ్ మూలం)
{
int i,k;
స్ట్రింగ్ లక్ష్యం;
సంతకం చేయని చార్ n;
చార్ m[2] = {'0', ' ' };
k = source.length(); నేను = 0;
అయితే (i < k) {
n = మూలం[i]; i++;
అయితే (n >= 0xC0) {
స్విచ్ (n) {
కేసు 0xD0: {
n = మూలం[i]; i++;
ఒకవేళ (n == 0x81) {n = 0xA8; బ్రేక్; }
ఒకవేళ (n >= 0x90 && n <= 0xBF) n = n + 0x30;//0x2F
బ్రేక్;
}
కేసు 0xD1: {
n = మూలం[i]; i++;
ఒకవేళ (n == 0x91) {n = 0xB8; బ్రేక్; }
అయితే (n >= 0x80 && n <= 0x8F) n = n + 0x70;//0x6F
బ్రేక్;
}
}
}
m[0] = n; లక్ష్యం = లక్ష్యం + స్ట్రింగ్(m);
}
తిరిగి లక్ష్యం;
}Adafruit_GFX లైబ్రరీని ఉపయోగించి సిరిలిక్ అవుట్పుట్ కోసం క్యారెక్టర్ ట్రాన్స్కోడింగ్ ప్రోగ్రామ్ ప్రధాన ప్రోగ్రామ్తో ఒకే ఫోల్డర్లో ఉంచబడుతుంది. మీరు Adafruit_GFXలోని glcdfont.c ఫైల్ని వేరే ఫాంట్తో భర్తీ చేయాలి.
సంగ్రహంగా చెప్పాలంటే, సిస్టమ్ అంచనాలకు అనుగుణంగా ఉందని నేను చెబుతాను, పరికరాల ఆపరేటింగ్ సమయాన్ని పర్యవేక్షించడం సులభం అయింది. ప్రతిదీ బ్రెడ్బోర్డ్లపై సమావేశమైనప్పటికీ, పని గురించి వెంటనే ఫిర్యాదులు లేవు. మొదటి అంశాలు ఆరు నెలలకు పైగా పని చేస్తున్నాయి మరియు శీతాకాలంలో మనుగడ సాగించాయి.
మూలం: www.habr.com