<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Geometrics Forum - Recent Topics				            </title>
            <link>https://www.geometrics.com/community/</link>
            <description>Geometrics Discussion Board</description>
            <language>en-US</language>
            <lastBuildDate>Fri, 03 Apr 2026 17:27:04 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>Teensy 4.1 with MFAM</title>
                        <link>https://www.geometrics.com/community/mfam/teensy-4-1-with-mfam/</link>
                        <pubDate>Wed, 25 Mar 2026 09:21:36 +0000</pubDate>
                        <description><![CDATA[Hi All,
&nbsp;
We are using the Teensy 4.1 as a logger (Adafruit GPS is linked with the Teensy) for the MFAM SX. Below is the code for the Arduino IDE (Teensy), for people who might find i...]]></description>
                        <content:encoded><![CDATA[<p>Hi All,</p>
<p>&nbsp;</p>
<p>We are using the Teensy 4.1 as a logger (Adafruit GPS is linked with the Teensy) for the MFAM SX. Below is the code for the Arduino IDE (Teensy), for people who might find it useful,</p>
<p>Roi</p>
<p>&nbsp;</p>
<div>
<div><span>#include</span><span> </span><span>&lt;NativeEthernet.h&gt;</span></div>
<div><span>#include</span><span> </span><span>&lt;SD.h&gt;</span></div>
<br />
<div><span>// ---- NETWORK CONFIGURATION ----</span></div>
<div><span>byte mac[] = </span><span>{</span><span> 0x</span><span>DE</span><span>, 0x</span><span>AD</span><span>, 0x</span><span>BE</span><span>, 0x</span><span>EF</span><span>, 0x</span><span>FE</span><span>, 0x</span><span>ED</span><span> </span><span>}</span><span>;</span></div>
<div><span>IPAddress </span><span>ip</span><span>(</span><span>192</span><span>, </span><span>168</span><span>, </span><span>2</span><span>, </span><span>10</span><span>)</span><span>;</span></div>
<div><span>IPAddress </span><span>mfamIP</span><span>(</span><span>192</span><span>, </span><span>168</span><span>, </span><span>2</span><span>, </span><span>2</span><span>)</span><span>;</span></div>
<div><span>uint16_t</span><span> mfamPort = </span><span>1000</span><span>;</span></div>
<br />
<div><span>EthernetClient client;</span></div>
<br />
<div><span>// ---- PACKET STRUCTURE ----</span></div>
<div><span>const</span><span> </span><span>int</span><span> PACKET_SIZE = </span><span>1380</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> SAMPLE_SIZE = </span><span>32</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> HEADER_SIZE = </span><span>16</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> NUM_SAMPLES = </span><span>40</span><span>;</span></div>
<div><span>const</span><span> </span><span>int</span><span> SD_CHIP_SELECT = BUILTIN_SDCARD;</span></div>
<br />
<div><span>uint8_t</span><span> </span><span>buffer</span><span>;</span></div>
<div><span>int</span><span> bufferPos = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- SD CARD ----</span></div>
<div><span>File logFile;</span></div>
<div><span>bool</span><span> sdReady = </span><span>false</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> sampleCount = </span><span>0</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> fileStartTime = </span><span>0</span><span>;</span></div>
<div><span>char</span><span> </span><span>filename</span><span>;</span></div>
<br />
<div><span>// ---- AUXILIARY CHANNEL STORAGE ----</span></div>
<div><span>double</span><span> gyroX = </span><span>0</span><span>, gyroY = </span><span>0</span><span>, gyroZ = </span><span>0</span><span>, gyroT = </span><span>0</span><span>;</span></div>
<div><span>double</span><span> accelX = </span><span>0</span><span>, accelY = </span><span>0</span><span>, accelZ = </span><span>0</span><span>, accelT = </span><span>0</span><span>;</span></div>
<div><span>double</span><span> compassX = </span><span>0</span><span>, compassY = </span><span>0</span><span>, compassZ = </span><span>0</span><span>, compassT = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- GPS FROM ADAFRUIT MODULE ON SERIAL1 (Pin 0 = RX) ----</span></div>
<div><span>char</span><span> </span><span>gpsBuffer</span><span>;</span></div>
<div><span>int</span><span> gpsBufferPos = </span><span>0</span><span>;</span></div>
<div><span>char</span><span> </span><span>gpsString</span><span> = </span><span>""</span><span>;</span></div>
<div><span>char</span><span> </span><span>gpsDate</span><span> = </span><span>"00/00/00"</span><span>;</span></div>
<div><span>char</span><span> </span><span>gpsTime</span><span> = </span><span>"00:00:00.000"</span><span>;</span></div>
<div><span>bool</span><span> gpsFix = </span><span>false</span><span>;</span></div>
<div><span>uint8_t</span><span> tsStatus = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- OUTPUT CONTROL ----</span></div>
<div><span>// Set to 1 to log every sample, 10 for 100Hz, 20 for 50Hz, etc.</span></div>
<div><span>const</span><span> </span><span>int</span><span> DOWNSAMPLE_FACTOR = </span><span>1</span><span>;</span><span> // 50 Hz output</span></div>
<div><span>int</span><span> downsampleCounter = </span><span>0</span><span>;</span></div>
<br />
<div><span>// How many minutes per file. Set to 10, 20, 60, etc.</span></div>
<div><span>const</span><span> </span><span>int</span><span> FILE_MINUTES = </span><span>10</span><span>;</span></div>
<br />
<div><span>// ---- LED INDICATOR ----</span></div>
<div><span>// Off = starting up</span></div>
<div><span>// Very slow blink (every 3 sec) = connected and logging</span></div>
<div><span>// Fast blink (4/sec) = connected but no data arriving</span></div>
<div><span>// Solid on = no SD card</span></div>
<div><span>// 3 quick flashes then pause = cannot connect to MFAM</span></div>
<div><span>const</span><span> </span><span>int</span><span> LED_PIN = </span><span>13</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> lastBlinkTime = </span><span>0</span><span>;</span></div>
<div><span>bool</span><span> ledState = </span><span>false</span><span>;</span></div>
<div><span>unsigned</span><span> </span><span>long</span><span> lastDataTime = </span><span>0</span><span>;</span></div>
<br />
<div><span>// ---- FUNCTION PROTOTYPES ----</span></div>
<div><span>void</span><span> </span><span>createNewFile</span><span>()</span><span>;</span></div>
<div><span>void</span><span> </span><span>parsePacket</span><span>(</span><span>uint8_t*</span><span> </span><span>pkt)</span><span>;</span></div>
<div><span>void</span><span> </span><span>parseAuxChannels</span><span>(</span><span>uint8_t*</span><span> </span><span>sample</span><span>, </span><span>uint16_t</span><span> </span><span>frameID)</span><span>;</span></div>
<div><span>void</span><span> </span><span>readGPS</span><span>()</span><span>;</span></div>
<div><span>void</span><span> </span><span>parseGPRMC</span><span>(</span><span>char*</span><span> </span><span>sentence)</span><span>;</span></div>
<div><span>void</span><span> </span><span>writeSample</span><span>(</span><span>unsigned</span><span> </span><span>long</span><span> </span><span>timestamp</span><span>, </span><span>uint16_t</span><span> </span><span>fiducial</span><span>, </span><span>double</span><span> </span><span>mag1</span><span>, </span><span>uint16_t</span><span> </span><span>mag1s</span><span>,</span></div>
<div><span> </span><span>double</span><span> </span><span>mag2</span><span>, </span><span>uint16_t</span><span> </span><span>mag2s</span><span>, </span><span>uint16_t</span><span> </span><span>sysStatus)</span><span>;</span></div>
<div><span>int16_t</span><span> </span><span>toSigned16</span><span>(</span><span>uint16_t</span><span> </span><span>val)</span><span>;</span></div>
<br />
<div><span>void</span><span> </span><span>createNewFile</span><span>()</span><span> </span><span>{</span></div>
<div><span> </span><span>static</span><span> </span><span>int</span><span> fileNumber = </span><span>0</span><span>;</span></div>
<div><span> // On first call, find the next available file number</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>fileNumber == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>char</span><span> </span><span>testName</span><span>;</span></div>
<div><span> </span><span>for</span><span> </span><span>(</span><span>int</span><span> i = </span><span>1</span><span>; i &lt;= </span><span>99999</span><span>; i++</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>testName, sizeof</span><span>(</span><span>testName</span><span>)</span><span>, </span><span>"MFAM_%05d.txt"</span><span>, i</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>!</span><span>SD</span><span>.</span><span>exists</span><span>(</span><span>testName</span><span>))</span><span> </span><span>{</span></div>
<div><span> fileNumber = i - </span><span>1</span><span>;</span><span> // Will be incremented below</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> fileNumber++;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>filename, sizeof</span><span>(</span><span>filename</span><span>)</span><span>, </span><span>"MFAM_%05d.txt"</span><span>, fileNumber</span><span>)</span><span>;</span></div>
<br />
<div><span> logFile = </span><span>SD</span><span>.</span><span>open</span><span>(</span><span>filename, FILE_WRITE</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>logFile</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>println</span><span>(</span><span>"Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS"</span><span>)</span><span>;</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>flush</span><span>()</span><span>;</span></div>
<div><span> fileStartTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"Logging to: "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>filename</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"ERROR: Could not create "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>filename</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>setup</span><span>()</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>begin</span><span>(</span><span>115200</span><span>)</span><span>;</span></div>
<div><span> </span><span>delay</span><span>(</span><span>2000</span><span>)</span><span>;</span></div>
<br />
<div><span> // Start GPS serial port (Adafruit Ultimate GPS defaults to 9600 baud)</span></div>
<div><span> </span><span>Serial1</span><span>.</span><span>begin</span><span>(</span><span>9600</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>pinMode</span><span>(</span><span>LED_PIN, OUTPUT</span><span>)</span><span>;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, LOW</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>memset</span><span>(</span><span>gpsString, </span><span>0</span><span>, sizeof</span><span>(</span><span>gpsString</span><span>))</span><span>;</span></div>
<br />
<div><span> // Initialize SD card</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>SD</span><span>.</span><span>begin</span><span>(</span><span>SD_CHIP_SELECT</span><span>))</span><span> </span><span>{</span></div>
<div><span> sdReady = </span><span>true</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"SD card ready."</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"WARNING: No SD card found. Serial output only."</span><span>)</span><span>;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, HIGH</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // Initialize Ethernet</span></div>
<div><span> </span><span>Ethernet</span><span>.</span><span>begin</span><span>(</span><span>mac, ip</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>Ethernet</span><span>.</span><span>hardwareStatus</span><span>()</span><span> == EthernetNoHardware</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"ERROR: No Ethernet hardware found!"</span><span>)</span><span>;</span></div>
<div><span> </span><span>while</span><span> </span><span>(</span><span>true</span><span>)</span><span> </span><span>{}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"Teensy IP: "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>Ethernet</span><span>.</span><span>localIP</span><span>())</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>"Connecting to MFAM at "</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>mfamIP</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>print</span><span>(</span><span>":"</span><span>)</span><span>;</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>mfamPort</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>client</span><span>.</span><span>connect</span><span>(</span><span>mfamIP, mfamPort</span><span>))</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Connected to MFAM!"</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Connection failed!"</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Waiting for GPS fix..."</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>createNewFile</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS"</span><span>)</span><span>;</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>loop</span><span>()</span><span> </span><span>{</span></div>
<div><span> // Always read GPS data from Serial1</span></div>
<div><span> </span><span>readGPS</span><span>()</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>!</span><span>client</span><span>.</span><span>connected</span><span>())</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>"Disconnected. Reconnecting..."</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady &amp;&amp; logFile</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>flush</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>for</span><span> </span><span>(</span><span>int</span><span> i = </span><span>0</span><span>; i &lt; </span><span>3</span><span>; i++</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, HIGH</span><span>)</span><span>;</span></div>
<div><span> </span><span>delay</span><span>(</span><span>100</span><span>)</span><span>;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, LOW</span><span>)</span><span>;</span></div>
<div><span> </span><span>delay</span><span>(</span><span>100</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>delay</span><span>(</span><span>1400</span><span>)</span><span>;</span></div>
<div><span> </span><span>client</span><span>.</span><span>connect</span><span>(</span><span>mfamIP, mfamPort</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>client</span><span>.</span><span>connected</span><span>())</span><span> </span><span>{</span></div>
<div><span> lastDataTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>return</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>while</span><span> </span><span>(</span><span>client</span><span>.</span><span>available</span><span>())</span><span> </span><span>{</span></div>
<div><span> </span><span>buffer</span><span> = </span><span>client</span><span>.</span><span>read</span><span>()</span><span>;</span></div>
<div><span> bufferPos++;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>bufferPos &gt;= PACKET_SIZE</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>parsePacket</span><span>(</span><span>buffer</span><span>)</span><span>;</span></div>
<div><span> bufferPos = </span><span>0</span><span>;</span></div>
<div><span> lastDataTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // LED patterns</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>millis</span><span>()</span><span> - lastDataTime &gt; </span><span>3000</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>millis</span><span>()</span><span> - lastBlinkTime &gt; </span><span>125</span><span>)</span><span> </span><span>{</span></div>
<div><span> ledState = !ledState;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, ledState ? HIGH : LOW</span><span>)</span><span>;</span></div>
<div><span> lastBlinkTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span><span> </span><span>else</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>millis</span><span>()</span><span> - lastBlinkTime &gt; </span><span>1500</span><span>)</span><span> </span><span>{</span></div>
<div><span> ledState = !ledState;</span></div>
<div><span> </span><span>digitalWrite</span><span>(</span><span>LED_PIN, ledState ? HIGH : LOW</span><span>)</span><span>;</span></div>
<div><span> lastBlinkTime = </span><span>millis</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // New file every FILE_MINUTES minutes</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady &amp;&amp; logFile &amp;&amp; </span><span>(</span><span>millis</span><span>()</span><span> - fileStartTime &gt; </span><span>(</span><span>unsigned</span><span> </span><span>long</span><span>)</span><span>FILE_MINUTES * </span><span>60</span><span>UL * </span><span>1000</span><span>UL</span><span>))</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>close</span><span>()</span><span>;</span></div>
<div><span> </span><span>createNewFile</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>// ---- GPS READING FROM ADAFRUIT MODULE ON SERIAL1 ----</span></div>
<div><span>void</span><span> </span><span>readGPS</span><span>()</span><span> </span><span>{</span></div>
<div><span> </span><span>while</span><span> </span><span>(</span><span>Serial1</span><span>.</span><span>available</span><span>())</span><span> </span><span>{</span></div>
<div><span> </span><span>char</span><span> c = </span><span>Serial1</span><span>.</span><span>read</span><span>()</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>c == </span><span>'$'</span><span>)</span><span> </span><span>{</span></div>
<div><span> gpsBufferPos = </span><span>0</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>gpsBufferPos &lt; </span><span>(</span><span>int</span><span>)</span><span>sizeof</span><span>(</span><span>gpsBuffer</span><span>)</span><span> - </span><span>1</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>gpsBuffer</span><span> = c;</span></div>
<div><span> gpsBufferPos++;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>c == </span><span>'</span><span>\n</span><span>'</span><span> || c == </span><span>'</span><span>\r</span><span>'</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>gpsBuffer</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>strncmp</span><span>(</span><span>gpsBuffer, </span><span>"$GPRMC"</span><span>, </span><span>6</span><span>)</span><span> == </span><span>0</span><span> || </span><span>strncmp</span><span>(</span><span>gpsBuffer, </span><span>"$GNRMC"</span><span>, </span><span>6</span><span>)</span><span> == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> // Save full sentence for logging</span></div>
<div><span> </span><span>strncpy</span><span>(</span><span>gpsString, gpsBuffer, sizeof</span><span>(</span><span>gpsString</span><span>)</span><span> - </span><span>1</span><span>)</span><span>;</span></div>
<div><span> </span><span>gpsString</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<br />
<div><span> // Remove trailing newline/carriage return</span></div>
<div><span> </span><span>int</span><span> slen = </span><span>strlen</span><span>(</span><span>gpsString</span><span>)</span><span>;</span></div>
<div><span> </span><span>while</span><span> </span><span>(</span><span>slen &gt; </span><span>0</span><span> &amp;&amp; </span><span>(</span><span>gpsString</span><span> == </span><span>'</span><span>\n</span><span>'</span><span> || </span><span>gpsString</span><span> == </span><span>'</span><span>\r</span><span>'</span><span>))</span><span> </span><span>{</span></div>
<div><span> </span><span>gpsString</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<div><span> slen--;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>parseGPRMC</span><span>(</span><span>gpsBuffer</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> gpsBufferPos = </span><span>0</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>parseGPRMC</span><span>(</span><span>char*</span><span> </span><span>sentence)</span><span> </span><span>{</span></div>
<div><span> // $GPRMC,HHMMSS.sss,A,lat,N,lon,W,speed,course,DDMMYY,...</span></div>
<div><span> </span><span>char</span><span> </span><span>copy</span><span>;</span></div>
<div><span> </span><span>strncpy</span><span>(</span><span>copy, sentence, sizeof</span><span>(</span><span>copy</span><span>)</span><span> - </span><span>1</span><span>)</span><span>;</span></div>
<div><span> </span><span>copy</span><span> = </span><span>'</span><span>\0</span><span>'</span><span>;</span></div>
<br />
<div><span> </span><span>char</span><span>* token = </span><span>strtok</span><span>(</span><span>copy, </span><span>","</span><span>)</span><span>;</span></div>
<div><span> </span><span>int</span><span> field = </span><span>0</span><span>;</span></div>
<br />
<div><span> </span><span>while</span><span> </span><span>(</span><span>token != </span><span>NULL</span><span> &amp;&amp; field &lt; </span><span>10</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>switch</span><span> </span><span>(</span><span>field</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>case</span><span> </span><span>1</span><span>:</span><span> // Time</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>strlen</span><span>(</span><span>token</span><span>)</span><span> &gt;= </span><span>6</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>gpsTime, sizeof</span><span>(</span><span>gpsTime</span><span>)</span><span>, </span><span>"%c%c:%c%c:%s"</span><span>,</span></div>
<div><span> </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, token + </span><span>4</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>2</span><span>:</span><span> // Fix status</span></div>
<div><span> gpsFix = </span><span>(</span><span>token</span><span> == </span><span>'A'</span><span>)</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>9</span><span>:</span><span> // Date</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>strlen</span><span>(</span><span>token</span><span>)</span><span> &gt;= </span><span>6</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>gpsDate, sizeof</span><span>(</span><span>gpsDate</span><span>)</span><span>, </span><span>"%c%c/%c%c/%c%c"</span><span>,</span></div>
<div><span> </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span>, </span><span>token</span><span></span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> token = </span><span>strtok</span><span>(</span><span>NULL</span><span>, </span><span>","</span><span>)</span><span>;</span></div>
<div><span> field++;</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> // Update GPS bits of tsStatus</span></div>
<div><span> tsStatus = </span><span>(</span><span>tsStatus &amp; 0x</span><span>0C</span><span>)</span><span>;</span><span> // Keep MFAM PPS bits (3,2)</span></div>
<div><span> tsStatus |= 0x</span><span>01</span><span>;</span><span> // Bit 0: RMC sentence received</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>gpsFix</span><span>)</span><span> </span><span>{</span></div>
<div><span> tsStatus |= 0x</span><span>02</span><span>;</span><span> // Bit 1: GPS fix valid</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>// ---- MFAM DATA PARSING ----</span></div>
<div><span>int16_t</span><span> </span><span>toSigned16</span><span>(</span><span>uint16_t</span><span> </span><span>val)</span><span> </span><span>{</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>val &gt; </span><span>32767</span><span>)</span><span> </span><span>return</span><span> </span><span>(</span><span>int16_t</span><span>)(</span><span>val - </span><span>65536</span><span>)</span><span>;</span></div>
<div><span> </span><span>return</span><span> </span><span>(</span><span>int16_t</span><span>)</span><span>val;</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>parseAuxChannels</span><span>(</span><span>uint8_t*</span><span> </span><span>sample</span><span>, </span><span>uint16_t</span><span> </span><span>frameID)</span><span> </span><span>{</span></div>
<div><span> </span><span>uint8_t</span><span> auxID = </span><span>(</span><span>frameID &gt;&gt; </span><span>11</span><span>)</span><span> &amp; 0x</span><span>07</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> aux0 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> aux1 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> aux2 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> aux3 = </span><span>sample</span><span> | </span><span>(</span><span>sample</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>switch</span><span> </span><span>(</span><span>auxID</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>case</span><span> </span><span>1</span><span>:</span></div>
<div><span> compassX = </span><span>toSigned16</span><span>(</span><span>aux0</span><span>)</span><span> / </span><span>0.01333333</span><span>;</span></div>
<div><span> compassY = </span><span>toSigned16</span><span>(</span><span>aux1</span><span>)</span><span> / </span><span>0.01333333</span><span>;</span></div>
<div><span> compassZ = </span><span>toSigned16</span><span>(</span><span>aux2</span><span>)</span><span> / </span><span>0.01333333</span><span>;</span></div>
<div><span> compassT = </span><span>toSigned16</span><span>(</span><span>aux3</span><span>)</span><span> / </span><span>128.0</span><span> + </span><span>25.0</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>2</span><span>:</span></div>
<div><span> gyroX = </span><span>toSigned16</span><span>(</span><span>aux0</span><span>)</span><span> / </span><span>16.384</span><span>;</span></div>
<div><span> gyroY = </span><span>toSigned16</span><span>(</span><span>aux1</span><span>)</span><span> / </span><span>16.384</span><span>;</span></div>
<div><span> gyroZ = </span><span>toSigned16</span><span>(</span><span>aux2</span><span>)</span><span> / </span><span>16.384</span><span>;</span></div>
<div><span> gyroT = </span><span>toSigned16</span><span>(</span><span>aux3</span><span>)</span><span> / </span><span>512.0</span><span> + </span><span>23.0</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>case</span><span> </span><span>4</span><span>:</span></div>
<div><span> accelX = </span><span>toSigned16</span><span>(</span><span>aux0</span><span>)</span><span> / </span><span>16384.0</span><span>;</span></div>
<div><span> accelY = </span><span>toSigned16</span><span>(</span><span>aux1</span><span>)</span><span> / </span><span>16384.0</span><span>;</span></div>
<div><span> accelZ = </span><span>toSigned16</span><span>(</span><span>aux2</span><span>)</span><span> / </span><span>16384.0</span><span>;</span></div>
<div><span> accelT = </span><span>toSigned16</span><span>(</span><span>aux3</span><span>)</span><span> / </span><span>512.0</span><span> + </span><span>23.0</span><span>;</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>default</span><span>:</span></div>
<div><span> </span><span>break</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>writeSample</span><span>(</span><span>unsigned</span><span> </span><span>long</span><span> </span><span>timestamp</span><span>, </span><span>uint16_t</span><span> </span><span>fiducial</span><span>, </span><span>double</span><span> </span><span>mag1</span><span>, </span><span>uint16_t</span><span> </span><span>mag1s</span><span>,</span></div>
<div><span> </span><span>double</span><span> </span><span>mag2</span><span>, </span><span>uint16_t</span><span> </span><span>mag2s</span><span>, </span><span>uint16_t</span><span> </span><span>sysStatus)</span><span> </span><span>{</span></div>
<br />
<div><span> </span><span>char</span><span> </span><span>tsStr</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>tsStr, sizeof</span><span>(</span><span>tsStr</span><span>)</span><span>, </span><span>"%d%d%d%d%d%d%d%d"</span><span>,</span></div>
<div><span> </span><span>(</span><span>tsStatus &gt;&gt; </span><span>7</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>6</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>5</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>4</span><span>)</span><span> &amp; </span><span>1</span><span>,</span></div>
<div><span> </span><span>(</span><span>tsStatus &gt;&gt; </span><span>3</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>2</span><span>)</span><span> &amp; </span><span>1</span><span>, </span><span>(</span><span>tsStatus &gt;&gt; </span><span>1</span><span>)</span><span> &amp; </span><span>1</span><span>, tsStatus &amp; </span><span>1</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>char</span><span> </span><span>sysHex</span><span>, </span><span>m1sHex</span><span>, </span><span>m2sHex</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>sysHex, sizeof</span><span>(</span><span>sysHex</span><span>)</span><span>, </span><span>"%04X"</span><span>, sysStatus</span><span>)</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>m1sHex, sizeof</span><span>(</span><span>m1sHex</span><span>)</span><span>, </span><span>"%04X"</span><span>, mag1s</span><span>)</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>m2sHex, sizeof</span><span>(</span><span>m2sHex</span><span>)</span><span>, </span><span>"%04X"</span><span>, mag2s</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>char</span><span> </span><span>line</span><span>;</span></div>
<div><span> </span><span>snprintf</span><span>(</span><span>line, sizeof</span><span>(</span><span>line</span><span>)</span><span>,</span></div>
<div><span> </span><span>"%10.4f,%10.4f,%4d,%s,%s,%s,%10.2f,%10.2f,%10.2f,%5.1f,%8.5f,%8.5f,%8.5f,%5.1f,%8.1f,%8.1f,%8.1f,%5.1f,%s,%s,%s,%s"</span><span>,</span></div>
<div><span> mag1, mag2, fiducial, sysHex, m1sHex, m2sHex,</span></div>
<div><span> gyroX, gyroY, gyroZ, gyroT,</span></div>
<div><span> accelX, accelY, accelZ, accelT,</span></div>
<div><span> compassX, compassY, compassZ, compassT,</span></div>
<div><span> gpsDate, gpsTime, tsStr, gpsString</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>sdReady &amp;&amp; logFile</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>println</span><span>(</span><span>line</span><span>)</span><span>;</span></div>
<div><span> </span><span>if</span><span> </span><span>(</span><span>sampleCount % </span><span>1000</span><span> == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>logFile</span><span>.</span><span>flush</span><span>()</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>sampleCount % </span><span>500</span><span> == </span><span>0</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>Serial</span><span>.</span><span>println</span><span>(</span><span>line</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
<br />
<div><span>void</span><span> </span><span>parsePacket</span><span>(</span><span>uint8_t*</span><span> </span><span>pkt)</span><span> </span><span>{</span></div>
<div><span> // Get PPS bits from MFAM system status</span></div>
<div><span> </span><span>uint16_t</span><span> firstSysStatus = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint8_t</span><span> mfamPPSbits = </span><span>(</span><span>firstSysStatus &gt;&gt; </span><span>12</span><span>)</span><span> &amp; 0x</span><span>0C</span><span>;</span></div>
<div><span> tsStatus = </span><span>(</span><span>tsStatus &amp; 0x</span><span>03</span><span>)</span><span> | mfamPPSbits;</span></div>
<br />
<div><span> </span><span>for</span><span> </span><span>(</span><span>int</span><span> i = </span><span>0</span><span>; i &lt; NUM_SAMPLES; i++</span><span>)</span><span> </span><span>{</span></div>
<div><span> </span><span>int</span><span> offset = HEADER_SIZE + </span><span>(</span><span>i * SAMPLE_SIZE</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> frameID = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<div><span> </span><span>uint16_t</span><span> fiducial = frameID &amp; 0x</span><span>07FF</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> sysStatus = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>uint32_t</span><span> mag1raw = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span> |</span></div>
<div><span> </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>16</span><span>)</span><span> | </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>24</span><span>)</span><span>;</span></div>
<div><span> </span><span>double</span><span> mag1 = mag1raw * </span><span>0.05</span><span> / </span><span>1000.0</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> mag1status = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>uint32_t</span><span> mag2raw = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span> |</span></div>
<div><span> </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>16</span><span>)</span><span> | </span><span>((</span><span>uint32_t</span><span>)</span><span>pkt</span><span> &lt;&lt; </span><span>24</span><span>)</span><span>;</span></div>
<div><span> </span><span>double</span><span> mag2 = mag2raw * </span><span>0.05</span><span> / </span><span>1000.0</span><span>;</span></div>
<br />
<div><span> </span><span>uint16_t</span><span> mag2status = </span><span>pkt</span><span> | </span><span>(</span><span>pkt</span><span> &lt;&lt; </span><span>8</span><span>)</span><span>;</span></div>
<br />
<div><span> </span><span>parseAuxChannels</span><span>(</span><span>pkt + offset, frameID</span><span>)</span><span>;</span></div>
<br />
<div><span> sampleCount++;</span></div>
<div><span> downsampleCounter++;</span></div>
<br />
<div><span> </span><span>if</span><span> </span><span>(</span><span>downsampleCounter &gt;= DOWNSAMPLE_FACTOR</span><span>)</span><span> </span><span>{</span></div>
<div><span> downsampleCounter = </span><span>0</span><span>;</span></div>
<div><span> </span><span>writeSample</span><span>(</span><span>millis</span><span>()</span><span>, fiducial, mag1, mag1status, mag2, mag2status, sysStatus</span><span>)</span><span>;</span></div>
<div><span> </span><span>}</span></div>
<div><span> </span><span>}</span></div>
<div><span>}</span></div>
</div>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Roi Granot</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/mfam/teensy-4-1-with-mfam/</guid>
                    </item>
				                    <item>
                        <title>Survey Manager quits when exporting to Montaj/GDB format</title>
                        <link>https://www.geometrics.com/community/general-magnetometer/survey-manager-quits-when-exporting-to-montaj-gdb-format/</link>
                        <pubDate>Wed, 17 Dec 2025 18:26:02 +0000</pubDate>
                        <description><![CDATA[Survey Manager 3.5.1433 and earlier versions may exit unexpectedly after the user has selected &quot;Export GDB&quot; to export magnetometer survey data to a Montaj-compatible database.[&quot;Export GDB&quot; i...]]></description>
                        <content:encoded><![CDATA[<p>Survey Manager 3.5.1433 and earlier versions may exit unexpectedly after the user has selected "Export GDB" to export magnetometer survey data to a Montaj-compatible database..</p>
<p>Survey Manager may exit without notice or it may show some information about the failure, including steps to open a service request with Seequent.</p>
<p>On systems with Montaj 2025.1 or earlier, this issue may be fixed by updating Montaj to the most recent version (2025.2 at the time of this post) and verifying that Survey Manager is at its most recent version (3.5.1433 at the time of this post).</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Magnetics SW</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/general-magnetometer/survey-manager-quits-when-exporting-to-montaj-gdb-format/</guid>
                    </item>
				                    <item>
                        <title>Quickstart Guide Now Available</title>
                        <link>https://www.geometrics.com/community/magarrow-magarrow-hardware/quickstart-guide-now-available-2/</link>
                        <pubDate>Wed, 29 Oct 2025 16:31:38 +0000</pubDate>
                        <description><![CDATA[Find the most recent version of the Quickstart Guide on the MagElement product page, or click the link here]]></description>
                        <content:encoded><![CDATA[Find the most recent version of the Quickstart Guide on the MagElement product page, or click the link <p><a href="https://www.geometrics.com/wp-content/uploads/2025/10/MagElement_Quickstart_Guide_RevA.pdf">here</a></p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Gretchen Schmauder</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magarrow-magarrow-hardware/quickstart-guide-now-available-2/</guid>
                    </item>
				                    <item>
                        <title>Quickstart Guide Now Available</title>
                        <link>https://www.geometrics.com/community/magex-magex-application/quickstart-guide-now-available/</link>
                        <pubDate>Wed, 29 Oct 2025 16:24:06 +0000</pubDate>
                        <description><![CDATA[Find the most recent version of the Quickstart Guide on the MagStation product page, or click the link here]]></description>
                        <content:encoded><![CDATA[Find the most recent version of the Quickstart Guide on the MagStation product page, or click the link <p><a href="https://www.geometrics.com/wp-content/uploads/2025/10/MagStation_Quickstart_Guide_A0.pdf">here</a></p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Gretchen Schmauder</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magex-magex-application/quickstart-guide-now-available/</guid>
                    </item>
				                    <item>
                        <title>Finding lost MagArrow II with a new MagArrow II</title>
                        <link>https://www.geometrics.com/community/magarrow-hardware/finding-lost-magarrow-ii-with-a-new-magarrow-ii/</link>
                        <pubDate>Wed, 24 Sep 2025 05:27:48 +0000</pubDate>
                        <description><![CDATA[Hello everyone, my name is Devan, and I would like to open a discussion about finding a lost MagArrow.
To give you some background, I lost my MagArrow II while it was mounted below the DJI ...]]></description>
                        <content:encoded><![CDATA[<p>Hello everyone, my name is Devan, and I would like to open a discussion about finding a lost MagArrow.</p>
<p>To give you some background, I lost my MagArrow II while it was mounted below the DJI M400 during a flight mission in a highly dense forest. We have the drone flight log, which indicates that it was stuck in a tree within a 50 m radius of the last known location. We have searched the whole area, but due to a highly dense forest and steep terrain, it was very difficult to find the MagArrow II and the drone on foot.<br /><br />For more than a month, I presume it was still perched within the tree canopy. And now we have bought a new MagArrow II to continue our survey. In this case, I desperately want to find and retrieve the lost MagArrow using the new device.<br /><br />I have an idea that if I conduct a 5 m spacing grid in both East-West and North-South directions within <span>a 100-meter radius of the last known location</span>, we could eventually narrow down our perimeter by finding an anomaly that indicates the lost device. Therefore, I have a few questions:<br />1. How magnetic is the drone and the MagArrow II?<br />2. Is it feasible to find the old MagArrow with the new MagArrow with the stated method? Alternatively, do you have any effective suggestions for a different approach?</p>
<p><span> I appreciate any insights you can provide. Thank you!</span></p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Muhammad Devandra</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magarrow-hardware/finding-lost-magarrow-ii-with-a-new-magarrow-ii/</guid>
                    </item>
				                    <item>
                        <title>MagEditor instructional video is now online</title>
                        <link>https://www.geometrics.com/community/general-magnetometer/mageditor-instructional-video-is-now-online/</link>
                        <pubDate>Fri, 08 Aug 2025 18:21:14 +0000</pubDate>
                        <description><![CDATA[Follow this link to view the video on our YouTube channel.]]></description>
                        <content:encoded><![CDATA[Follow this link to view the video on our YouTube channel. 
https://youtu.be/-STSMt8jTJY]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Gretchen Schmauder</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/general-magnetometer/mageditor-instructional-video-is-now-online/</guid>
                    </item>
				                    <item>
                        <title>Request for Sample Data File</title>
                        <link>https://www.geometrics.com/community/magarrow-magarrow-software/request-for-sample-data-file/</link>
                        <pubDate>Fri, 01 Aug 2025 22:36:57 +0000</pubDate>
                        <description><![CDATA[Could you please provide me with a sample data file recorded from the MagElement?
Thank you in advance for your assistance!]]></description>
                        <content:encoded><![CDATA[<p>Could you please provide me with a sample data file recorded from the MagElement?</p>
<p>Thank you in advance for your assistance!</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Shinji Matsuda</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magarrow-magarrow-software/request-for-sample-data-file/</guid>
                    </item>
				                    <item>
                        <title>Data storage to the MagElement unit</title>
                        <link>https://www.geometrics.com/community/magarrow-magarrow-application/data-storage-to-the-magelement-unit/</link>
                        <pubDate>Mon, 28 Jul 2025 06:19:50 +0000</pubDate>
                        <description><![CDATA[Does the MagElement have the functionality to record the acquired data onto a device like an internal SD card?]]></description>
                        <content:encoded><![CDATA[<p><span data-teams="true">Does the MagElement have the functionality to record the acquired data onto a device like an internal SD card?</span></p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Shinji Matsuda</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/magarrow-magarrow-application/data-storage-to-the-magelement-unit/</guid>
                    </item>
				                    <item>
                        <title>Windows11 compatible MagLog software</title>
                        <link>https://www.geometrics.com/community/software/windows11-compatible-maglog-software/</link>
                        <pubDate>Tue, 15 Jul 2025 22:45:21 +0000</pubDate>
                        <description><![CDATA[To make MagLog software compatible with Windows11 OS, follow the steps below:
1. Download and unzip the file below to your local computer.

2. Make sure the installed MagLog program is no...]]></description>
                        <content:encoded><![CDATA[<p>To make MagLog software compatible with Windows11 OS, follow the steps below:</p>
<p>1. Download and unzip the file below to your local computer.</p>
141
<p>2. Make sure the installed MagLog program is not running. If it is running in the background you will need to go to the task manager and manually close the program by selecting end task. For those that may have used to compatibility work around, revert back to default by unclicking Compatibility mode in the Properties&gt;Compatibility menu of the MagLog software.</p>
<p><img src="https://www.geometrics.com/wp-content/uploads/wpforo/attachments/72/thumbnail/142-image.png" /></p>
<p>3. Navigate to the folder where the unzipped files are. Double click and run the "maglog2017.exe" file.</p>
<p>4. Once the MagLog user interface pops up, the software is updated. Close the program.</p>
<p>5. Now the installed MagLog program should be compatible with Windows11 even after the downloaded files, including "maglog2017.exe", are removed from your computer.</p>
<p>Please leave a message below if it does NOT work for you!</p>
<p>A new MagLog installer will come out later.</p>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Rui Zhang</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/software/windows11-compatible-maglog-software/</guid>
                    </item>
				                    <item>
                        <title>How to test the HVB-1</title>
                        <link>https://www.geometrics.com/community/geode-hardware/how-to-test-the-hvb-1/</link>
                        <pubDate>Wed, 18 Jun 2025 15:27:44 +0000</pubDate>
                        <description><![CDATA[________Install 4ea new AA battery.
________Install dummy blasting cap to “CAP” of HVB. Make sure a wire touch the pencil lead. See attached picture.
Connect the Bendix trigger connector t...]]></description>
                        <content:encoded><![CDATA[<ol start="1" type="1">
<li><span data-olk-copy-source="MessageBody">________Install 4ea new AA battery.</span></li>
<li><span>________</span><span>Install dummy blasting cap to “CAP” of HVB. Make sure a wire touch the pencil lead. See attached picture.</span></li>
<li><span>Connect the Bendix trigger connector to the Seismograph.</span></li>
<li><span>Press “ARM” button (and keep pressing “ARM” button thru all test finished) and observe LED on the “READY”.  It takes around 1-2 second after pressing “ARM”. </span></li>
<li><span>_____________”READY” LED on around 1-2 second after pressing “ARM” switch.</span></li>
<li><span>Make sure wearing safety glasses to protect your eyes for next test.</span></li>
<li><span>_____________Wear safety glasses.</span></li>
<li><span>Press “FIRE” button while pressing “ARM” switch.  Observe dummy led cap sparks and “READY” LED off, and trigger the Seismic unit.</span></li>
<li><span>_____________Dummy led blasting cap sparks</span></li>
<li><span>______________”READY” LED off.</span></li>
<li><span>______________Trigger the Seismic unit</span></li>
<li><span>After firing the cap, “READY” LED lit on again within 5 seconds later</span></li>
<li><span>______________Within 5 seconds after firing, the “READY” LED on again.</span></li>
<li><span>Pressing “FIRE” again. You may adjust dummy led blasting cap to see sparks.</span></li>
<li><span>______________Fire works again.</span></li>
<li><span>______________Trigger works again</span></li>
<li><span>Continue firing HVB 5 times.</span></li>
<li><span>______________It works 5 times.</span></li>
</ol>]]></content:encoded>
						                            <category domain="https://www.geometrics.com/community/"></category>                        <dc:creator>Kolby Pedrie</dc:creator>
                        <guid isPermaLink="true">https://www.geometrics.com/community/geode-hardware/how-to-test-the-hvb-1/</guid>
                    </item>
							        </channel>
        </rss>
		