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.
The C# code looks good, after looking at it I noticed that I wasn't doing a very good job of adding comments to my code. I left them out to keep the paste sizes small. I assumed that most were way ahead of me. I the future I will try to add more comments so that other can tell what I was trying to do.
Tommorrow I am planning on adding 2 potentiometers 1 for stepoint, 1 for deadband. Plus a pair of relays for control of something 1 on high temperature 1 for low temperature. The relays are made by Denkovi and have a transistor driver on the board (with 3.3 vdc applyed they pull 300 microamps / .3 milliamp each).
I am currently driving 4 relays off of the shieldbase using digital I/O pins 0, 1, 2 & 3.
The problem that I have is that digital I/O_0 is true when power is applied to the Shield Base & Netduino Go main board (i.e. when I plug the USB in to the computer), the other 3 I/Os are false.
After the main board has completed booting the I/Os and relays go to the desired state provided in the code
Relay1 = New OutputPort(SB.Pins.GPIO_PIN_D0, False)
Relay2 = New OutputPort(SB.Pins.GPIO_PIN_D1, False)
Relay3 = New OutputPort(SB.Pins.GPIO_PIN_D2, False)
Relay4 = New OutputPort(SB.Pins.GPIO_PIN_D3, False)
Some where I read that the I/Os powered up in the false state, is this a firmware bug or another problem.
Some where I read that the I/Os powered up in the false state, is this a firmware bug or another problem.
Good find.
All of the IOs except for D0/D1 should power up in the "no pullup/pulldown" state. Pins D0/D1 currently initialize as a serial debug port (for users who want to use their board as a NETMF target, and for debug purposes if there are any glitches with the Shield Base's Virtual IO C# app).
As the Shield Base leaves beta, we'll change both of these pins to default the same as the other pins.
All of the IOs except for D0/D1 should power up in the "no pullup/pulldown" state. Pins D0/D1 currently initialize as a serial debug port (for users who want to use their board as a NETMF target, and for debug purposes if there are any glitches with the Shield Base's Virtual IO C# app).
As the Shield Base leaves beta, we'll change both of these pins to default the same as the other pins.
Chris
Thats good to know, when do you think you will open the additional socket for the main board? With the shield base plugged in I have run out of sockets, DANG IT MAN, WE NEED MORE SOCKETS! (never mind if you were older you would understand).
Thats good to know, when do you think you will open the additional socket for the main board? With the shield base plugged in I have run out of sockets, DANG IT MAN, WE NEED MORE SOCKETS! (never mind if you were older you would understand).
The current plan is to move the Shield Base to the SPI channel in May. We're finishing up the over-the-bus reflashing code now (for easy reflashing)...then we can work on a few updates to the Shield Base (the switch to SPI being the one I'm most excited about).
I wanted to post the last code that I worked on along with included comments in the code. Is there a better place to do this (than in the forum), something like a code bank for Visual Basic?
I think it may help the community to have a one stop shop to locate code snippets.
The only problem that I see is that the firmware and hardware are still maturing, but at least with a code bank it could be updated as improvements came along.
Imports Microsoft.SPOT
Imports Microsoft.SPOT.Hardware
Imports SecretLabs.NETMF.Hardware
Imports SecretLabs.NETMF.Hardware.NetduinoGo
Imports Nwazet.Go.Display
Imports Nwazet.Go.Fonts
Imports NetduinoGo
Imports Nwazet.Go.Imaging
Imports Nwazet.Go.Display.TouchScreen
Imports GoBus
Namespace Basic_go_display
Public Module Module1
Dim canvas As VirtualCanvas
Dim SB As ShieldBase
Dim Led As RgbLed 'Provides Temperature Status
Dim Pot1 As Potentiometer ' Setpoint
Dim Pot2 As Potentiometer ' Deadband
Dim Setpoint As Single = 0
Dim Deadband As Single = 4.0
Dim Relay1 As Microsoft.SPOT.Hardware.OutputPort ' First Stage Heating
Dim Relay2 As Microsoft.SPOT.Hardware.OutputPort ' Second Stage Heating
Dim Relay3 As Microsoft.SPOT.Hardware.OutputPort ' First Stage Cooling
Dim Relay4 As Microsoft.SPOT.Hardware.OutputPort ' Second Stage Cooling
Dim TempSensor As AnalogInput
Public ReadOnly ColorBackground As UShort = CUShort(BasicColor.Blue)
Dim lastTouchX As Integer
Dim lastTouchY As Integer
Sub Main()
canvas = New VirtualCanvas(AddressOf TouchEventHandler, AddressOf WidgetClickedHandler)
' I specified the sockets that I was using because of the multiple pots etc.
canvas.Initialize(GoSockets.Socket5)
canvas.TouchscreenCalibration()
SB = New ShieldBase(GoSockets.Socket2)
Led = New RgbLed(GoSockets.Socket7)
Pot1 = New Potentiometer(GoSockets.Socket6)
Pot2 = New Potentiometer(GoSockets.Socket8)
TempSensor = New AnalogInput(SB.AnalogChannels.ANALOG_0) ' TMP-36 sensor
Relay1 = New OutputPort(SB.Pins.GPIO_PIN_D0, False)
Relay2 = New OutputPort(SB.Pins.GPIO_PIN_D1, False)
Relay3 = New OutputPort(SB.Pins.GPIO_PIN_D2, False)
Relay4 = New OutputPort(SB.Pins.GPIO_PIN_D3, False)
While True
Setpoint = CSng(CInt(50 * Pot1.GetValue + 50.0)) ' Setpoint Range from 50.0 to 100.0 F., Whole Number Only
Deadband = CSng(CInt(10 * Pot2.GetValue + 2.0)) ' Deaband Range from 2.0 to 12.0 F., Whole Number Only
WriteTemperature(canvas, GetAverageTemperature)
Thread.Sleep(1000) ' With the 1/2 averaging + write delay, update about every 2 seconds.
End While
canvas.Reboot()
canvas.Dispose()
End Sub
' The function GetTemperature uses a TMP36 sensor, 10 mV/°C, Low voltage operation (2.7 V to 5.5 V)
' Range of −40°C to +125°C
Function GetTemperature() As Single ' Returns temperature in Celsius
Dim voltage As Single = CSng(TempSensor.Read * 3.3)
Return CSng((voltage - 0.5) * 100)
End Function
' The function GetAverageTemperature takes 10 samples and averages them.
' May not be necessary with Netduino Go, the AIO seems to be very stable.
Function GetAverageTemperature() As Single
Dim TotalTemp As Single = 0
Dim AverageTemp As Single
For i = 0 To 9 Step 1
TotalTemp += GetTemperature()
Thread.Sleep(50)
Next
AverageTemp = CSng(TotalTemp / 10)
Return AverageTemp
End Function
' I am not using this event handler, but is needed by the canvas declaration.
' You could use to adjust the setpoint and deadband instead of using a potentiometer.
Public Sub TouchEventHandler(ByVal touchEvent As TouchEvent)
Debug.Print("------------TouchEventHandler------------")
Debug.Print("X: " & touchEvent.X.ToString)
Debug.Print("Y: " & touchEvent.Y.ToString)
Debug.Print("Pressure: " & touchEvent.Pressure.ToString)
lastTouchX = touchEvent.X
lastTouchY = touchEvent.Y
End Sub
Public Sub WidgetClickedHandler(ByVal widget As Widget, ByVal touchEvent As TouchEvent)
End Sub
Public Sub WriteTemperature(ByVal canvas As VirtualCanvas, ByVal CTemp As Single)
Dim fontInfo = New Verdana14
Dim FTemp As Single = CTemp * 9 / 5 + 32 ' Converts to Farenheit
Dim KTemp As Single = CTemp + CSng(273.15) ' Converts to Kelvin (Absolute Temperature Scale)
Dim RTemp As Single = FTemp + CSng(459.67) ' Converts to Rankine (Absolute Temperature Scale)
Dim DT As Date = Date.Now ' Reads internal clock, Current Date / Time is not set, No RTC
Dim FString As String = "Farenheit = " + FTemp.ToString("N1") ' Creates String with 1 decimal place
Dim CString As String = "Celsius = " + CTemp.ToString("N1")
Dim KString As String = "Kelvin = " + KTemp.ToString("N1")
Dim RString As String = "Rankine = " + RTemp.ToString("N1")
Dim i As Integer = 0
canvas.DrawFill(CUShort(ColorBackground))
' The Netduino Go does not have a Real Time Clock that is currently available for use.
' The date / time are started at power up at 6/01/2011 0:00:00
' I put it in so that I could see the update rate etc.
canvas.DrawString(10, 10, CUShort(BasicColor.White), Verdana14.ID, DT.ToString)
canvas.DrawString(10, 50, CUShort(BasicColor.Green), Verdana14.ID, "Setpoint = " + Setpoint.ToString("N1"))
canvas.DrawString(10, 80, CUShort(BasicColor.Green), Verdana14.ID, "Deadband = " + Deadband.ToString("N1"))
canvas.DrawString(10, 120, CUShort(BasicColor.White), Verdana14.ID, FString)
canvas.DrawString(10, 150, CUShort(BasicColor.White), Verdana14.ID, CString)
canvas.DrawString(10, 180, CUShort(BasicColor.White), Verdana14.ID, KString)
canvas.DrawString(10, 210, CUShort(BasicColor.White), Verdana14.ID, RString)
' I am used to working mainly with Farenheit scale, hense FTemp was used
' to determine trip point for the relays, I added 4 relays because that is
' what I had on hand. You can add 16 using just the DIOs on 1 shield base
' more if you what to use the left over AIO also.
If FTemp < (Setpoint - Deadband) Then ' Determines Heating / Cooling modes
i = 1
ElseIf FTemp < (Setpoint - Deadband / 2) Then
i = 2
ElseIf FTemp > (Setpoint + Deadband) Then
i = 4
ElseIf FTemp > (Setpoint + Deadband / 2) Then
i = 3
End If
' The Select Case controls the relays and the RGB Led.
' I also sends a status message to the display.
Select Case i
Case 1
Led.SetColor(0, 0, 255) ' Brite Blue
Relay1.Write(True)
Relay2.Write(True)
Relay3.Write(False)
Relay4.Write(False)
canvas.DrawString(10, 250, CUShort(BasicColor.White), Verdana14.ID, "Stage 2 Heating")
Case 2
Led.SetColor(0, 0, 50) ' Dim Blue
Relay1.Write(True)
Relay2.Write(False)
Relay3.Write(False)
Relay4.Write(False)
canvas.DrawString(10, 250, CUShort(BasicColor.White), Verdana14.ID, "Stage 1 Heating")
Case 3
Led.SetColor(50, 0, 0) ' Dim Red
Relay1.Write(False)
Relay2.Write(False)
Relay3.Write(True)
Relay4.Write(False)
canvas.DrawString(10, 250, CUShort(BasicColor.White), Verdana14.ID, "Stage 1 Cooling")
Case 4
Led.SetColor(255, 0, 0) ' Brite Red
Relay1.Write(False)
Relay2.Write(False)
Relay3.Write(True)
Relay4.Write(True)
canvas.DrawString(10, 250, CUShort(BasicColor.White), Verdana14.ID, "Stage 2 Cooling")
Case Else
Led.SetColor(0, 255, 0) ' Brite Green
Relay1.Write(False)
Relay2.Write(False)
Relay3.Write(False)
Relay4.Write(False)
canvas.DrawString(10, 250, CUShort(BasicColor.White), Verdana14.ID, "Temperature Normal")
End Select
canvas.Execute() ' Updates RGB Display
End Sub
End Module
End Namespace
Thanks for the help, (especially Chris & Gutworks)
Chuck
hello guys!!
I've been trying to get on work a SDcard shield reader attached to the BaseShield and I've not still managed it : http://forums.netdui...in-netduino-go/
If you have any insight about how to get work this stuff please do not hesitate to send a reply to this post. Cheers!
I've been trying to get on work a SDcard shield reader attached to the BaseShield and I've not still managed it : http://forums.netdui...in-netduino-go/
If you have any insight about how to get work this stuff please do not hesitate to send a reply to this post. Cheers!
Hi Diego,
I haven't had a chance to work with a SD card shield yet, I been waiting for the module to come out. But just playing with the shield base one thing that seems to get alot of people is setting the pullup / pulldown resistors.
Maybe you could could send the code that you have started and the make / model of the SD shield. Maybe someone can help get it up and running.
The code for the display module uses a sd card and may provide some insight.
I saw your really cool project in the picture you attached.
Where did you get the plastic board (I can't come up with other name for it, sorry) where you place the netduino and all the other boards? And where did you get the little clamps to hold the boards in place to the plastic board?
Thank you
Thats good to know, when do you think you will open the additional socket for the main board? With the shield base plugged in I have run out of sockets, DANG IT MAN, WE NEED MORE SOCKETS! (never mind if you were older you would understand).
I have two of them and the holes are 5mm center. A couple of the forum members (Nevyn & Pete Brown I think) wrote about the Tamiya Plates.
The standoff I purchased from Amazon (Small Parts Inc) Nylon 4-40 Standoffs I used 1/2". Also used 4-40 nylon nuts for the Male end and 4-40 nylon socket head cap screws x 1/4 long to attach to the board (the hole in the standoff is 3/16" deep + about 1/8" for the thickness of the plate).
I have two of them and the holes are 5mm center. A couple of the forum members (Nevyn & Pete Brown I think) wrote about the Tamiya Plates.
The standoff I purchased from Amazon (Small Parts Inc) Nylon 4-40 Standoffs I used 1/2". Also used 4-40 nylon nuts for the Male end and 4-40 nylon socket head cap screws x 1/4 long to attach to the board (the hole in the standoff is 3/16" deep + about 1/8" for the thickness of the plate).