Мазмуну:

Millis () жана PfodAppты колдонуу менен Arduino Дата/Убакыт Чийүү/Кирүү: 11 кадам
Millis () жана PfodAppты колдонуу менен Arduino Дата/Убакыт Чийүү/Кирүү: 11 кадам

Video: Millis () жана PfodAppты колдонуу менен Arduino Дата/Убакыт Чийүү/Кирүү: 11 кадам

Video: Millis () жана PfodAppты колдонуу менен Arduino Дата/Убакыт Чийүү/Кирүү: 11 кадам
Video: Функция Arduino Millis поясняется 3 примерами 2024, Июль
Anonim
Millis () жана PfodAppты колдонуу менен Arduino Date/Time Plotting/Logging
Millis () жана PfodAppты колдонуу менен Arduino Date/Time Plotting/Logging

Эч кандай Arduino же Android программалоо талап кылынбайт. RTC жана GPS модулдары дагы колдоого алынат. Убакыт алкактары үчүн автоматтык оңдоо, RTC дрейф жана GPS секирүү секунддары жок

Киришүү

Бул окуу куралы pfodApp аркылуу Android мобилдик телефонуңузда датаны жана убакытты салыштыруу үчүн Arduino millis () убакыт белгилерин кантип колдонууну көрсөтөт.

Ардуино же Android программалоо талап кылынбайт. pfodApp ошондой эле кийинчерээк электрондук жадыбалда дата/убакыт сюжеттерин кайра чыгаруу үчүн жетиштүү маалыматтарды каттайт.

NO RTC же GPS модулунун кереги жок, бирок эгер сиздин Arduino долбооруңузда RTC (Real Time Clock) же GPS модулу болсо, аларды да колдонсо болот. Мындай учурларда pfodApp сюжеттери автоматтык түрдө убакыт алкагын, RTC дрейфин жана GPSти секирип кетүүчү секунда үчүн түзөтөт. Бул түзөтүүлөр үчүн атайын Arduino коду талап кылынбайт. Ар дайым pfodApp менен болгондой эле, алынган маалыматтар такталган бойдон жазылат, бирок журнал файлында журналдарды компьютериңизге жүктөп жатканда бул оңдоолорду өзүңүз колдонууга уруксат берүү үчүн жетиштүү маалымат камтылган. Бул пост-иштетүү мисалдары үчүн төмөндө караңыз.

Убакыттын жана күндүн X огунун форматынын ар түрдүүлүгү колдоого алынат, алардын бардыгы Arduino эскизиндеги кыска текст саптары менен толук көзөмөлдөнөт. Эч кандай Android программалоо талап кылынат.

pfodApp WiFi, Bluetooth Classic, BLE жана SMS аркылуу туташат. Акысыз pfodDesigner ар кандай такталарга туташуу үчүн дата/убакыт пландоо/жазуу үчүн толук Arduino эскиздерин түзөт. Ардуино программалоосу талап кылынбайт.

Бул көрсөтмө Adafruit Feather52ди BLE аркылуу туташкан Arduino тактасы катары колдонот.

Бул көрсөтмө үч учурду камтыйт:- 1) Сиздин микропроцессордук долбооруңузда миллисекунд убакыт белгилери гана бар- миллис () 2) Сиздин микропроцессордук долбооруңузда реалдуу убакыт сааты (RTC) бар- pfodApp дрейфти автоматтык түрдө оңдойт. 3) Сиздин микропроцессордук долбооруңузда GPS модулу бар - pfodApp секунда секундасына келип чыккан сайын автоматтык түрдө оңдойт (учурда 2018 -жылдагыдай 18 сек).

1 -кадам: Arduino Millisecond Timestamps колдонуу, Millis ()

Күн жана убакыт үчүн миллисекунддарды колдонуунун эки бөлүгү бар. Бири өткөн убакытка же датага/убакытка каршы маалыматтарды пландоо үчүн, ал эми экинчи бөлүгү-бул миллисекунддук убакыт белгисине кирген датаны жана убакытты кайра түзүү. pfodApp pfodDevice (Arduino микро) алынган чийки маалыматтарды өзгөртпөйт. Бул жөн эле алынган байттарды каттайт.

