Indholdsfortegnelse:

Arduino dato/tid plotte/logge ved hjælp af Millis () og PfodApp: 11 trin
Arduino dato/tid plotte/logge ved hjælp af Millis () og PfodApp: 11 trin

Video: Arduino dato/tid plotte/logge ved hjælp af Millis () og PfodApp: 11 trin

Video: Arduino dato/tid plotte/logge ved hjælp af Millis () og PfodApp: 11 trin
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Juli
Anonim
Arduino Dato/Tid Plotning/Logning ved hjælp af Millis () og PfodApp
Arduino Dato/Tid Plotning/Logning ved hjælp af Millis () og PfodApp

Ingen Arduino- eller Android -programmering påkrævet. RTC- og GPS -moduler understøttes også. Automatisk korrektion for tidszoner, RTC -drift og GPS mangler spring -sekunder

Introduktion

Denne vejledning viser dig, hvordan du bruger dine Arduino millis () tidsstempler til at plotte data mod dato og klokkeslæt på din Android -mobil ved hjælp af pfodApp.

Ingen Arduino- eller Android -programmering påkrævet. pfodApp logger også tilstrækkelige data, så du senere kan gengive dato/klokkeslæt i et regneark.

INGEN RTC eller GPS -modul er påkrævet, men hvis dit Arduino -projekt har et RTC (Real Time Clock) eller et GPS -modul, kan de også bruges. I disse tilfælde vil pfodApp -plots automatisk korrigere for tidszone, RTC -drift og GPS, der mangler spring -sekunder. Der kræves ingen særlig Arduino -kode til disse rettelser. Som altid med pfodApp logges de modtagne data nøjagtigt, som de er, ikke-korrigerede, men logfilen indeholder også tilstrækkelige oplysninger til, at du selv kan anvende disse rettelser, når du downloader logfilerne til din computer. Se nedenfor for eksempler på denne efterbehandling.

En bred vifte af tid og dato X-akseformatering understøttes, som alle er fuldstændigt styret af korte tekststrenge i din Arduino-skitse. Ingen Android -programmering er påkrævet.

pfodApp opretter forbindelse via WiFi, Bluetooth Classic, BLE og SMS. Den gratis pfodDesigner genererer komplette Arduino -skitser til planlægning/logning af dato/tid for at oprette forbindelse til en lang række forskellige brædder. Ingen Arduino -programmering er påkrævet.

Denne instruktør vil bruge en Adafruit Feather52 som eksempel Arduino -bord, der forbinder via BLE.

Denne instruktør dækker tre tilfælde:- 1) Dit mikroprocessorprojekt har kun tidsstempler i millisekunder- millis () 2) Dit mikroprocessorprojekt har et Real Time Clock (RTC)- pfodApp korrigerer automatisk for drift. 3) Dit mikroprocessorprojekt har et GPS -modul - pfodApp korrigerer automatisk i springsekunder, når de opstår (i øjeblikket 18 sekunder pr. 2018).

Trin 1: Brug af Arduino Millisecond tidsstempler, Millis ()

Der er to dele til at bruge millisekunder til dato og tid. Den ene er til at plotte dataene mod enten forløbet tid eller dato/tid, og den anden del genskaber dato og klokkeslæt fra de loggede rawdata millisekund tidsstempler. pfodApp ændrer ikke rådata modtaget fra pfodDevice (Arduino mikro). Det logger bare nøjagtigt de modtagne bytes.

Brug først den gratis pfodDesigner til at generere en Arduino -skitse til din mikro, der sender millisekunder og datamålinger til pfodApp til plotting/logning. Dette eksempel opretter en menu til Adafruit Feather 52 BLE -tavlen, der læser A0. Vejledningen om Adafruit Feather nRF52 LE - Custom Controls med pfodApp går igennem pfodDesigner -trinene for at oprette en menu til Feather nRF52, der indeholder en Chart -knap, så tjek den for flere detaljer. I denne vejledning tilføjer vi kun en diagramknap og bruger de nye X-akseformatindstillinger til at plotte A0-aflæsninger mod forløbet tid og dato/tid.

