Innehållsförteckning:

Arduino Datum/tid plottning/loggning med Millis () och PfodApp: 11 steg
Arduino Datum/tid plottning/loggning med Millis () och PfodApp: 11 steg

Video: Arduino Datum/tid plottning/loggning med Millis () och PfodApp: 11 steg

Video: Arduino Datum/tid plottning/loggning med Millis () och PfodApp: 11 steg
Video: CS50 2014 - Week 7 2024, November
Anonim
Arduino Datum/tid plottning/loggning med Millis () och PfodApp
Arduino Datum/tid plottning/loggning med Millis () och PfodApp

Ingen Arduino- eller Android -programmering krävs. RTC- och GPS -moduler stöds också. Automatisk korrigering för tidszoner, RTC -drift och GPS saknar språngsekunder

Introduktion

Denna handledning visar dig hur du använder dina Arduino millis () tidsstämplar för att plotta data mot datum och tid på din Android -mobil med pfodApp.

Ingen Arduino- eller Android -programmering krävs. pfodApp loggar också tillräckligt med data så att du senare kan återge datum/tid -diagrammen i ett kalkylblad.

INGEN RTC- eller GPS -modul behövs, men om ditt Arduino -projekt har en RTC (Real Time Clock) eller en GPS -modul kan de också användas. I dessa fall kommer pfodApp -tomterna automatiskt att korrigera för tidszon, RTC -drift och GPS som saknar språngsekunder. Ingen speciell Arduino -kod krävs för dessa korrigeringar. Som alltid med pfodApp loggas de mottagna data exakt som de är, okorrigerade, men loggfilen innehåller också tillräcklig information för att du själv ska kunna tillämpa dessa korrigeringar när du laddar ner loggarna till din dator. Se nedan för exempel på denna efterbehandling.

En mängd olika tid- och datum-X-axelformateringar stöds, som alla styrs helt av korta textsträngar i din Arduino-skiss. Ingen Android -programmering krävs.

pfodApp kommer att ansluta via WiFi, Bluetooth Classic, BLE och SMS. Den fria pfodDesigner genererar kompletta Arduino -skisser för datum-/tidplanering/loggning för att ansluta till en mängd olika brädor. Ingen Arduino -programmering krävs.

Denna instruerbara kommer att använda en Adafruit Feather52 som exemplet Arduino -kort, som ansluts via BLE.

Denna instruerbara täcker tre fall:- 1) Ditt mikroprocessorprojekt har bara millisekunders tidsstämplar- millis () 2) Ditt mikroprocessorprojekt har en Real Time Clock (RTC)- pfodApp korrigerar automatiskt för drift. 3) Ditt mikroprocessorprojekt har en GPS -modul - pfodApp korrigerar automatiskt under språngsekunder när de inträffar (för närvarande 18 sekunder per 2018).

Steg 1: Använda Arduino Millisecond tidsstämplar, Millis ()

Det finns två delar för att använda millisekunder för datum och tid. Den ena är för att plotta data mot antingen förfluten tid eller datum/tid och den andra delen återskapar datum och tid från de loggade rawdata millisekundens tidsstämplar. pfodApp ändrar inte rådata som tas emot från pfodDevice (Arduino -mikro). Det loggar bara exakt de bytes som tas emot.

Använd först gratis pfodDesigner för att generera en Arduino -skiss för din mikro som skickar millisekunder och datamätningar till pfodApp för plottning/loggning. Detta exempel skapar en meny för Adafruit Feather 52 BLE -kortet som läser A0. Handledningen om Adafruit Feather nRF52 LE - Anpassade kontroller med pfodApp går igenom pfodDesigner -stegen för att skapa en meny för Feather nRF52 som innehåller en diagramknapp, så kolla in den för mer information. I denna handledning lägger vi till bara en diagramknapp och använder de nya X-axelformatalternativen för att plotta A0-avläsningarna mot förfluten tid och datum/tid.