Адегенде микрофонуңуз үчүн Arduino эскизин түзүү үчүн акысыз pfodDesigner колдонуңуз, ал миллисекунддарды жана маалыматтарды өлчөөнү pfodAppка пландоо/каттоо үчүн жөнөтөт. Бул мисал Adafruit Feather 52 BLE тактасы үчүн менюну түзөт, анда A0 жазылат. Adafruit Feather nRF52 LE боюнча үйрөткүч - pfodApp менен бажы көзөмөлү pfodDesigner баскычтарынан өтүп, Feather nRF52 үчүн Диаграмма баскычын камтыган менюну түзөт, андыктан аны текшерип алыңыз. Бул үйрөткүчтө биз диаграмманын баскычын гана кошобуз жана A0 окууларын өткөн убакытка жана датага/убакытка салыштыруу үчүн жаңы X огунун форматын колдонобуз.

Бул окуу куралынын биринчи бөлүгү pfodDesigner аркылуу Android мобилдик телефонуңузда күн/убакыт диаграммасынын үлгүсүн түзөт. Дисплейге канааттанганыңызда, pduodApp менен туташканда, аны кайра чыгаруучу Arduino эскизин түзө аласыз. Эч кандай Android программалоо талап кылынбайт жана pfodDesigner Arduino такталарынын ар кандай түрлөрү үчүн толук Arduino эскиздерин түзгөндүктөн, Arduino программалоосу дагы талап кылынбайт.

2 -кадам: Менюга диаграмма кошуу

Менюга диаграмма кошуу
Менюга диаграмма кошуу
Менюга диаграмма кошуу
Менюга диаграмма кошуу
Менюга диаграмма кошуу
Менюга диаграмма кошуу
Менюга диаграмма кошуу
Менюга диаграмма кошуу

Google Playден pfodDesigner колдонмосун жүктөп алыңыз, аны ачыңыз жана "Жаңы менюну баштоо" баскычын чыкылдатыңыз.

Кээ бир 11 BLE такталарынын тизмесин көрсөтүү үчүн "Максаттуу серияны", андан кийин "Bluetooth аз энергия" баскычын чыкылдатыңыз (башка тандоолорду көрүү үчүн ылдый жылыңыз). Adafruit Bluefruit Feather52 боюнча тандаңыз.

Түзөтүү менюсуна кайтыңыз жана "Түзөтүү чакыруусун" чыкылдатыңыз жана бул менюга ылайыктуу чакырыкты орнотуңуз, мис. "Feather52" жана калың текст +7. Фондун түсү "демейки" Ак бойдон калды

Артка кайтып, "Меню пунктун кошууну" чыкылдатыңыз, ылдый жылдырып, диаграмма баскычын түзөтүү экранын ачкан "Диаграмма баскычын" тандаңыз. Бул жерде баскычтын сырткы көрүнүшүнө кандайдыр бир өзгөртүү киргизе аласыз. Бул учурда баскычтын тексти "Күндүн/А0нун графиги" деп өзгөртүлүп, башка демейки абалында калтырылган.

Бул менюда диаграмма экранын ачуучу баскычты берет.

3 -кадам: Сюжеттин булагын жана линияларын оңдоо

Сюжеттин булагын жана линияларын оңдоо
Сюжеттин булагын жана линияларын оңдоо
Сюжеттин булагын жана линияларын оңдоо
Сюжеттин булагын жана линияларын оңдоо
Сюжеттин булагын жана линияларын оңдоо
Сюжеттин булагын жана линияларын оңдоо
Сюжеттин булагын жана линияларын оңдоо
Сюжеттин булагын жана линияларын оңдоо

"Дата/Убакыт участогу A0" баскычын чыкылдатып, графикалык энбелгиге, X огунун форматына, сюжеттин маалымат интервалына жана (ылдый жылдыруу менен) сюжеттин жөндөөлөрүнө кире турган Түзөтүү пландарын экранды ачыңыз. Диаграмма этикеткасын ылайыктуу нерсеге түзөтүңүз, мис. "A0 вольт".

Ылдый жылып, 2 жана 3 -участоктор үчүн Түзөтүү участогун ачыңыз жана диаграмманын дисплейинен алып салуу үчүн Сюжеттин Жашыруусун чыкылдатыңыз.

Андан кийин "1 -участокту түзөтүү" баскычын чыкылдатып, сюжет этикетин (мис. A0), yAxis бирдиктерин (мис. Вольт) коюңуз, максимум 3.6V көрсөтүңүз жана I/O пин A0 менен туташыңыз.