Den første del af denne vejledning gennemgås ved hjælp af den gratis pfodDesigner til at oprette et eksempel på dato/tid -diagram på din Android -mobil. Når du er tilfreds med displayet, kan du generere Arduino -skitsen, der gengiver det, når du opretter forbindelse til pfodApp. Ingen Android -programmering er påkrævet, og da pfodDesigner genererer komplette Arduino -skitser til en lang række Arduino -tavler, er det heller ikke nødvendigt med Arduino -programmering.

Trin 2: Tilføjelse af et diagram til menuen

Tilføjelse af et diagram til menuen
Tilføjelse af et diagram til menuen
Tilføjelse af et diagram til menuen
Tilføjelse af et diagram til menuen
Tilføjelse af et diagram til menuen
Tilføjelse af et diagram til menuen
Tilføjelse af et diagram til menuen
Tilføjelse af et diagram til menuen

Download pfodDesigner -appen fra Google Play, åbn den og klik på "Start ny menu"

Klik på "Target Serial" og derefter på "Bluetooth Low Energy" -knappen for at få vist listen over nogle 11 BLE -tavler (rul ned for at se de andre valg). Vælg på Adafruit Bluefruit Feather52.

Gå tilbage til redigeringsmenuen, klik på "Rediger prompt" og indstil en passende prompt til denne menu, f.eks. “Feather52” og fed skrift og størrelse +7. Baggrundsfarven blev efterladt som 'standard' hvid

Gå tilbage og klik på "Tilføj menupunkt", rul ned og vælg "Diagramknap", som åbner redigeringsskærmen for diagramknapper. Du kan foretage enhver ændring af knappens udseende her. I dette tilfælde blev knappens tekst ændret til “Dato/tid -plot for A0”, og de andre standardindstillinger blev efterladt som de er.

Dette giver dig en knap i menuen, der åbner diagramskærmen.

Trin 3: Redigering af plottkilde og etiketter

Redigering af plottkilde og etiketter
Redigering af plottkilde og etiketter
Redigering af plottkilde og etiketter
Redigering af plottkilde og etiketter
Redigering af plotkilden og etiketterne
Redigering af plotkilden og etiketterne
Redigering af plottkilde og etiketter
Redigering af plottkilde og etiketter

Klik på knappen "Dato/klokkeslæt for A0" for at åbne skærmen Redigering af plots, hvor du kan få adgang til diagrammærket, X-aksens format, plottedatainterval og (ved at rulle ned) selve plotindstillingerne. Rediger diagrammærkaten til noget passende, f.eks. "A0 volt".

Rul ned og for Plots 2 og 3 åbne Edit Plot og klik på Skjul plot for at fjerne dem fra diagramvisningen.

Klik derefter på "Rediger plot 1" og indstil en plotetiket (f.eks. A0), yAxis -enheder (f.eks. Volt), vis maks. 3,6V og tilslut til I/O -pin A0.

Rul tilbage, og klik på "Chart Preview" til de seneste 0 prøvedatapunkter med 1 sekunds intervaller, afbildet mod forløbet tid i minutter: sek.

For alle forløbne tidspunkter vises nul -enheder ikke, så i dette plot vises kun tid> 1min.

Trin 4: Valg af dato/klokkeslæt -format

Valg af dato/klokkeslæt -format
Valg af dato/klokkeslæt -format
Valg af dato/klokkeslæt -format
Valg af dato/klokkeslæt -format
Valg af dato/klokkeslæt -format
Valg af dato/klokkeslæt -format

For forløbne plots fortsætter den førende enhed med at stige, efterhånden som tiden går. For at se et eksempel på dette skal du gå tilbage til skærmen "Redigering af plots" og øge plottedataintervallet til 15 minutter (nederst på denne skærm)

Klik derefter på Chart Preview for at vise de samme eksempeldata, men nu med 15 minutters intervaller mellem prøverne. Som du kan se minutter -delen af mm: ss bliver bare ved med at stige.