Den första delen av den här självstudien kommer att användas med gratis pfodDesigner för att skapa ett provdatum/tiddiagram på din Android -mobil. När du är nöjd med displayen kan du generera Arduino -skissen som återger det när du ansluter med pfodApp. Ingen Android -programmering krävs och eftersom pfodDesigner genererar kompletta Arduino -skisser för en mängd olika Arduino -kort, krävs ingen Arduino -programmering heller.

Steg 2: Lägga till ett diagram i menyn

Lägga till ett diagram i menyn
Lägga till ett diagram i menyn
Lägga till ett diagram i menyn
Lägga till ett diagram i menyn
Lägga till ett diagram i menyn
Lägga till ett diagram i menyn
Lägga till ett diagram i menyn
Lägga till ett diagram i menyn

Ladda ner pfodDesigner -appen från Google Play, öppna den och klicka på "Starta ny meny"

Klicka på "Target Serial" och sedan på "Bluetooth Low Energy" -knappen för att visa listan med cirka 11 BLE -kort (bläddra ner för att se de andra alternativen). Välj på Adafruit Bluefruit Feather52.

Gå tillbaka till redigeringsmenyn och klicka på “Redigera prompt” och ställ in en lämplig prompt för den här menyn, t.ex. “Feather52” och text fet och storlek +7. Bakgrundsfärgen lämnades som "standard" vit

Gå tillbaka och klicka på "Lägg till menyalternativ", rulla ner och välj "Diagramknapp" som öppnar skärmknappens redigeringsskärm. Du kan göra en ändring av knappens utseende här. I det här fallet ändrades knappens text till “Datum/tid -diagram för A0” och de andra standardinställningarna lämnades som de är.

Detta ger dig en knapp på menyn som öppnar diagramskärmen.

Steg 3: Redigera tomtkällan och etiketterna

Redigera tomtkällan och etiketterna
Redigera tomtkällan och etiketterna
Redigera tomtkällan och etiketterna
Redigera tomtkällan och etiketterna
Redigera tomtkällan och etiketterna
Redigera tomtkällan och etiketterna
Redigera tomtkällan och etiketterna
Redigera tomtkällan och etiketterna

Klicka på knappen "Datum/tid-diagram för A0" för att öppna skärmen Redigera tomter, där du kan komma åt diagrametiketten, X-axelformatet, plottdataintervallet och (genom att rulla nedåt) själva plottinställningarna. Redigera diagrametiketten till något lämpligt, t.ex. "A0 volt".

Rulla ner och öppna diagram 2 och 3 för att öppna Redigera tomt och klicka på Dölj diagram för att ta bort dem från diagrammen.

Klicka sedan på “Redigera diagram 1” och ställ in en plottikett (t.ex. A0), yAxis -enheter (t.ex. volt), visa max 3,6V och anslut till I/O -stift A0.

Rulla tillbaka och klicka på "Diagramförhandsgranskning" till de senaste 0 provdatapunkterna, med 1 sek intervall, ritat mot förfluten tid i minuter: sekunder.

För alla förflutna tidsdiagram visas inte inledande nollenheter, så i denna tomt har endast tiden> 1min visat inledande minuter.

Steg 4: Välja datum-/tidsformat

Välja datum/tid -format
Välja datum/tid -format
Välja datum-/tidsformat
Välja datum-/tidsformat
Välja datum-/tidsformat
Välja datum-/tidsformat

För förflutna tidsplaner fortsätter den ledande enheten bara att öka när tiden går. För att se ett exempel på detta, gå tillbaka till skärmen "Redigera plott" och öka plottdataintervallet till 15 minuter (längst ner på den här skärmen)

Klicka sedan på Chart Preview för att visa samma provdata men nu med 15 minuters intervall mellan proverna. Som du kan se minuter del av mm: ss bara fortsätter att öka.