Артка жылып, "Диаграмманы алдын ала көрүү" баскычын чыкылдатып, эң акыркы 0 үлгү маалымат чекитине, 1 сек интервалда, өткөн убакытка каршы мүнөт: сек.

Бардык өткөн убакыт үчүн нөл бирдиктерин алып келген сюжеттер көрсөтүлбөйт, андыктан бул сюжетте> 1мин убакыты гана көрсөтүлгөн.

4 -кадам: Күн/убакыт форматын тандоо

Күн/убакыт форматын тандоо
Күн/убакыт форматын тандоо
Күн/убакыт форматын тандоо
Күн/убакыт форматын тандоо
Күн/убакыт форматын тандоо
Күн/убакыт форматын тандоо

Өткөн убакыт сюжеттери үчүн убакыт өткөн сайын алдыңкы бирдик көбөйүп баратат. Мунун мисалын көрүү үчүн, "Сюжеттерди түзөтүү" экранына кайтыңыз жана Сюжеттин маалымат аралыгын 15 мүнөткө чейин көбөйтүңүз (бул экрандын асты)

Андан кийин ошол эле үлгүдөгү маалыматтарды көрсөтүү үчүн диаграмманы алдын ала көрүү баскычын чыкылдатыңыз, бирок азыр үлгүлөрдүн ортосунда 15 мүнөт интервал менен. Көрүнүп тургандай, мм: ssтин мүнөттүк бөлүгү өсүп баратат.

Эми артка кайтып, X огунун баскычын чыкылдатып, мүмкүн болгон X огунун маалыматтарынын/убакыт форматтарынын кичине тандоосун көрсөтүңүз (дагы ылдый сыдырыңыз)

Жогоруда ар кандай X огунун форматтарын колдонуу менен диаграмманы алдын ала көрүү тандоосу бар.

Бул жерде көрсөтүлгөн күн/убакыт графиктери "жергиликтүү" убакыт алкагында. UTCте датаны/убакытты пландаштыруу үчүн форматтын параметрлери да бар. Мүмкүн болгон дата/убакыт форматтарынын толук топтомун pfodSpecification.pfd караңыз.

5 -кадам: Arduino эскизин түзүңүз жана сынап көрүңүз

Arduino эскизин түзүңүз жана сынап көрүңүз
Arduino эскизин түзүңүз жана сынап көрүңүз
Arduino эскизин түзүңүз жана сынап көрүңүз
Arduino эскизин түзүңүз жана сынап көрүңүз

Диаграммаңыздын форматына жана маалымат интервалына ыраазы болгондон кийин, "Түзөтүү Меню_1" экранына өтүп, ылдый жылдырып, "Код түзүү" сиз тандаган максаттуу такта үчүн. Бул жерде Adafruit Feather52 үлгүсүнүн эскизи 1сек маалымат интервалын жана мм: ss өткөн убакыт форматын, pfodFeather52_timeplot.ino

Жогоруда Feather52ден A0 сюжети бар

Форматты Weekday hr: mins: sec (~ E HH: mm: ss) кылып өзгөртүү жана кодду кайра өндүрүү (pfodFeather52_dateplot.ino) жогоруда көрсөтүлгөндөй сюжет берет.

Сиз X огунун форматын кийинки сүрөттөлгөндөй Arduino эскизинде түзөтө аласыз.

6 -кадам: PfodApp миллисинен датаны/убакытты кантип көрсөтөт ()?

PfodApp туташканда, ал өзүнүн "жергиликтүү" жана UTC убактысын эстейт жана pfodDeviceтин (Arduino тактасынын) учурдагы сюжет маалыматтарынын убакыт белгилерин сурайт. Бул маалыматты колдонуу менен pfodApp кийин миллисекунддук убакыт белгилерин өткөн убакыт катары, башкача айтканда миллисекунддарды саат мүн. Сек.

Arduino тарабынан түзүлгөн эскизди карасаңыз (мис. PfodFeather52_dateplot.ino), сюжеттердин Arduino тарабын башкарган үч кичине код бар.

PfodAppтын {@} учурдагы өтүнүчүн иштетүүчү loop () коду бөлүмү

// иштетүү {@} request} else if if ('@' == cmd) {// pfodApp "учурдагы" убакытты суранды plot_mSOffset = millis (); // учурдагы миллисти офсеттик rawdata убакыт белгилери катары кармоо parser.print (F ("{@` 0} ")); // "0" чийки маалымат миллисекунд катары кайтаруу

Сиз миллис () учурдагы маанисин кайтарып берсеңиз болот, бирок millis () ар 49.7 күндө 0ге чейин оролот, бул сюжет артка секирет. Демек, анын ордуна код {@} сурамы берилген учурдагы миллис () маанисин эстейт жана {@`0} башкача айтканда, учурдагы миллисекунд убакыты нөлүн кайтарат. Анан эскиз колдонгон rawdata пункттарын жөнөтүүдө

plot_1_var = analogRead (A0); // сюжетке киргизүүнү окуу // plot_2_var сюжети Жашырылган, ошондуктан бул жерде дайын жок ….

Ошентип, маалыматтар менен жөнөтүлгөн миллисекунд убакыт белгиси 0ден башталат жана 49.7күнгө чейин жогорулайт. Эгерде сиз 49.7күн үзгүлтүксүз байланышта болсоңуз, анда сюжет ~ 50күн артка секиргенин көрөсүз. Ар бир 49.7 күндө бир жолу ажыратуу жана кайра туташтыруу муну алдын алат.

Күн/убакыт сюжетинин үчүнчү бөлүгү - сюжет билдирүүсү.

} else if ('A' == cmd) {// user pressed - 'Date/Time plot of A0' // // Menu_1нун башкы менюсунда // графикти кайтаруу боюнча билдирүү. parser.print (F ("{= A0 Volts ~ E HH: mm: ss | дата | A0 ~~~ Вольт ||}"));

Колдонуучу "A0 дата/убакыт схемасы" баскычын басканда, pfodApp pfodDevice'ге {A} cmd жөнөтөт жана pfodDevice сюжет билдирүүсү менен жооп берет, {=… {= A0 Вольт ~ E HH: mm: ss | дата | A0 ~~~ Вольт ||}, анын ичинде X огунун форматы E HH: mm: ss

Java SimpleDateFormat форматтары бул жерде кабыл алынат. pfodApp Маалыматтарды каттоо жана плоттоо жана pfodSpecification.pdf сюжеттик билдирүү боюнча көбүрөөк маалыматка ээ.

7 -кадам: Компьютериңиздеги Күн/Убакыт графиктерин кайра чыгаруу

Компьютериңиздеги Күн/Убакыт графиктерин кайра чыгаруу
Компьютериңиздеги Күн/Убакыт графиктерин кайра чыгаруу
Компьютериңиздеги Күн/Убакыт графиктерин кайра чыгаруу
Компьютериңиздеги Күн/Убакыт графиктерин кайра чыгаруу
Компьютериңиздеги Күн/Убакыт графиктерин кайра чыгаруу
Компьютериңиздеги Күн/Убакыт графиктерин кайра чыгаруу

Демейки боюнча, pfodApp бардык кирүүчү маалыматтарды мобилдик телефонуңуздагы журнал файлына каттайт, эгерде сиз бул байланышты түзөтүү экранында өчүрбөсөңүз, pfodAppForAndroidGettingStarted.pdf караңыз

PfodAppты түзөткөнүңүздө, журнал файлынын жайгашкан жери жана аты жазылган кыска билдирүү пайда болот, мис. /pfodAppRawData/pfod_bluefruit52.txt Бул файл CSV форматында, үтүр менен ажыратылган жана аны компьютериңизге өткөргөндөн кийин (өткөрүп берүү параметрлери үчүн pfodAppForAndroidGettingStarted.pdf караңыз), сиз маалыматты графикке ачуу үчүн электрондук жадыбалда ачсаңыз болот.

Бул жерде журнал файлынын алгачкы бир нече саптары бар.

// pfodApp V3.0.360, жергиликтүү убакыт, UTC, күнүнө mS, pfod bluefruit52 учурдагы убактысы (mS), pfod bluefruit52 учурдагы убакыт, // туташкан, 2019/04/20 11: 32: 50.238, 2019/04/20 01: 32: 50.238, 86400000, 0, 366, 0.25,, 1366, 0.29,, 2366, 0.31,, 3366, 0.33,, 4366, 0.33,, Жогоруда pfodApp Feather52 менен туташкан "жергиликтүү" жана UTC убактысын жана Feather52 {@..} жообу аркылуу билдирген mS учурдагы убактысын көрө аласыз. Акыркы мамыча бош, анткени эч кандай RTC же GPS жок жана ж.

Өткөн убакытка каршы маалыматтарды пландаштыруу үчүн, миллисекунддук убакыт штампынан учурдагы убакытты (mS) алып салгыла, андан кийин күнүмдүк мске бөлгүлө. Бул жерде формула кошулган жана табылган жыйынтык менен электрондук жадыбал. Төмөндөгү жадыбал (pfod_bluefruit52.xls) Excel форматында сакталган OpenOffice таблицасы.

OpenOfficeте сюжет чачыранды сюжет жана сюжеттин х огу HH: MM: SS Эскертүү: электрондук жадыбалдын датасы/убактысынын форматтары pfodApp тарабынан колдонулган сюжеттин форматтары менен ЭМЕС. Мисалы, pfodAppта, MM - айлар, мм - мүнөт.

Күнгө жана убакытка каршы план түзүү үчүн, байланыш убактысын жадыбалдын убактысына кошуп, кайра көчүрүү керек. (pfod_bluefruit52_date.xls)

Эскертүү: Жергиликтүү убакыт жана UTC менин таблицама текст катары импорттолгон, андыктан аларды формулада колдонуудан мурун алдыңкысын алып салуу керек болчу.

8 -кадам: 49.7day Millis () чегинен кантип сактануу керек жана эмне үчүн болбойт

Жогоруда айтылгандай, pfodApp дата/убакытты миллисден () кантип көрсөтөт ?, эгер сиз 49.7 күндөн ашык үзгүлтүксүз туташып турсаңыз, миллисекунд убакыт белгилери нөлгө чейин оролот. Коддун бир нече саптары муну алдын алат, бирок сунушталбайт.

Биринчиден, оролуп калуудан кантип сактануу керек. Убакыт белгилеринин канча жолу оролгонун жана HEXке бириккен натыйжаны басып чыгарууну көзөмөлдөө үчүн дагы бир белгисиз int өзгөрмөсүн кошуңуз.

uint_t mSwrapCount = 0; uint32_t lastTimeStamp = 0;

… Plot_1_var = analogRead (A0); // сюжетке киргизүүнү окуу // plot_2_var сюжет Жашырылган, андыктан бул жерде дайын жок // plot_3_var сюжет Жашырылган, ошондуктан бул жерде дайын жок // сюжеттин маалыматын CSV форматында жөнөтүү uint32_t timeStamp = millis ()-plot_mSOffset; if (timeStamp <lastTimeStamp) {// timeStamp 0 mSwrapCount ++ чейин кайра оролгон; // санап кошуу} lastTimeStamp = timeStamp; parser.print ("0x"); parser.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // HEXтеги миллисекундтардагы убакыт….

{@.. жоопту кайтарууда mSwrapCountту тазалаңыз.

// иштетүү {@} request} else if if ('@' == cmd) {// pfodApp "учурдагы" убакытты суранды plot_mSOffset = millis (); // учурдагы миллисти басып алуу rawsata убакыт белгилери mSwrapCount = 0; // ороонун так саны. parser.print (F ("{@` 0} ")); // "0" чийки маалымат миллисекунд катары кайтаруу

Убакыт белгилери кийинки 40.7days * 65536 ~ = 7308 жыл үчүн "туура" маанисин берет.

pfodApp пландоо үчүн он алтылык убакыт белгилерин автоматтык түрдө айландырат жана аларды так түшкөндөй, башкача айтканда он алтылыкта жаздырат. (OpenOffice) таблицасында сиз бул формуланы алты бурчтуу сапты A2де mSке айландыруу үчүн колдоносуз (бул жерде A1 бош уяча) = HEX2DEC (REPLACE (A2; 1; 2; A1))

Эмнеге муну кылгың келбейт

Жогоруда көрсөтүлгөндөй, mS убакыт белгилерин 50 күндөн узартуу оңой. Бирок, балким, сиз муну кылгыңыз келбейт, анткени алар барган сайын такталбай калат. Милли () жыйынтыктарын түзүү үчүн колдонулган типтүү 16 МГц кристаллынын тактыгы ~ 50ppm (миллионго бөлүк). Бул 49.7 күндөн кийин миллисекунд убакыт белгиси 3 ½ мүнөткө чейин чыгып кетиши мүмкүн экенин билдирет жана бул кристаллдын тактыгына температуранын таасирин этибарга албайт.

Кыска туташуу мезгилинде, бул тактык көйгөй эмес, анткени {@.. жооп миллисекунддук убакыт белгисин мобилдик телефондун датасына/убактысына кайра синхрондоштурат. Бирок, эгер сиз узак убакытка (күндөргө) байланышта болуп, маалыматтарды тынымсыз каттап тургуңуз келсе, анда RTC же GPS модулу сыяктуу миллиске () караганда такыраак нерсени колдонушуңуз керек.

9 -кадам: RTC колдонуу (Real Time Clock)

RTC (реалдуу убакыт сааты) колдонуу
RTC (реалдуу убакыт сааты) колдонуу
RTC (реалдуу убакыт сааты) колдонуу
RTC (реалдуу убакыт сааты) колдонуу

Бир катар RTC модулдары бар, тагыраагы DS3231 ж. Adafruitтин DS3231 модулу. Белгиленген тактык +/- 2ppm 0ден 40Ске чейин. башкача айтканда ~ +/- 5 сек/ай.

Эгерде сиз дата/убакыттын белгилери бар маалыматтарды пландаштыргыңыз келсе, мис. 2019/04/19 20: 4: 34, анда учурдагы датаны/убакытты кайтаруу үчүн {@ жообун өзгөртүү керек, мис. {@`0 ~ 2019/4/19 3: 33: 5}. Бул жерде сиз RTClib китепканасын колдонуп жатканыңызды жана RTC модулун инициализациялаган кодду кошконуңузду эске алып, pfodDesigner RTC модулун колдонуу үчүн түзүлгөн эскизге колдонуу үчүн кээ бир үлгү коддору.

// иштетүү {@} request} else if if ('@' == cmd) {// pfodApp "учурдагы" убакытты суранды plot_mSOffset = millis (); // учурдагы миллисти басып чыгаруучу rawdata убакыт белгилери parser.print (F ("{@` 0 "}); //" 0 "учурдагы" чийки маалымат миллисекунддары parser.print ('~') катары кайтаруу; // баштоо сабы дата/убакыт DateTime азыр = rtc.now () sendDateTime (& азыр); // yyyy/M/d/H: m: s жөнөтүү parser.print, даректи жана арг. parser.print ('}') катары жөнөтүү; // аягы {@ жооптун мисалы {@ `0 ~ 2019/4/19 3: 33: 5}….

// дата убактысын талдоочуга жөнөтүү printVoid sendDateTime (DateTime* dt) {parser.print (dt-> жыл (), DEC); parser.print ('/'); parser.print (dt-> ай (), DEC); parser.print ('/'); parser.print (dt-> day (), DEC); parser.print (''); parser.print (dt-> саат (), DEC); parser.print (':'); parser.print (dt-> мүнөт (), DEC); parser.print (':'); parser.print (dt-> second (), DEC); }

жараксыз sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // сюжет маалыматынын таймерин, дрифтсиз кайра баштоо // өзгөрмөлөрдү цикл өзгөрмөлөрүңүздөн чийүү үчүн баалуулуктарды дайындоо же ADC киргизүүлөрүн окуу plot_1_var = analogRead (A0); // сюжетке киргизүүнү окуу // plot_2_var сюжет Жашырылган, андыктан бул жерде дайын жок // plot_3_var сюжет Жашырылган, андыктан бул жерде дайын жок // сюжет маалыматтарын CSV форматында жөнөтүү DateTime now = rtc.now (); sendDateTime (& азыр); // yyyy/M/d/H: m: s жөнөтүү parser.print, дарегин жана аргумент катары. parser.print (','); parser.print (((калкып чыгуу) (plot_1_var - plot_1_varMin)) * plot_1_ масштабдуу + plot_1_varDisplayMin); parser.print (','); // 2 -участок жашырылган. Маалымат жөнөтүлгөн жок. parser.print (','); // 3 -участок жашырылган. Маалымат жөнөтүлгөн жок. parser.println (); // CSV маалымат жазуусунун аягы}}

~ 2019/4/19 3: 33: 5 {@ жооптун бөлүгү pfodAppка pfodDevice учурдагы күн жана убакыт деп ойлогонун билүүгө мүмкүнчүлүк берет. Сиздин эскиз анда yMd Hms убакыт белгилери менен маалыматтарды жөнөтө алат жана pfodApp сиз белгилеген X огунун форматына жараша аларды туташуу убактысынан тартып ЖЕ датасы жана убактысы катары пландаштырат.

Күнгө жана убакытка каршы пландаштырууда, pfodApp пландоо тартиби pfodDevice'дин учурдагы убактысын уюлдук телефондун учурдагы убактысы менен салыштыруу аркылуу РТКдагы ар кандай "дрейфти" оңдойт. Бул оңдоо RTCди мобилдик телефонуңуздун жергиликтүү убакыт алкагынан башка убакыт алкагына коюп жатат. millis () убакыт белгилери Arduino миллисекунд убакыт белгилерин колдонуудагыдай иштөөнү улантууда, 5 -кадам.

Бул жерде 8 күндүн ичинде бөлмө температурасынын мисал жадыбалы, Office_Temp.xls Журнал файлы импорттолгон кезде текстти күнгө/убакытка айландыруу үчүн биринчи тилке YMD катары белгиленген. Электрондук жадыбал аларды даталар жана убакыттар катары чечмелеши үчүн, жергиликтүү убакытты, UTC жана Office Temp учурдагы убакыт жазууларын алып салуу керек.

PfodApp көрсөткөн сюжетти алуу үчүн, "Түзөтүлгөн күндү/убакытты" эсептөө керек. Бул учурда RTC убактысы мобилдик телефондун жергиликтүү убактысынан 2 секунда артта калат, ошондуктан чыныгы жергиликтүү убакытты алуу үчүн ар бир RTC убакыт белгиси кошулат (жергиликтүү убакыт - Office Temp учурдагы убактысы).

Өткөн убакыт сюжеттери үчүн, жаңы датаны камтыган (дата/убакыттын тамгасы-Office Time учурдагы убактысы) жана муну диаграммада X огу катары колдонуңуз (Office_TempElapsed.xls) Чындыгында бул учурда, pfodApp өткөн жакшы графиктерди чыгарат күндөрдө саат: мүнөт: сек.

10 -кадам: GPS модулун колдонуу

GPS модулун колдонуу RTC модулун колдонууга окшош, бирок GPS модулдарында миллисекундтар бар, жылдар 2000 -жылы башталат жана UTC секирүү секунддары жок (https://tycho.usno.navy.mil/leapsec.html караңыз)) GPS датасы жана убактысы 2018 -жылдын январында UTCтен 18 секунда алдыда.

Adafruit Ultimate GPS үчүн Adafruit GPS китепканасы, RTClibден айырмаланып, 2000 жылдык ордун GPS жылдарына кошпойт, андыктан датаны жана убакытты көрсөткөндө аны кошуу керек. GPS китепканасы узак мөөнөттүү тактыкка ээ болгон миллисекунддарды камсыз кылса да, алар анча так эмес. GPS убактысынын жаңыртуулары ар бир 100 мСте бир жолу болот, андан кийин сериялык маалыматтарды жай 9600 байда кабыл алууда кошумча кечигүү жана аны талдоонун дагы бир кечигүүсү болот. Мунун баары маалыматтарды окууну убакыт белгилөөдө миллисекунддун тактыгына кошот.

Бул жерде pfodDesigner GPS модулун колдонуу үчүн түзүлгөн эскизге колдонулуучу кээ бир үлгү коддору бар, эгер сиз Adafruitтин GPS китепканасын колдонуп жатсаңыз жана билдирүүлөрдү GPS объектисине кабыл алуу жана талдоо үчүн кодду кошкон болсоңуз.

// иштетүү {@} request} else if if ('@' == cmd) {// pfodApp "учурдагы" убакытты суранды plot_mSOffset = millis (); // учурдагы миллисти басып чыгаруучу rawdata убакыт белгилери parser.print (F ("{@` 0 "}); //" 0 "учурдагы" чийки маалымат миллисекунддары parser.print ('~') катары кайтаруу; // баштоо сабы дата/убакыт sendDateTime (& GPS); // yyyy/M/d/H: m: s жөнөтүү parser.print, даректи берүү жана арг. parser.print ('}') катары; // {@ жооптун аягы ж. {@`0 ~ 2019/4/19 3: 33: 5}….

// дата убактысын printvoid sendDateTime (Adafruit_GPS* gps) {parser.print (F ("20"); // 20.. жыл parser.print (gps-> жыл, DEC); parser.print ('/ '); parser.print (gps-> ай, DEC); parser.print ('/'); parser.print (gps-> day, DEC); parser.print (' '); parser.print (gps- > саат, DEC); parser.print (':'); parser.print (gps-> мүнөт, DEC); parser.print (':'); parser.print (gps-> экинчи, DEC); // parser.print ('.'); эгер миллисекунддарды жөнөтсөңүз // эгер сиз MS жөнөтүүнү кааласаңыз, gps-> миллисекунддун маанисин алдыңкы нөлдөр менен толтурушуңуз керек // б.а. 3 үчүн 003} толтурулушу керек}

жараксыз sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // сюжет маалыматынын таймерин, дрифтсиз кайра баштоо // өзгөрмөлөрдү цикл өзгөрмөлөрүңүздөн чийүү үчүн баалуулуктарды дайындоо же ADC киргизүүлөрүн окуу plot_1_var = analogRead (A0); // сюжетке киргизүүнү окуу // plot_2_var сюжет Жашырылган, андыктан бул жерде дайын жок // plot_3_var сюжет Жашырылган, андыктан бул жерде дайын жок // сюжет маалыматтарын CSV форматында жөнөтүү sendDateTime (& GPS); // yyyy/M/d/H: m: s жөнөтүү parser.print, дарегин жана аргумент катары. parser.print (','); parser.print (((калкып чыгуу) (plot_1_var - plot_1_varMin)) * plot_1_ масштабдуу + plot_1_varDisplayMin); parser.print (','); // 2 -участок жашырылган. Маалымат жөнөтүлгөн жок. parser.print (','); // 3 -участок жашырылган. Маалымат жөнөтүлгөн жок. parser.println (); // CSV маалымат жазуусунун аягы}}

Күнгө жана убакытка каршы план түзүүдө, pfodApp секунданын ичинде автоматтык түрдө оңдолот. 2018 -жылдын январына карата GPS убактысы UTCден 18 сек алдыда. pfodApp муну уюлдук телефондун UTC датасы жана убактысы менен {@ жооп аркылуу туташуу боюнча GPS кайтарган күндү/убакытты салыштыруу менен түзөтөт. PfodApp журнал файлынан электрондук жадыбалда сюжеттерди түзүү жогорудагы RTC модулдары менен бирдей. GPS убакыт белгилерине (жергиликтүү убакыт - Office Temp учурдагы убактысын) кошуу секирик секунддарды түзөтөт.

millis () убакыт белгилери Arduino миллисекунд убакыт белгилерин колдонуудагыдай иштөөнү улантууда, 5 -кадам.

11 -кадам: Жыйынтык

Android мобилдик телефонуңузда pfodApp колдонуу Ардуинонун миллис () функциясын колдонуп, маалыматтарды датага жана убакытка же өткөн убакытка каршы түзүүгө мүмкүндүк берет. PfodApp журналы файлын колдонуп, сиз бул датаны/убакытты электрондук жадыбалда кайра өндүрө аласыз. Эгерде сиздин Arduino долбооруңузда RTC модулу бар болсо, анда сиз RTC 'дрейфин' автоматтык түрдө оңдоп, күндү жана RTC убактысынын белгилерин жаза аласыз. Эгерде сизде Arduino проектисинде GPS модулу бар болсо, анда анын так убакыт белгилерин жазып, пландап алсаңыз болот жана pfodApp GPSтин секирүү секундун автоматтык түрдө оңдойт.

Бардык учурларда, сиздин Arduino долбооруңуздун чийки маалыматтары так алынган сыяктуу жазылат. Бирок pfodApp журналынын файлы жүктөлгөн журнал файлынан бул оңдоолорду электрондук жадыбалда кайра чыгарууга мүмкүндүк берүү үчүн кошумча маалыматтарды камтыйт.

Android коддоосу талап кылынбайт. Сюжеттин форматтары Arduino эскизиндеги кичинекей текст саптары менен көрсөтүлгөн. Акысыз pfodDesigner WiFi, Classic Bluetooth, BLE жана SMS аркылуу туташкан Arduino такталарынын ар кандай түрлөрү үчүн толук Arduino маалыматын жазуу жана эскиздерин түзөт.

Сунушталууда: