- Gutworks likes this
- Netduino Forums
- → Viewing Profile: Likes: Omar (OZ)
Community Stats
- Group Members
- Active Posts 564
- Profile Views 24139
- Member Title Advanced Member
- Age Age Unknown
- Birthday Birthday Unknown
-
Gender
Male
User Tools
#32833 Seven Segment Display Demos
Posted by Omar (OZ) on 28 July 2012 - 03:51 AM
#16883 Netduino USB HID Touch Screen Keyboard
Posted by Omar (OZ) on 20 August 2011 - 07:20 PM
- Bonzo likes this
#16311 Netduino USB HID Keyboard - Updated code
Posted by Omar (OZ) on 04 August 2011 - 09:04 AM
This will make the netduino a USB HID, so the netduino will simulate a keyboard in this case.
To get your netduino ready for this:
1 Install firmware 4.1.1 http://forums.netdui...re-v411-beta-1/
2. Transfer to Serial deployment http://forums.netdui...b-and-com1com2/
3. Create a project and put the class in it, add the test code to your program's main method
4. Hook up a usb to serial like this: http://www.sparkfun.com/products/9873 to your netduino's com1 or 2, which ever you chose while setting serial deployment
5. Change deployment in VS to Serial, select your com port
6. Power your netduino with a 9V battery or whatever, except usb. Deploy.
7. You need the code to run and set up the usb stream first, then connect your usb cable.
Class: Keyboard.cs 16.63KB 241 downloads
Add a reference to:
Microsoft.SPOT.Hardware.Usb
Sample use. As in the video.
string setupResult = Keyboard.SetUp(); Debug.Print(setupResult); if (setupResult != "Success") return; while (true) { led.Write(true); if (button.Read()) Keyboard.SendString("/*\n" + "* Supported Characters (with this method):\n" + "* abcdefghijklmnopqrstuvwxyz\n" + "* ABCDEFGHIJKLMNOPQRSTUVWXYZ\n" + "* 0123456789\n" + "* enter escape backspace deletethis\b\b\b\b\b\b\b\b\b\b \ttab space\n" + "* - = [ { ] } \\ | , > . < / ? ! @ # $ % ^ & * ( )\n" + "*/"); led.Write(false); Thread.Sleep(2000); }
Projects using the netduino as a keyboard coming sometime soon. I want to make a mouse class next.
I found this:
/* Custom USB HID Communication Device
* Copyright © Secret Labs LLC. All Rights Reserved.
*
*
* Licensed under the Apache 2.0 open source license
*/
in the original code from the USB HID example. I added that I expanded it. I am not big on licenses, but I think I must add it to my code as well. License info here: http://www.apache.or...ICENSE-2.0.html
- Stefan likes this
#14360 VB Example - Analog Inputs and PWM
Posted by Omar (OZ) on 16 June 2011 - 02:29 AM
First the schematic and breadboard image!
* If anyone notices an error in the schematic please inform me, I might have done it wrong when look at the actual physical breadboard and transferring it to fritzing.
schem2.PNG 57.03KB 217 downloads
schem.PNG 59.6KB 203 downloads
Code!
Option Strict Off Imports Microsoft.SPOT Imports Microsoft.SPOT.Hardware Imports SecretLabs.NETMF.Hardware Imports SecretLabs.NETMF.Hardware.Netduino Module Module1 Sub Main() Dim led1 As PWM = New PWM(Pins.GPIO_PIN_D5) Dim led2 As PWM = New PWM(Pins.GPIO_PIN_D6) Dim led3 As PWM = New PWM(Pins.GPIO_PIN_D9) Dim led4 As PWM = New PWM(Pins.GPIO_PIN_D10) Dim lightSensor0 As AnalogInput = New AnalogInput(Pins.GPIO_PIN_A0) Dim lightSensor1 As AnalogInput = New AnalogInput(Pins.GPIO_PIN_A1) Dim val1 As Integer = 0 Dim val2 As Integer = 0 lightSensor0.SetRange(0, 50) lightSensor1.SetRange(0, 50) Do While True val1 = lightSensor0.Read() val2 = lightSensor1.Read() led1.SetDutyCycle(val1) led2.SetDutyCycle(val2) led3.SetDutyCycle(val1 + val2) led4.SetDutyCycle(val1 * val2) Loop End Sub End Module
Hope that helps the VB users out. Feel free to ask any questions.
- Chris Walker and dougY like this
#12490 Force Sensor - Easy Example and Special Class
Posted by Omar (OZ) on 26 April 2011 - 01:02 AM
*Always use a resistor! Dont imitate my bad habit!
force sensor schem.PNG 103.22KB 179 downloads
force sensor schem 2.PNG 41.62KB 188 downloads
force sensor test.jpg 790.22KB 138 downloads
Magic! Oh right the code....
AnalogInput input = new AnalogInput(Pins.GPIO_PIN_A0); PWM led = new PWM(Pins.GPIO_PIN_D10); input.SetRange(0, 100); while (true) { led.SetDutyCycle((uint)input.Read()); Thread.Sleep(1); }
To enable event firing use this class I created [since analog port doesnt have built in event stuff]
using System; using Microsoft.SPOT; using SecretLabs.NETMF.Hardware; using Microsoft.SPOT.Hardware; using System.Threading; namespace Sensors { public delegate void ChangedValue(int oldValue, int newValue, DateTime time); public class Force { public event ChangedValue ValueChanged; Thread updater; AnalogInput input; int oldVal = -1; public int ignoreChangeLessThan = 0; public Force(Cpu.Pin analogPin) { input = new AnalogInput(analogPin); } public void SetRange(int min, int max) { input.SetRange(min, max); } public int Read() { return input.Read(); } public void UpdateConstantly(bool update) { if (update) { updater = new Thread(new ThreadStart(Update)); oldVal = input.Read(); updater.Start(); } else { if (updater != null) updater.Suspend(); } } private void Update() { while (updater.IsAlive) // as long as we havent stoped the thread... { int newVal = input.Read(); // get the current value if ((newVal < oldVal - ignoreChangeLessThan) || (newVal > oldVal + ignoreChangeLessThan)) { if(ValueChanged != null) ValueChanged(oldVal, newVal, DateTime.Now); // if the value has changed more than the filter value then fire the event oldVal = newVal; // now this is the new value to base a change off of. } } } } }
Use:
static Force f = new Force(Pins.GPIO_PIN_A0); public static void Main() { f.ValueChanged += new ChangedValue(f_ValueChanged); f.UpdateConstantly(true); Thread.Sleep(Timeout.Infinite); // just keep on waiting... forever } static void f_ValueChanged(int oldValue, int newValue, DateTime time) { Debug.Print("Old: " + oldValue + " || New: " + newValue); //f.UpdateConstantly(false); // stop the updating using that line }
When ignoreChangeLessThan is 0 you'll get tons of fires, i suggest a setting of 3 depending on your range or sensor you'll have to fiddle with values.
Sample output (tiny part of it) with ignoreChangeLessThan being 0:
Old: 810 || New: 823
Old: 823 || New: 836
Old: 836 || New: 847
Old: 847 || New: 855
Old: 855 || New: 865
Old: 865 || New: 873
Old: 873 || New: 878
Old: 878 || New: 886
Old: 886 || New: 892
Old: 892 || New: 899
Old: 899 || New: 903
Old: 903 || New: 907
Old: 907 || New: 911
enjoy
Attached Files
- Force Sensor.zip 50.33KB 15 downloads
- dougY likes this
#12254 TED Talk, interesting Video...
Posted by Omar (OZ) on 19 April 2011 - 08:27 PM
- Michel Trahan likes this
#11773 Extending pins through the 74hc595 shift register
Posted by Omar (OZ) on 07 April 2011 - 08:56 PM
Hey guys, I run a site called bildr that documents electronics know-how.
Our goal is to have all of our code examples written for the most popular microcontrollers.
Recently we did an article on extending the pins on your arduino using the 74hc595 shift register http://bildr.org/2011/02/74hc595/
I wrote arduino code that will allow you to directly call digital pins on the shift register (even dozens chained together) like so: setRegisterPin(147, HIGH); and register pin number 147 (if you had 20 chained together) would go high.
Im looking for anyone who could help translate this very simple arduino code for the netduino.
First of all welcome to the community!
Very nice post you made there, if you could tell us what you used to make the schematics/diagrams that would be awesome, I really liked those.
Now to what came for : http://forums.netdui...gister-example/ there is some code I posted to show how to use a shift register with the netduino, I hope that helps... let me know if you require more assistance.
- Arron Chapman likes this
#10640 GPIO pin for both input and output
Posted by Omar (OZ) on 07 March 2011 - 03:04 PM
- Chris Walker likes this
#6593 Quick & Simple Shift-register Example
Posted by Omar (OZ) on 28 December 2010 - 01:42 AM
I bought my shift register here: http://www.sparkfun.com/products/733 bu there are many different places to shop, so buy it from your favorite place.
Code:
public class ShiftRegister { private SPI _dataPort; private byte[] bitsStorage; public ShiftRegister(Cpu.Pin latch = Pins.GPIO_PIN_D10) { SPI.Configuration spiConfig = new SPI.Configuration( latch, false, // active state 0, // setup time 0, // hold time false, // clock idle state true, // clock edge 1000, // clock rate SPI.SPI_module.SPI1); _dataPort = new SPI(spiConfig); } public void WriteByteArray(byte[] byteArray) { _dataPort.Write(byteArray); } public void StoreBits(string eightBits) { if (bitsStorage == null) bitsStorage = new byte[1]; // Start the storage else { byte[] temp = bitsStorage; // save it temporarily bitsStorage = new byte[bitsStorage.Length + 1]; // make room for another eight bits for (int i = 0; i < temp.Length; i++) bitsStorage[i] = temp[i]; } while (eightBits.Length < 8) eightBits = "0" + eightBits; byte data = 0x00; char[] chars = eightBits.Substring(0, 8).ToCharArray(); for (int i = 0; i < 8; i++) data += (byte)((chars[System.Math.Abs(i - 7)] == '1') ? System.Math.Pow(2, i) : 0); bitsStorage[bitsStorage.Length-1] = data; } public void SendBits(bool eraseAfterSend = true) { WriteByteArray(bitsStorage); // send sotred bits if (eraseAfterSend) bitsStorage = null; // erase all the stored bits if told to. } }
The new and improved bit writting system is now designed to work with multiple shift registers. Although it is nice for me because I like binary and stuff... its not the way to go if you're looking for speed. Its best to use the WriteByteArray(byte[] byteArray) method instead.
If you don't have the time or brain power (like me ) to memorize/learn bits to bytes to hex char and all that mess then use this: http://home2.paulsch...et/tools/xlate/
All off and on example:
ShiftRegister shifty = new ShiftRegister(); byte[] allOn = new byte[]{0xff, 0xff}; // two bytes because we got two shift registers byte[] allOff = new byte[]{0x00, 0x00}; while (true) { shifty.WriteByteArray(allOn); Thread.Sleep(1000); shifty.WriteByteArray(allOff); Thread.Sleep(1000); }
Single Shift register:
Shiftregister.png 177.05KB 443 downloads
Double shift register all the way across the breadboard (I hope you got that reference):
doubleshiftregister.PNG 175.4KB 371 downloads
Note that there are no LEDs or other outputs on that schematic, I just wanted to keep things as neat as possible.
To make it a little more clear (hopefully):
Netduino | SR 1 | SR2
---------------------
GND | 13 | 13
GND | 8 | 8
3V3 | 16 | 16
3V3 | 10 | 10
10 | 12 | 12
13 | 11 | 11
14 | 14 | X
X | 9 | 14
Datasheet for the shift register I am using: http://www.sparkfun....C/SN74HC595.pdf
#6511 Parallax Ping))) Sensor Code
Posted by Omar (OZ) on 25 December 2010 - 06:26 AM
I made some c sharp drivers for the Ping))) Sensor from parallax (http://www.parallax....92/Default.aspx). These are pretty nice I think. I took a look at this: http://forums.netdui...ch__1#entry4555
I then decided to use the TristatePort class (previously used in my charlieplexing code). I also got started with the math behind it from someone else's code.. if you are the one who wrote some code on the speed of sound conversion let me know and I'll post a link to your thread. Sorry I forgot who it was
What I basicly did was a lot of optimization (other programmer friends of mine hate this, i love it) and cleaning up, also nice commented code makes for happy you and me! Also added a few new features like the Units enum and the math is optimized as well.
I'll make a video soon. Let me know if you have any questions or issues. Little note, the port that connects to the Ping))) does not need to be a PWM!
Enjoy
using System; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using System.Threading; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.Netduino; namespace Parallax.Sensors.Ping { public enum DistanceUnits { mm, cm, dm, m, feet, inch, yard } public class Ping { TristatePort _port; DistanceUnits _unit = DistanceUnits.mm; double _soundSpeed = 343, _convertion = (10000 / 343) * 2; // default values public Ping(Cpu.Pin pin) { _port = new TristatePort(pin, false, false, ResistorModes.Disabled); } /// <summary> /// Automaticly adjust the convertion factor depending on air temperature. /// </summary> /// <param name="degC">The temperature in degrees celsius</param> public void AdjustSoundSpeed(double degC) { /* Speed of Sound (at 20 degrees celsius): 343 m/s * or * _soundSpeed = 331.4 + 0.6 * degC * * There are 10,000,000 ticks per second. * 10,000,000 / _soundSpeed * 1000 can be simplyfied into: * 10,000 / _soundSpeed * times it by 2 because of round trip * then you get about 58.309 ticks per mm * * then multiply if other unit is needed * */ _soundSpeed = 331.4 + 0.6 * degC; _convertion = (10000 / _soundSpeed) * 2; } /// <summary> /// Return the Ping))) sensor's reading in millimeters. /// </summary> /// <param name="usedefault">Set true to return value in the unit specified by the "Unit" property. /// Set false to return value in mm.</param> public double GetDistance() { bool low = true, high = true; long t1, t2; // Set it to an putput _port.Active = true; //Send a quick HIGH pulse _port.Write(true); _port.Write(false); // Set it as an input _port.Active = false; while (low) low = !_port.Read(); t1 = System.DateTime.Now.Ticks; while (high) high = _port.Read(); t2 = System.DateTime.Now.Ticks; return Convert(((t2 - t1) / _convertion), _unit); } /// <summary> /// Convert the millimeters into other units. /// </summary> /// <param name="millimeters">The Ping))) sensor's mm reading.</param> /// <param name="outputUnit">The desired output unit.</param> public double Convert(double millimeters, DistanceUnits outputUnit) { double result = millimeters; switch (outputUnit) { case DistanceUnits.cm: result = millimeters * 0.1F; break; case DistanceUnits.dm: result = millimeters * 0.01F; break; case DistanceUnits.m: result = millimeters * 0.001F; break; case DistanceUnits.inch: result = millimeters * 0.0393700787; break; case DistanceUnits.feet: result = millimeters * 0.0032808399; break; case DistanceUnits.yard: result = millimeters * 0.0010936133; break; } return result; } public DistanceUnits Unit { get { return _unit; } set { _unit = value; } } } }
- Nico likes this
#5424 Getting Weather Data for your zip-code.
Posted by Omar (OZ) on 27 November 2010 - 07:26 PM
using System; using Microsoft.SPOT; using System.Net; using System.Text; using System.IO; namespace NPlus_Ethernet_Testing { public class WebRetrieve { public WebRetrieve() { } public string GetCurrentConditions(string zipcode) { Uri address = new Uri("http://xml.weather.yahoo.com/forecastrss?p=" + zipcode); // Create the web request HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); // Get response HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Get the response stream StreamReader reader = new StreamReader(response.GetResponseStream()); string newLine = reader.ReadLine(); int lineNumber = 0; while (newLine != "") // While we still got data { if (lineNumber == 32) // The Current weather data seems to be on line 32 always. return newLine.Split('<')[0]; // The line also has a <BR/> at the end, get rid of that by spliting it and using the first part. newLine = reader.ReadLine(); // Read next line lineNumber++; // Update line number } return "Could Not Get Data"; // In case that we dont get to line # 32 for some odd reason } } }
- Giuliano likes this
#2959 Netduino Plus Ethernet and LED
Posted by Omar (OZ) on 26 September 2010 - 10:00 PM
- bene331, Meda(CZ) and JeffJohnson like this
#2413 OZ-Solutions - Sheet Music
Posted by Omar (OZ) on 18 September 2010 - 05:35 AM
Piezo Buzzer (Netduino Forums)
Notes to Frequencies and Mario Song
If you need help with the implementation of this ask right here.
UPDATE
--------------------------------------------------------------------------
Fixed the Play method - correction provided by Robert Echten (http://forums.netdui...-robert-echten/)
Attached Files
- Sound.cs 5.68KB 165 downloads
- Jarrod Sinclair likes this
#1830 PWM Timer Access
Posted by Omar (OZ) on 06 September 2010 - 03:06 AM
OK, asking in a purely informational way, how would someone that just purchased a Netduino know this?
Forget the text, start putting it online as you write it, print it off when it's done. Just 1 suggestion....
I guess both sides aren't fully documented, sorry for the 'trolling' post, I just had good stuff in mind and got a little carried away. I am planing on posting a new video soon, featuring your shield as always.
Question... What do you suggest I do to protect the light sensor from the rgb light's awesome brightness? It isn't too bad but the less interference the better.
- Gui Ambros likes this
#1821 PWM Timer Access
Posted by Omar (OZ) on 06 September 2010 - 02:13 AM
Alright, I am a total newb so I don't think I can help much, other than testing alpha stuff.Just a reminder that we should all be civil here
OZ, let's see if we can figure out what support that Rugged Circuits needs to enhance Netduino support for their platform--and then go from there. Thanks for continuing to push the limits of the platform, and for all your efforts...
Chris
I am sorry that I reacted badly RuggedCircuits, I am just upset that I couldn't do what I was expecting.
- Netduino Forums
- → Viewing Profile: Likes: Omar (OZ)
- Privacy Policy