Gå nu tillbaka och klicka på X-axelknappen för att visa ett litet urval av alla möjliga X-axeldata/tidsformat (rulla ner för mer)

Ovan är ett urval av diagramförhandsgranskningar med olika X-axelformat.

Datum-/tiddiagrammen som visas här är i den "lokala" tidszonen. Det finns också formatalternativ för att plotta datum/tid i UTC. För en komplett uppsättning möjliga datum-/tidsformatalternativ, se pfodSpecification.pfd.

Steg 5: Generera och testa Arduino Sketch

Generera och testa Arduino Sketch
Generera och testa Arduino Sketch
Generera och testa Arduino Sketch
Generera och testa Arduino Sketch

När du är nöjd med diagrammets format och dataintervall kan du gå till skärmen “Redigeringsmeny_1” och rulla ner och “Generera kod” för det valda målkortet. Här är ett exempel på en skiss för Adafruit Feather52 med 1sec -dataintervaller och ett mm: ss förflutet tidsformat, pfodFeather52_timeplot.ino

Ovan är en tomt av A0 från fjädern52

Om du ändrar formatet till veckodagar: minuter: sek (~ E HH: mm: ss) och genererar koden igen (pfodFeather52_dateplot.ino) får du en plot som den andra ovan.

Du kan redigera X-axelformatet direkt i din Arduino-skiss, som beskrivs nedan.

Steg 6: Hur planerar PfodApp datum/tid från Millis ()?

När pfodApp ansluter kommer den ihåg sin "lokala" och UTC -tid och begär pfodDevices (Arduino -styrelsens) aktuella tomtdatastämplar. Med hjälp av denna information kan pfodApp sedan plotta millisekundens tidsstämplar som antingen förfluten tid, dvs. konvertera millisekunder till timmar minuter sekunder osv, eller plotta datum och tid som millisekundens tidsstämplar representerar i förhållande till när anslutningen gjordes och pfodDevices nuvarande tid begärdes.

Om man tittar i den Arduino -genererade skissen (t.ex. pfodFeather52_dateplot.ino) finns det tre små bitar kod som hanterar Arduino -sidan av tomterna.

Loop () -kodavsnittet som hanterar pfodApps {@} aktuella tidsbegäran

// hantera {@} request} annars om ('@' == cmd) {// pfodApp begärde 'aktuell' tid plot_mSOffset = millis (); // fånga nuvarande millis som offset rawdata tidsstämplar parser.print (F ("{@` 0} ")); // returnera '0 som' nuvarande 'rådata millisekunder