Gå nu tilbage og klik på knappen X-akse for at vise et lille udvalg af alle mulige X-aksedata/tidsformater (rul ned for mere)

Ovenfor er et udvalg af diagrameksempler ved hjælp af forskellige X-akseformater.

Dato/tid plots vist her er i den 'lokale' tidszone. Der er også formatmuligheder til at plotte dato/tid i UTC. Se pfodSpecification.pfd for et komplet sæt mulige indstillinger for dato/klokkeslæt.

Trin 5: Generer og test Arduino Sketch

Generer og test Arduino Sketch
Generer og test Arduino Sketch
Generer og test Arduino -skitsen
Generer og test Arduino -skitsen

Når du er tilfreds med diagrammets format og datainterval, kan du gå til "Redigeringsmenu_1" -skærmen og rulle ned og "Generer kode" for det valgte målbræt. Her er en eksempelskitse til Adafruit Feather52 ved hjælp af 1sek dataintervaller og et mm: ss forløbet tidsformat, pfodFeather52_timeplot.ino

Ovenfor er et plot af A0 fra Feather52

Ændring af formatet til Ugedagstimer: minutter: sek (~ E HH: mm: ss) og gengenerering af koden (pfodFeather52_dateplot.ino) giver et plot som det andet ovenfor.

Du kan redigere X-akseformatet direkte i din Arduino-skitse, som beskrevet næste.

Trin 6: Hvordan tegner PfodApp dato/klokkeslæt fra Millis ()?

Når pfodApp opretter forbindelse, husker den sin 'lokale' og UTC -tid og anmoder pfodDevices (Arduino -bordets) aktuelle plotdatatidsstempler. Ved hjælp af disse oplysninger kan pfodApp derefter plotte millisekund tidsstempler som enten forløbet tid, dvs. konvertere millisekunder til timer minutter sek osv., Eller plotte dato og klokkeslæt, millisekund tidsstempler repræsenterer i forhold til, hvornår forbindelsen blev foretaget, og pfodDevices aktuelle tid blev anmodet.

Ser man i den Arduino -genererede skitse (f.eks. PfodFeather52_dateplot.ino), er der tre små bits kode, der håndterer Arduino -siden af plottene.

Loop () kodesektionen, der håndterer pfodApps {@} aktuelle tidsanmodning

// håndter {@} request} ellers hvis ('@' == cmd) {// pfodApp anmodede om 'nuværende' tid plot_mSOffset = millis (); // fange nuværende millis som offset rawdata tidsstempler parser.print (F ("{@` 0} ")); // returner '0 som' aktuelle 'rådata millisekunder

Du kan bare returnere den aktuelle værdi af millis (), men millis () ombrydes tilbage til 0 hver 49,7 dage, hvilket ville få plottet til at hoppe baglæns. Så i stedet husker koden den aktuelle millis () -værdi, da {@} anmodningen blev fremsat, og returnerer {@`0} dvs. et aktuelt tidsstempel på millisekund på nul. Når du sender rådatapunkterne, bruger skitsen derefter

plot_1_var = analogRead (A0); // læs input til plot // plot_2_var plot Skjult, så ingen data er tildelt her // plot_3_var plot Skjult, så ingen data er tildelt her // send plotdata i CSV-format parser.print (millis ()-plot_mSOffset); // tid i millisekunder ….

så det tidsstempel, der sendes med millisekundet med dataene, starter ved 0 og stiger op til 49,7 dage. Hvis du holder kontakten konstant i 49,7 dage, vil du se plottet hoppe baglæns med ~ 50 dage. Afbrydelse og tilslutning igen hver 49,7 dage undgår dette.

Den tredje del af dato/tid -plottet er plotmeddelelsen.

} ellers hvis ('A' == cmd) {// bruger trykket - 'Dato/klokkeslæt for A0' // i hovedmenuen i Menu_1 // return plotting msg. parser.print (F ("{= A0 volt ~ E HH: mm: ss | dato | A0 ~~~ volt ||}"));

Når brugeren trykker på knappen “Dato/klokkeslæt for A0”, sender pfodApp {A} cmd til pfodDevice, og pfodDevice reagerer med plotbeskeden, {=… {= A0 Volt ~ E HH: mm: ss | date | A0 ~~~ Volt ||} som indeholder X-akseformatet E HH: mm: ss

Java SimpleDateFormat -formater er acceptable her. pfodApp Data Logging and Plotting og pfodSpecification.pdf har flere detaljer om plotmeddelelsen.

Trin 7: Reproducering af dato/klokkeslæt på din computer

Reproducering af dato/klokkeslæt -plots på din computer
Reproducering af dato/klokkeslæt -plots på din computer
Reproducering af dato/klokkeslæt -plots på din computer
Reproducering af dato/klokkeslæt -plots på din computer
Reproducering af dato/klokkeslæt -plots på din computer
Reproducering af dato/klokkeslæt -plots på din computer

Som standard logger pfodApp alle de indgående rådata til en logfil på din mobil, medmindre du har deaktiveret denne logning i forbindelsesredigeringsskærmen, se pfodAppForAndroidGettingStarted.pdf

Når du redigerer pfodApp, vises en kort meddelelse med logfilens placering og navn, f.eks. /pfodAppRawData/pfod_bluefruit52.txt Denne fil er i CSV -format, kommasepareret, og efter at have overført den til din computer (se pfodAppForAndroidGettingStarted.pdf for overførselsindstillinger), kan du åbne den i et regneark for at plotte dataene.

Her er de første linjer i en logfil.

// pfodApp V3.0.360, lokal tid, UTC, mS pr. dag, pfod bluefruit52 nuværende tid (mS), pfod bluefruit52 aktuel tid, // forbundet kl., 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,, Ovenfor kan du se den 'lokale' og UTC -tid, som pfodApp tilsluttede Feather52, og den aktuelle tid i mS, som Feather52 rapporterede via {@..} svaret. Den sidste kolonne er tom, fordi der ikke er nogen RTC eller GPS, og derfor blev der ikke rapporteret aktuel tid i åååå/MM/dd -tid af Feather52.

For at plotte dataene mod forløbet tid, træk den aktuelle tid (mS) fra millisekundens tidsstempel og divider derefter med værdien mS pr. Dag. Her er regnearket med formlen tilføjet og resultatet plottet. Regnearket nedenfor (pfod_bluefruit52.xls) er et OpenOffice -regneark, der er gemt i Excel -format.

I OpenOffice er plottet et spredningsdiagram, og plottets x-akse blev formateret i HH: MM: SS Bemærk: regnearkets dato/klokkeslæt-formater er IKKE de samme som de plotformater, der bruges af pfodApp. For eksempel i pfodApp er MM måneder og mm er minutter.

For at plotte mod dato og klokkeslæt, behøver du kun at tilføje forbindelsestiden til regnearkets tid og genplotte. (pfod_bluefruit52_date.xls)

Bemærk: Den lokale tid og UTC blev importeret som tekst i mit regneark, så jeg var nødt til at fjerne den førende ', før jeg brugte dem i en formel.

Trin 8: Sådan undgår du 49,7 dages Millis () -grænsen, og hvorfor du ikke bør

Som nævnt ovenfor i Hvordan tegner pfodApp dato/tid fra millis () ?, hvis du forbliver forbundet kontinuerligt i mere end 49,7 dage, vil tidsstemplerne i millisekunder vikle sig tilbage til nul. Et par linjer kode kan undgå dette, men det anbefales ikke.

Først hvordan man undgår omviklingen. Tilføj en anden usigneret int -variabel for at holde styr på antallet af gange, tidsstemplerne vikles rundt og udskrive det kombinerede resultat i HEX.

uint_t mSwrapCount = 0; uint32_t lastTimeStamp = 0;

… plot_1_var = analogRead (A0); // læs input til plot // plot_2_var plot Skjult, så ingen data er tildelt her // plot_3_var plot Skjult, så ingen data er tildelt her // send plotdata i CSV-format uint32_t timeStamp = millis ()-plot_mSOffset; hvis (timeStamp <lastTimeStamp) {// timeStamp pakket tilbage til 0 mSwrapCount ++; // tilføj en til count} lastTimeStamp = timeStamp; parser.print ("0x"); parser.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // tid i millisekunder i HEX….

Når du sender {@.. -svaret, skal du også slette mSwrapCount.

// håndter {@} request} ellers hvis ('@' == cmd) {// pfodApp anmodede om 'nuværende' tid plot_mSOffset = millis (); // fange nuværende millis som offset rawdata tidsstempler mSwrapCount = 0; // klart antal viklinger. parser.print (F ("{@` 0} ")); // returner '0 som' aktuelle 'rådata millisekunder

