stewlg - Viewing Profile: Likes - Netduino Forums
   
Netduino home hardware projects downloads community

Jump to content


The Netduino forums have been replaced by new forums at community.wildernesslabs.co. This site has been preserved for archival purposes only and the ability to make new accounts or posts has been turned off.

stewlg

Member Since 01 Mar 2014
Offline Last Active Jun 10 2014 02:38 PM
-----

#57248 Netduino NRPE monitor

Posted by stewlg on 01 April 2014 - 04:58 AM

Full post here:

 

http://www.skyscratc...r-for-netduino/




#56717 DHT11/22 sensor managed driver

Posted by stewlg on 09 March 2014 - 12:09 AM

I was getting the
 
DHT sensor Read() ok, RH = 0.0%, Temp = 0.0°C 32.0°F
 
behavior with my DHT22 and a Netduino Plus 2 until I disconnected and reconnected a pin. Then I tried Fred Werneck's previous suggestion and changed DhtSensor.cs's Read() function to this:

        public bool Read()
        {
            if (disposed)
            {
                throw new ObjectDisposedException();
            }
            // The 'bitMask' also serves as edge counter: data bit edges plus
            // extra ones at the beginning of the communication (presence pulse).
            bitMask = 1L << 41;

            data = 0;
            // lastTicks = 0; // This is not really needed, we measure duration
            // between edges and the first three values are ignored anyway.

            // Initiate communication
            portOut.Active = true;
            portOut.Write(false);       // Pull bus low
            Thread.Sleep(StartDelay);
            portIn.EnableInterrupt();   // Turn on the receiver
            portOut.Active = false;     // Release bus

            bool dataValid = false;

            // Now the interrupt handler is getting called on each falling edge.
            // The communication takes up to 5 ms, but the interrupt handler managed
            // code takes longer to execute than is the duration of sensor pulse
            // (interrupts are queued), so we must wait for the last one to finish
            // and signal completion. 20 ms should be enough, 50 ms is safe.
            if (dataReceived.WaitOne(50, false))
            {
                // TODO: Use two short-s ?
                bytes[0] = (byte)((data >> 32) & 0xFF);
                bytes[1] = (byte)((data >> 24) & 0xFF);
                bytes[2] = (byte)((data >> 16) & 0xFF);
                bytes[3] = (byte)((data >> 8) & 0xFF);

                byte checksum = (byte)(bytes[0] + bytes[1] + bytes[2] + bytes[3]);
                if (checksum == (byte)(data & 0xFF))
                {
                    dataValid = true;
                    if (bytes[0] == 0)
                    {
                        portIn.DisableInterrupt();
                    }
                    else
                    {
                        Convert(bytes);
                    }
                }
                else
                {
                    Debug.Print("DHT sensor data has invalid checksum.");
                }
            }
            else
            {
                portIn.DisableInterrupt();  // Stop receiver
                Debug.Print("DHT sensor data timeout.");  // TODO: TimeoutException?
            }
            return dataValid;
        }

Now I get this when the demo app starts up:

 

DHT sensor data timeout.
DHT sensor Read() ok, RH = 0.0%, Temp = 0.0°C 32.0°F
DHT sensor Read() ok, RH = 53.2%, Temp = 24.2°C 75.6°F
DHT sensor Read() ok, RH = 53.0%, Temp = 24.2°C 75.6°F
DHT sensor Read() ok, RH = 52.9%, Temp = 24.2°C 75.6°F
DHT sensor Read() ok, RH = 52.9%, Temp = 24.2°C 75.6°F
DHT sensor Read() ok, RH = 52.8%, Temp = 24.2°C 75.6°F

 

A timeout, one bad read, and then good ones from that point forward. I'm sure with a bit of work we could eliminate that first bad read as well, I haven't tried yet.

 

To save someone else time, I'm attaching my working project. I'm targeting the 4.3 framework successfully in it.

Attached Files




home    hardware    projects    downloads    community    where to buy    contact Copyright © 2016 Wilderness Labs Inc.  |  Legal   |   CC BY-SA
This webpage is licensed under a Creative Commons Attribution-ShareAlike License.