Du kan bara returnera det nuvarande värdet på millis (), men millis () sveper tillbaka till 0 var 49,7 dagar, vilket skulle få tomten att hoppa bakåt. Så i stället kommer koden ihåg det aktuella millis () -värdet när {@} begäran gjordes och returnerar {@`0} dvs en aktuell tidsstämpel på noll på millisekunder. När du skickar rawdatapunkterna använder skissen sedan

plot_1_var = analogRead (A0); // läs inmatning till plot // plot_2_var plot Dold så inga data tilldelas här // plot_3_var plot dolda så inga data tilldelas här // skicka plotdata i CSV-format parser.print (millis ()-plot_mSOffset); // tid i millisekunder ….

så att tidsstämpeln som skickas med data från millisekunder börjar vid 0 och ökar upp till 49,7 dagar. Om du håller kontakten kontinuerligt i 49,7 dagar kommer du att se tomten hoppa bakåt med ~ 50 dagar. Att koppla från och återansluta en gång var 49,7 dagar undviker detta.

Den tredje delen av datum/tid -tomten är tomtmeddelandet.

} annars om ('A' == cmd) {// användaren tryckt - 'Datum/tiddiagram för A0' // i huvudmenyn i Meny_1 // returplottningsmeddelande. parser.print (F ("{= A0 volt ~ E HH: mm: ss | datum | A0 ~~~ volt ||}"));

När användaren trycker på knappen "Datum/tid -diagram för A0" skickar pfodApp {A} cmd till pfodDevice och pfodDevice svarar med plottmeddelandet, {= … {= A0 Volt ~ E HH: mm: ss | date | A0 ~~~ Volt ||} som innehåller X-axelformatet E HH: mm: ss

Java SimpleDateFormat -format är acceptabla här. pfodApp Data Logging and Plotting och pfodSpecification.pdf har mer information om plottmeddelandet.

Steg 7: Reproducera datum-/tidsplanerna på din dator

Reproducera datum-/tidsplanerna på din dator
Reproducera datum-/tidsplanerna på din dator
Reproducera datum-/tidsplanerna på din dator
Reproducera datum-/tidsplanerna på din dator
Reproducera datum-/tidsplanerna på din dator
Reproducera datum-/tidsplanerna på din dator

Som standard loggar pfodApp alla inkommande rawdata till en loggfil på din mobil, såvida du inte har inaktiverat denna loggning i anslutningsredigeringsskärmen, se pfodAppForAndroidGettingStarted.pdf

När du redigerar pfodApp visas ett kort meddelande med platsen och namnet på loggfilen, t.ex. /pfodAppRawData/pfod_bluefruit52.txt Den filen är i CSV -format, avgränsad med kommatecken, och efter att du har överfört den till din dator (se pfodAppForAndroidGettingStarted.pdf för överföringsalternativ) kan du öppna den i ett kalkylblad för att plotta data.

Här är de första raderna i en loggfil.

// pfodApp V3.0.360, lokal tid, UTC, mS per dag, pfod bluefruit52 aktuell tid (mS), pfod bluefruit52 aktuell tid, // ansluten, 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,,

Ovan kan du se den "lokala" och UTC -tiden som pfodApp kopplade till Feather52 och den aktuella tiden i mS som Feather52 rapporterade via {@..} svaret. Den sista kolumnen är tom, eftersom det inte finns någon RTC eller GPS och därför rapporterades ingen aktuell tid i åååå/MM/dd -tid av Feather52.

För att plotta data mot förfluten tid, subtrahera aktuell tid (mS) från millisekundens tidsstämpel och dividera sedan med mS per dag -värde. Här är kalkylbladet med formeln tillagd och resultatet plottat. Kalkylarket nedan (pfod_bluefruit52.xls) är ett OpenOffice -kalkylblad som sparats i Excel -format.

I OpenOffice är diagrammet en spridningsdiagram och diagrammets x-axel formaterades i HH: MM: SS Obs: datum-/tidsformaten för kalkylbladet är INTE desamma som de plottformat som används av pfodApp. Till exempel i pfodApp är MM månader och mm är minuter.

För att rita mot datum och tid behöver du bara lägga till anslutningstiden till kalkylbladstiden och spela om. (pfod_bluefruit52_date.xls)

Obs! Lokal tid och UTC importerades som text i mitt kalkylblad så jag behövde ta bort den inledande 'innan jag använde dem i en formel.

Steg 8: Så undviker du 49,7 -dagars Millis () -gränsen och varför ska du inte

Som nämnts ovan i Hur tecknar pfodApp datum/tid från millis () ?, om du förblir ansluten kontinuerligt i mer än 49,7 dagar kommer millisekundens tidsstämplar att linda sig tillbaka till noll. Några koderader kan undvika detta men det rekommenderas inte.

Först hur man undviker omslaget. Lägg till en annan osignerad int -variabel för att hålla reda på hur många gånger tidsstämplarna lindas runt och skriva ut det kombinerade resultatet i HEX.

uint_t mSwrapCount = 0; uint32_t lastTimeStamp = 0;

… plot_1_var = analogRead (A0); // läs inmatning till plot // plot_2_var plot Dold så inga data tilldelas här // plot_3_var plot dolda så inga data tilldelas här // skicka plot data i CSV-format uint32_t timeStamp = millis ()-plot_mSOffset; if (timeStamp <lastTimeStamp) {// timeStamp svept tillbaka till 0 mSwrapCount ++; // lägg till en till count} lastTimeStamp = timeStamp; parser.print ("0x"); parser.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // tid i millisekunder i HEX….

När du returnerar {@.. -svaret rensar du också mSwrapCount.

// hantera {@} request} annars om ('@' == cmd) {// pfodApp begärde 'aktuell' tid plot_mSOffset = millis (); // fånga nuvarande millis som offset rawdatatidsstämplar mSwrapCount = 0; // klart antal vikningar. parser.print (F ("{@` 0} ")); // returnera '0 som' nuvarande 'rådata millisekunder

Tidsstämplarna ger nu det "korrekta" värdet för de kommande 40,7 dagarna * 65536 ~ = 7308 år.

pfodApp konverterar automatiskt hex -tidsstämplarna för plottning och loggar dem exakt som mottagna, dvs i hex. I kalkylarket (OpenOffice) använder du den här formeln för att konvertera hexsträngen, i A2, till mS (där A1 är en tom cell) = HEX2DEC (REPLACE (A2; 1; 2; A1))

Varför vill du inte göra det här

Som visas ovan är det enkelt att förlänga mS -tidsstämplarna till längre än 50 dagar. Men du vill förmodligen inte göra det eftersom de blir allt mer felaktiga. En typisk 16 Mhz kristall som används för att skapa millis () resulterar i mikro har en noggrannhet på ~ 50 ppm (delar per miljon). Detta innebär att efter 49,7 dagar kan millistunden tidsstämpel vara ute med 3 ½ minuter och det ignorerar temperaturens inverkan på kristallnoggrannheten.

Under korta anslutningsperioder är denna felaktighet inte ett problem eftersom {@.. -svaret synkroniserar tidstämpeln på millisekunder till mobilens datum/tid vid varje återanslutning. Men om du vill hålla kontakten under lång tid (dagar) och kontinuerligt logga data, bör du använda något mer exakt än den inbyggda millis (), till exempel en RTC- eller GPS-modul.

Steg 9: Använda en RTC (Real Time Clock)

Använda en RTC (Real Time Clock)
Använda en RTC (Real Time Clock)
Använda en RTC (Real Time Clock)
Använda en RTC (Real Time Clock)

Det finns ett antal RTC -moduler tillgängliga, en av de mer exakta är DS3231 t.ex. Adafruit DS3231 -modul. Den angivna noggrannheten är +/- 2ppm över 0 till 40C. dvs ~ +/- 5 sek/månad.

Om du vill plotta data som har datum/tidstämplar, t.ex. 2019/04/19 20: 4: 34, då måste du ändra {@ -svaret för att returnera aktuellt datum/tid, t.ex. {@`0 ~ 2019/4/19 3: 33: 5}. Här är några exempelkodändringar som ska tillämpas på den pfodDesigner -genererade skissen för användning av en RTC -modul, förutsatt att du använder RTClib -biblioteket och har lagt till koden för att initiera RTC -modulen.

// hantera {@} request} annars om ('@' == cmd) {// pfodApp begärde 'aktuell' tid plot_mSOffset = millis (); // fånga nuvarande millis som förskjutna rådatatidsstämplar parser.print (F ("{@` 0 "}); // returnera` 0 som 'nuvarande' rådata millisekunder parser.print ('~'); // startsträng av date/time DateTime now = rtc.now () sendDateTime (& now); // send yyyy/M/d/H: m: s to parser.print, pass address & as arg. parser.print ('}'); // slutet av {@ svaret t.ex. {@ `0 ~ 2019/4/19 3: 33: 5}….

// skicka datumtid till parser printvoid sendDateTime (DateTime* dt) {parser.print (dt-> year (), DEC); parser.print ('/'); parser.print (dt-> månad (), DEC); parser.print ('/'); parser.print (dt-> day (), DEC); parser.print (''); parser.print (dt-> timme (), DEC); parser.print (':'); parser.print (dt-> minut (), DEC); parser.print (':'); parser.print (dt-> second (), DEC); }

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // starta om plottdatatimern, utan drift // tilldela värden till plotvariabler från dina loopvariabler eller läs ADC -ingångar plot_1_var = analogRead (A0); // läs inmatning till plot // plot_2_var plot Dold så inga data tilldelas här // plot_3_var plot dolda så inga data tilldelas här // skicka plot data i CSV -format DateTime nu = rtc.now (); sendDateTime (& nu); // skicka åååå/M/d/H: m: s till parser.print, passera adress & som arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Plot 2 är dold. Ingen data skickad. parser.print (','); // Plot 3 är dold. Ingen data skickad. parser.println (); // slutet av CSV -dataposten}}

~ 2019/4/19 3: 33: 5 -delen av {@ -svaret låter pfodApp veta vad pfodDevice tycker är aktuellt datum och tid. Din skiss kan sedan skicka data med yMd Hms tidsstämplar och pfodApp kommer att plotta dem antingen som förfluten tid från anslutningstiden ELLER som datum och tid, beroende på X-axelformatet du anger.

Vid plottning mot datum och tid korrigerar pfodApp -plottrutinen för eventuell 'drift' i RTC genom att jämföra pfodDevices rapporterade aktuella tid med mobilens nuvarande tid. Denna korrigering hanterar också att RTC ställs in på en annan tidszon än din mobils lokala tidszon. millis () tidsstämplar fortsätter att fungera som i Använda Arduino millisekund tidsstämplar, steg 5 ovan.

Här är ett exempel på kalkylblad över rumstemperaturer under en 8 -dagarsperiod, Office_Temp.xls När loggfilen importerades markerades den första kolumnen som YMD för att konvertera texten till ett datum/tid. Du måste fortfarande ta bort den ledande formen från lokal tid, UTC och Office Temp aktuella tidsposter för att få kalkylbladet att tolka dem som datum och tider.

För att få samma plot som pfodApp visar måste du beräkna “Korrigerat datum/tid”. I detta fall är RTC -tiden 2 sekunder efter mobilens lokala tid, så till varje RTC -tidsstämpel läggs till (lokal tid - Office Temp aktuell tid) för att få den verkliga lokala tiden.

För förflutna tidsdiagram, skapa en ny kolumn som innehåller (datum/tid tidsstämpel-Office Time aktuell tid) och använd den som X-axeln i diagrammet (Office_TempElapsed.xls) Egentligen i detta fall producerar pfodApp trevligare förflutna tidsscheman i dagar timmar: minuter: sek.

Steg 10: Använda en GPS -modul

Att använda en GPS -modul liknar att använda en RTC -modul, förutom att GPS -moduler har millisekunder tillgängliga, år börjar vid 2000 och tiden saknar UTC -språngsekunder (se https://tycho.usno.navy.mil/leapsec.html) GPS -datum och -tid är för närvarande 18 sekunder före UTC, per januari 2018.

Adafruit GPS -bibliotek för Adafruit Ultimate GPS, till skillnad från RTClib, lägger inte till 2000 års förskjutning till GPS -åren, så det måste läggas till när du skickar datum och tidstämpel. Även om GPS -biblioteket levererar millisekunder som har mycket god långsiktighet, är de inte särskilt exakta. GPS -tidsuppdateringarna är bara en gång varje 100 ms och sedan är det en extra fördröjning att ta emot seriell data vid en långsam 9600 baud och ytterligare en fördröjning i analys av den. Alla bidrar till millisekunden i precision när tidsstämplade data avläses.

Här är några exempelkodändringar som ska tillämpas på den pfodDesigner -genererade skissen för användning av en GPS -modul, förutsatt att du använder Adafruits GPS -bibliotek och har lagt till koden för att ta emot och analysera meddelandena i ett GPS -objekt.

// hantera {@} request} annars om ('@' == cmd) {// pfodApp begärde 'aktuell' tid plot_mSOffset = millis (); // fånga nuvarande millis som förskjutna rådatatidsstämplar parser.print (F ("{@` 0 "}); // returnera` 0 som 'nuvarande' rådata millisekunder parser.print ('~'); // startsträng av date/time sendDateTime (& GPS); // send yyyy/M/d/H: m: s to parser.print, pass address & as arg. parser.print ('}'); // slutet av {@ svar t.ex. {@`0 ~ 2019/4/19 3: 33: 5}….

// skicka datum tid till parser printvoid sendDateTime (Adafruit_GPS* gps) {parser.print (F ("20"); // 20.. year parser.print (gps-> year, DEC); parser.print ('/ '); parser.print (gps-> månad, DEC); parser.print ('/'); parser.print (gps-> dag, DEC); parser.print (' '); parser.print (gps- > timme, DEC); parser.print (':'); parser.print (gps-> minut, DEC); parser.print (':'); parser.print (gps-> andra, DEC); // parser.print ('.'); om du skickar millisekunder // om du vill skicka mS måste du stoppa värdet gps-> millisekunder med ledande nollor // dvs 3 måste stoppas till 003}

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // starta om plottdatatimern, utan drift // tilldela värden till plotvariabler från dina loopvariabler eller läs ADC -ingångar plot_1_var = analogRead (A0); // läs input till plot // plot_2_var plot Hidden så ingen data tilldelas här // plot_3_var plot gömd så ingen data tilldelas här // send plotdiagram i CSV -format sendDateTime (& GPS); // skicka åååå/M/d/H: m: s till parser.print, passera adress & som arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Plot 2 är dold. Ingen data skickad. parser.print (','); // Plot 3 är dold. Ingen data skickad. parser.println (); // slutet av CSV -dataposten}}

När du planerar mot datum och tid korrigerar pfodApp automatiskt under skott sekunder. Från och med januari 2018 är GPS -tiden 18 sekunder före UTC. pfodApp korrigerar detta genom att jämföra datum/tid som GPS -enheten returnerade vid anslutningen, via {@ -svaret, mot mobilens UTC -datum och -tid. Att skapa tomter i ett kalkylark från pfodApp -loggfilen är samma som för RTC -moduler ovan. Att lägga till (lokal tid - Office Temp aktuell tid) till GPS -tidsstämplarna korrigerar för språngsekunderna.

millis () tidsstämplar fortsätter att fungera som i Använda Arduino millisekund tidsstämplar, steg 5 ovan.

Steg 11: Slutsats

Med pfodApp på din Android -mobil kan du plotta data mot datum och tid eller förfluten tid, med endast Arduinos millis () -funktion. Med pfodApp-loggfilen kan du återskapa dessa datum/tid-diagram i ett kalkylblad. Om ditt Arduino -projekt har en RTC -modul kan du logga och plotta datum och RTC -tidsstämplar, automatiskt korrigera för RTC -driften. Om ditt Arduino -projekt har en GPS -modul kan du logga och plotta dess mycket exakta tidsstämplar och pfodApp korrigerar automatiskt GPS: s saknade språngsekunder.

I alla fall loggas rådata från ditt Arduino -projekt exakt som mottaget, okorrigerat. PfodApp-loggfilen innehåller dock extra data så att du kan återskapa dessa korrigeringar i ett kalkylblad från den nedladdade loggfilen.

Ingen Android -kodning krävs. Plotformaten specificeras alla av små textsträngar i din Arduino -skiss. Den fria pfodDesigner genererar komplett Arduino dataloggning och plottning av skisser för en mängd olika Arduino -kort som ansluts via WiFi, Classic Bluetooth, BLE och SMS

Rekommenderad: