hey guys need help …
help me to change this code to work on FEZ SPIDER… here is the code, this code for HC SR04 ultrasonic sensor
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
namespace HC_SR04
{
/// <summary>
/// Class for controlling the HC-SR04 Ultrasonic Range detector
/// Written by John E. Wilson
/// Version 1.1 - 2012/04/03 - Corrected constructor pin documentation
/// Free to use, please attribute credit
/// </summary>
public class HC_SR04
{
private OutputPort portOut;
private InterruptPort interIn;
private long beginTick;
private long endTick;
private long minTicks; // System latency, subtracted off ticks to find actual sound travel time
private double inchConversion;
private double version;
/// <summary>
/// Constructor
/// </summary>
/// <param name="pinTrig">Netduino pin connected to the HC-SR04 Trig pin</param>
/// <param name="pinEcho">Netduino pin connected to the HC-SR04 Echo pin</param>
public HC_SR04(Cpu.Pin pinTrig, Cpu.Pin pinEcho)
{
portOut = new OutputPort(pinTrig, false);
interIn = new InterruptPort(pinEcho, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeLow);
interIn.OnInterrupt += new NativeEventHandler(interIn_OnInterrupt);
minTicks = 6200L;
inchConversion = 1440.0;
version = 1.1;
}
/// <summary>
/// Returns the library version number
/// </summary>
public double Version
{
get
{
return version;
}
}
/// <summary>
/// Trigger a sensor reading
/// Convert ticks to distance using TicksToInches below
/// </summary>
/// <returns>Number of ticks it takes to get back sonic pulse</returns>
public long Ping()
{
// Reset Sensor
portOut.Write(true);
Thread.Sleep(1);
// Start Clock
endTick = 0L;
beginTick = System.DateTime.Now.Ticks;
// Trigger Sonic Pulse
portOut.Write(false);
// Wait 1/20 second (this could be set as a variable instead of constant)
Thread.Sleep(50);
if (endTick > 0L)
{
// Calculate Difference
long elapsed = endTick - beginTick;
// Subtract out fixed overhead (interrupt lag, etc.)
elapsed -= minTicks;
if (elapsed < 0L)
{
elapsed = 0L;
}
// Return elapsed ticks
return elapsed;
}
// Sonic pulse wasn't detected within 1/20 second
return -1L;
}
/// <summary>
/// This interrupt will trigger when detector receives back reflected sonic pulse
/// </summary>
/// <param name="data1">Not used</param>
/// <param name="data2">Not used</param>
/// <param name="time">Transfer to endTick to calculated sound pulse travel time</param>
void interIn_OnInterrupt(uint data1, uint data2, DateTime time)
{
// Save the ticks when pulse was received back
endTick = time.Ticks;
}
/// <summary>
/// Convert ticks to inches
/// </summary>
/// <param name="ticks"></param>
/// <returns></returns>
public double TicksToInches(long ticks)
{
return (double)ticks / inchConversion;
}
/// <summary>
/// The ticks to inches conversion factor
/// </summary>
public double InchCoversionFactor
{
get
{
return inchConversion;
}
set
{
inchConversion = value;
}
}
/// <summary>
/// The system latency (minimum number of ticks)
/// This number will be subtracted off to find actual sound travel time
/// </summary>
public long LatencyTicks
{
get
{
return minTicks;
}
set
{
minTicks = value;
}
}
}
public class Program
{
public static void Main()
{
HC_SR04 sensor = new HC_SR04(Pins.GPIO_PIN_D6, Pins.GPIO_PIN_D7);
while (true)
{
long ticks = sensor.Ping();
if (ticks > 0L)
{
double inches = sensor.TicksToInches(ticks);
}
}
}
}
}
there are several examples and threads on this sensor. If you can’t re-factor the code for Spider, just go back to one of those working samples.
Secretlabs is the netduino equivalent of GHI.premium. If they use functions specifically built on their hardware, you will not simply be able to transfer over to spider (same as the other way if you use premium library functions)
ok, architect i just do what you said i remove those secret labs…for the extender what are the reference i nee to add how to write the new code for those pin?
You will need to get Socket first providing the number of the socket you have connected the extender to. The you can get any pin from the socket object and use it to pass to the sensor driver constructor.
public class Program
{
public static void Main()
{
[b]HC_SR04 sensor = new HC_SR04(Pins.GPIO_PIN_D6, Pins.GPIO_PIN_D7);[/b]
while (true)
{
long ticks = sensor.Ping();
if (ticks > 0L)
{
double inches = sensor.TicksToInches(ticks);
}
}
}
}
}
in the above code i have an error with the bold line “pins” it says “the word pins does not exist in the current context” how to fix this? this code is related with previous code i post here
no architect this is the whole code of the project i’m face with problem i mention above
using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Touch;
using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
using Microsoft.SPOT.Hardware;
using Gadgeteer;
//using SecretLabs.NETMF.Hardware;
//using SecretLabs.NETMF.Hardware.Netduino;
namespace HC
{
public class HC_SR04
{
private OutputPort portOut;
private InterruptPort interIn;
private long beginTick;
private long endTick;
private long minTicks; // System latency, subtracted off ticks to find actual sound travel time
private double inchConversion;
private double version;
private Socket _socket;
/// <summary>
/// Constructor
/// </summary>
/// <param name="pinTrig">Netduino pin connected to the HC-SR04 Trig pin</param>
/// <param name="pinEcho">Netduino pin connected to the HC-SR04 Echo pin</param>
public HC_SR04(Cpu.Pin pinTrig, Cpu.Pin pinEcho)
{
portOut = new OutputPort(pinTrig, false);
interIn = new InterruptPort(pinEcho, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeLow);
interIn.OnInterrupt += new NativeEventHandler(interIn_OnInterrupt);
minTicks = 6200L;
inchConversion = 1440.0;
version = 1.1;
}
/// <summary>
/// Returns the library version number
/// </summary>
public double Version
{
get
{
return version;
}
}
/// <summary>
/// Trigger a sensor reading
/// Convert ticks to distance using TicksToInches below
/// </summary>
/// <returns>Number of ticks it takes to get back sonic pulse</returns>
public long Ping()
{
// Reset Sensor
portOut.Write(true);
Thread.Sleep(1);
// Start Clock
endTick = 0L;
beginTick = System.DateTime.Now.Ticks;
// Trigger Sonic Pulse
portOut.Write(false);
// Wait 1/20 second (this could be set as a variable instead of constant)
Thread.Sleep(50);
if (endTick > 0L)
{
// Calculate Difference
long elapsed = endTick - beginTick;
// Subtract out fixed overhead (interrupt lag, etc.)
elapsed -= minTicks;
if (elapsed < 0L)
{
elapsed = 0L;
}
// Return elapsed ticks
return elapsed;
}
// Sonic pulse wasn't detected within 1/20 second
return -1L;
}
/// <summary>
/// This interrupt will trigger when detector receives back reflected sonic pulse
/// </summary>
/// <param name="data1">Not used</param>
/// <param name="data2">Not used</param>
/// <param name="time">Transfer to endTick to calculated sound pulse travel time</param>
void interIn_OnInterrupt(uint data1, uint data2, DateTime time)
{
// Save the ticks when pulse was received back
endTick = time.Ticks;
}
/// <summary>
/// Convert ticks to inches
/// </summary>
/// <param name="ticks"></param>
/// <returns></returns>
public double TicksToInches(long ticks)
{
return (double)ticks / inchConversion;
}
/// <summary>
/// The ticks to inches conversion factor
/// </summary>
public double InchCoversionFactor
{
get
{
return inchConversion;
}
set
{
inchConversion = value;
}
}
/// <summary>
/// The system latency (minimum number of ticks)
/// This number will be subtracted off to find actual sound travel time
/// </summary>
public long LatencyTicks
{
get
{
return minTicks;
}
set
{
minTicks = value;
}
}
}
public class Program
{
public static void Main()
{
HC_SR04 sensor = new HC_SR04(Pins.GPIO_PIN_D6, Pins.GPIO_PIN_D7);
while (true)
{
long ticks = sensor.Ping();
if (ticks > 0L)
{
double inches = sensor.TicksToInches(ticks);
}
}
}
}
}
Because those are the pins that were used in that example on netduino. You have to provide pins you are using on the spider using Spider pin enumeration. What socket and pins are you connecting it to?
using System;
using System.Collections;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Touch;
using Gadgeteer.Networking;
using GT = Gadgeteer;
using GTM = Gadgeteer.Modules;
using Gadgeteer.Modules.GHIElectronics;
using Microsoft.SPOT.Hardware;
using Gadgeteer;
using GHI.Premium.Hardware;
//using SecretLabs.NETMF.Hardware;
//using SecretLabs.NETMF.Hardware.Netduino;
namespace HC
{
public class HC_SR04
{
private OutputPort portOut;
private InterruptPort interIn;
private long beginTick;
private long endTick;
private long minTicks; // System latency, subtracted off ticks to find actual sound travel time
private double inchConversion;
private double version;
Socket _socket;
/// <summary>
/// Constructor
/// </summary>
/// <param name="pinTrig">Netduino pin connected to the HC-SR04 Trig pin</param>
/// <param name="pinEcho">Netduino pin connected to the HC-SR04 Echo pin</param>
public HC_SR04(Cpu.Pin pinTrig, Cpu.Pin pinEcho)
// public HC_SR04(EMX.Pin pinTrig, EMX.Pin pinEcho)
{
portOut = new OutputPort(pinTrig, false);
interIn = new InterruptPort(pinEcho, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeLow);
interIn.OnInterrupt += new NativeEventHandler(interIn_OnInterrupt);
minTicks = 6200L;
inchConversion = 1440.0;
version = 1.1;
}
/// <summary>
/// Returns the library version number
/// </summary>
public double Version
{
get
{
return version;
}
}
/// <summary>
/// Trigger a sensor reading
/// Convert ticks to distance using TicksToInches below
/// </summary>
/// <returns>Number of ticks it takes to get back sonic pulse</returns>
public long Ping()
{
// Reset Sensor
portOut.Write(true);
Thread.Sleep(1);
// Start Clock
endTick = 0L;
beginTick = System.DateTime.Now.Ticks;
// Trigger Sonic Pulse
portOut.Write(false);
// Wait 1/20 second (this could be set as a variable instead of constant)
Thread.Sleep(50);
if (endTick > 0L)
{
// Calculate Difference
long elapsed = endTick - beginTick;
// Subtract out fixed overhead (interrupt lag, etc.)
elapsed -= minTicks;
if (elapsed < 0L)
{
elapsed = 0L;
}
// Return elapsed ticks
return elapsed;
}
// Sonic pulse wasn't detected within 1/20 second
return -1L;
}
/// <summary>
/// This interrupt will trigger when detector receives back reflected sonic pulse
/// </summary>
/// <param name="data1">Not used</param>
/// <param name="data2">Not used</param>
/// <param name="time">Transfer to endTick to calculated sound pulse travel time</param>
void interIn_OnInterrupt(uint data1, uint data2, DateTime time)
{
// Save the ticks when pulse was received back
endTick = time.Ticks;
}
/// <summary>
/// Convert ticks to inches
/// </summary>
/// <param name="ticks"></param>
/// <returns></returns>
public double TicksToInches(long ticks)
{
return (double)ticks / inchConversion;
}
/// <summary>
/// The ticks to inches conversion factor
/// </summary>
public double InchCoversionFactor
{
get
{
return inchConversion;
}
set
{
inchConversion = value;
}
}
/// <summary>
/// The system latency (minimum number of ticks)
/// This number will be subtracted off to find actual sound travel time
/// </summary>
public long LatencyTicks
{
get
{
return minTicks;
}
set
{
minTicks = value;
}
}
}
public class Program
{
public static void Main()
{
//HC_SR04 sensor = new HC_SR04(Pins.GPIO_PIN_D6, Pins.GPIO_PIN_D7);
HC_SR04 sensor = new HC_SR04(EMX.Pin.IO45, EMX.Pin.IO8);
while (true)
{
long ticks = sensor.Ping();
if (ticks > 0L)
{
double inches = sensor.TicksToInches(ticks);
}
}
}
}
}