Tidsstemplerne vil nu give den 'korrekte' værdi for de næste 40,7 dage * 65536 ~ = 7308 år.

pfodApp konverterer automatisk hex -tidsstemplerne til plotting og logger dem nøjagtigt som modtaget, dvs. i hex. I regnearket (OpenOffice) bruger du denne formel til at konvertere hex -strengen i A2 til mS (hvor A1 er en hvilken som helst tom celle) = HEX2DEC (REPLACE (A2; 1; 2; A1))

Hvorfor vil du ikke gøre dette

Som vist ovenfor er det let at forlænge mS -tidsstemplerne til mere end 50 dage. Men du vil sandsynligvis ikke gøre det, fordi de bliver mere og mere ukorrekte. En typisk 16Mhz krystal, der bruges til at oprette millis () -resultaterne i mikroen, har en nøjagtighed på ~ 50ppm (dele pr. Million). Det betyder, at tidsstemplet på millisekunder efter 49,7 dage kan være ude med 3 ½ minutter, og det ignorerer temperaturens indvirkning på krystalnøjagtigheden.

I korte tilslutningsperioder er denne unøjagtighed ikke et problem, da {@.. -svaret synkroniserer tidsstemplet på millisekunder til mobilens dato/klokkeslæt for hver genforbindelse. Men hvis du vil forblive forbundet i lange perioder (dage) og løbende logge dataene, skal du bruge noget mere præcist end den indbyggede millis (), f.eks. Et RTC- eller GPS-modul.

Trin 9: Brug af et RTC (realtidsur)

Brug af et RTC (Real Time Clock)
Brug af et RTC (Real Time Clock)
Brug af et RTC (Real Time Clock)
Brug af et RTC (Real Time Clock)

Der findes en række RTC -moduler, et af de mere præcise er DS3231 f.eks. Adafruit's DS3231 modul. Den angivne nøjagtighed er +/- 2ppm over 0 til 40C. dvs. ~ +/- 5 sek/måned.

Hvis du vil plotte data, der har dato/klokkeslæt tidsstempler, f.eks. 2019/04/19 20: 4: 34, så skal du ændre {@ svaret for at returnere den aktuelle dato/klokkeslæt, f.eks. {@`0 ~ 2019/4/19 3: 33: 5}. Her er nogle eksempler på kodeændringer, der skal anvendes på den pfodDesigner -genererede skitse til brug af et RTC -modul, forudsat at du bruger RTClib -biblioteket og har tilføjet koden til at initialisere RTC -modulet.

// håndter {@} request} ellers hvis ('@' == cmd) {// pfodApp anmodede om 'nuværende' tid plot_mSOffset = millis (); // fange nuværende millis som offset rawdata tidsstempler parser.print (F ("{@` 0 "}); // returnere` 0 som 'aktuelle' rådata millisekunder parser.print ('~'); // startstreng af dato/tid DateTime nu = rtc.now () sendDateTime (& nu); // send åååå/M/d/H: m: s til parser.print, adgangsadresse & som arg. parser.print ('}'); // slut på {@ svar f.eks. {@ `0 ~ 2019/4/19 3: 33: 5}….

// send datotidspunkt til parser printvoid sendDateTime (DateTime* dt) {parser.print (dt-> år (), DEC); parser.print ('/'); parser.print (dt-> month (), DEC); parser.print ('/'); parser.print (dt-> day (), DEC); parser.print (''); parser.print (dt-> time (), DEC); parser.print (':'); parser.print (dt-> minut (), DEC); parser.print (':'); parser.print (dt-> second (), DEC); }

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // genstart plotdatatimer uden drift // tildel værdier til plotvariabler fra dine loopvariabler eller læs ADC -input plot_1_var = analogRead (A0); // læs input til plot // plot_2_var plot Skjult, så ingen data er tildelt her // plot_3_var plot Skjult, så ingen data er tildelt her // send plotdata i CSV -format DateTime nu = rtc.now (); sendDateTime (& nu); // send åååå/M/d/H: m: s til parser.print, adgangsadresse & som arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Plot 2 er skjult. Ingen data sendt. parser.print (','); // Plot 3 er skjult. Ingen data sendt. parser.println (); // slut på CSV -datarekord}}

~ 2019/4/19 3: 33: 5 -delen af {@ svaret lader pfodApp vide, hvad pfodDevice mener er den aktuelle dato og klokkeslæt. Din skitse kan derefter sende data med yMd Hms tidsstempler, og pfodApp vil plotte dem enten som forløbet tid fra tilslutningstiden ELLER som dato og klokkeslæt, afhængigt af det X-akseformat, du angiver.

Når du plotter mod dato og klokkeslæt, korrigerer pfodApp -plot -rutinen for enhver 'drift' i RTC ved at sammenligne pfodDevices rapporterede aktuelle tid med mobilens aktuelle tid. Denne korrektion håndterer også, at RTC indstilles til en anden tidszone end din mobils lokale tidszone. millis () tidsstempler fortsætter med at fungere som i Brug af Arduino millisekund tidsstempler, trin 5 ovenfor.

Her er et eksempel på et regneark over stuetemperaturer over en periode på 8 dage, Office_Temp.xls Da logfilen blev importeret, blev den første kolonne markeret som YMD for at konvertere teksten til en dato/tid. Du skal stadig fjerne den ledende 'fra lokal tid, UTC og Office Temp aktuelle tidsposter for at få regnearket til at tolke dem som datoer og tidspunkter.

For at få det samme plot, som pfodApp viser, skal du beregne “Korrigeret dato/tid”. I dette tilfælde er RTC -tiden 2 sekunder bag mobilens lokale tid, så der tilføjes hvert RTC -tidsstempel (lokal tid - Office Temp aktuel tid) for at få den sande lokale tid.

For forløbne tidsplaner skal du oprette en ny kolonne indeholdende (dato/tid tidsstempel-den aktuelle tid på kontortidspunktet) og bruge det som X-aksen i diagrammet (Office_TempElapsed.xls) Faktisk i dette tilfælde producerer pfodApp pænere forløbne tidsdiagrammer i dage timer: minutter: sek.

Trin 10: Brug af et GPS -modul

Brug af et GPS -modul svarer til at bruge et RTC -modul, bortset fra at GPS -moduler har millisekunder til rådighed, år starter ved 2000, og tiden mangler UTC -springsekunder (se https://tycho.usno.navy.mil/leapsec.html) GPS -dato og -tidspunkt er i øjeblikket 18 sekunder forud for UTC pr. Januar 2018.

Adafruit GPS -biblioteket til Adafruit Ultimate GPS tilføjer i modsætning til RTClib ikke 2000 års forskydning til GPS -årene, så det skal tilføjes, når du sender dato og klokkeslæt tidsstempel. Selvom GPS -biblioteket leverer millisekunder, der har meget god langsigtet nøjagtighed, er de ikke særlig præcise. GPS -tidsopdateringerne er kun én gang hver 100 mS, og derefter er der en ekstra forsinkelse ved modtagelse af serielle data ved en langsom 9600 baud og en anden forsinkelse i parsing af dem. Alt sammen øger millisekundets præcision, når tidsstempler datalæsninger.

Her er nogle eksempler på kodeændringer, der skal anvendes på den pfodDesigner -genererede skitse til brug af et GPS -modul, forudsat at du bruger Adafruit's GPS -bibliotek og har tilføjet koden for at modtage og analysere meddelelserne til et GPS -objekt.

// håndter {@} request} ellers hvis ('@' == cmd) {// pfodApp anmodede om 'nuværende' tid plot_mSOffset = millis (); // fange aktuelle millis som offset rawdata tidsstempler parser.print (F ("{@` 0 "}); // returnere` 0 som 'aktuelle' rådata millisekunder parser.print ('~'); // startstreng af dato/tid sendDateTime (& GPS); // send åååå/M/d/H: m: s til parser.print, adgangsadresse & som arg. parser.print ('}'); // slut på {@ svar f.eks. {@`0 ~ 2019/4/19 3: 33: 5}….

// send dato tid til parser printvoid sendDateTime (Adafruit_GPS* gps) {parser.print (F ("20"); // 20.. year parser.print (gps-> år, DEC); parser.print ('/ '); parser.print (gps-> måned, DEC); parser.print ('/'); parser.print (gps-> dag, DEC); parser.print (' '); parser.print (gps- > time, DEC); parser.print (':'); parser.print (gps-> minut, DEC); parser.print (':'); parser.print (gps-> sekund, DEC); // parser.print ('.'); hvis du sender millisekunder // hvis du vil sende mS, skal du lægge værdien gps-> millisekunder med førende nuller // dvs. 3 skal polstres til 003}

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // genstart plotdatatimer uden drift // tildel værdier til plotvariabler fra dine loopvariabler eller læs ADC -input plot_1_var = analogRead (A0); // læs input til plot // plot_2_var plot Skjult, så ingen data er tildelt her // plot_3_var plot Skjult, så ingen data er tildelt her // send plotdata i CSV -format sendDateTime (& GPS); // send åååå/M/d/H: m: s til parser.print, adgangsadresse & som arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Plot 2 er skjult. Ingen data sendt. parser.print (','); // Plot 3 er skjult. Ingen data sendt. parser.println (); // slut på CSV -datarekord}}

Når du plotter mod dato og klokkeslæt, korrigerer pfodApp automatisk i skudsekunder. I januar 2018 er GPS -tiden 18 sekunder foran UTC. pfodApp korrigerer dette ved at sammenligne dato/klokkeslæt, som GPS'en returnerede ved forbindelse, via {@ svaret, med mobilens UTC -dato og -tidspunkt. Oprettelse af plots i et regneark fra pfodApp -logfilen er det samme som for RTC -moduler ovenfor. Tilføjelse af (lokal tid - Office Temp aktuel tid) til GPS -tidsstemplerne korrigerer for springsekunder.

millis () tidsstempler fortsætter med at fungere som i Brug af Arduino millisekund tidsstempler, trin 5 ovenfor.

Trin 11: Konklusion

Ved hjælp af pfodApp på din Android -mobil kan du plotte data mod dato og klokkeslæt eller forløbet tid ved kun at bruge Arduinos millis () -funktion. Ved hjælp af pfodApp-logfilen kan du genskabe disse dato/tid-plots i et regneark. Hvis dit Arduino -projekt har et RTC -modul, kan du logge og plotte dato og RTC -tidsstempler og automatisk korrigere for RTC 'drift'. Hvis dit Arduino -projekt har et GPS -modul, kan du logge og plotte dets meget præcise tidsstempler, og pfodApp vil automatisk korrigere GPS'ens manglende springsekunder.

I alle tilfælde logges rådataene fra dit Arduino -projekt nøjagtigt som modtaget, ukorrekt. Imidlertid indeholder pfodApp-logfilen ekstra data, så du kan genskabe disse rettelser i et regneark fra den downloadede logfil.

Ingen Android -kodning er påkrævet. Plotformaterne er alle specificeret af små tekststrenge i din Arduino -skitse. Den gratis pfodDesigner genererer komplet Arduino -datalogning og plotter skitser til en lang række Arduino -kort, der forbinder via WiFi, Classic Bluetooth, BLE og SMS

Anbefalede: