Mein erstes eigenes Netduino Projekt. Mit 6 LEDs bilde ich die Funktion eines Würfels nach.
Über den Onboard-Switch wird eine neue Runde eingeleitet. Es werden 2x nacheinander alle LEDs angeschalten um eine kleine Animation zu machen und danach wird das Ergebnis über die LEDs angezeigt. Zusätzlich wird im Debugger ausgegeben was der “Würfel gerade macht”.
Für Vorschläge was man besser / anders machen kann, bin ich natürlich immer offen.
Dice (1126 Downloads )
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;
namespace _Test
{
public class Dice
{
public static OutputPort led1 = new OutputPort(
Pins.GPIO_PIN_D1,
false);
public static OutputPort led2 = new OutputPort(
Pins.GPIO_PIN_D2,
false);
public static OutputPort led3 = new OutputPort(
Pins.GPIO_PIN_D3,
false);
public static OutputPort led4 = new OutputPort(
Pins.GPIO_PIN_D4,
false);
public static OutputPort led5 = new OutputPort(
Pins.GPIO_PIN_D5,
false);
public static OutputPort led6 = new OutputPort(
Pins.GPIO_PIN_D6,
false);
public static InputPort button = new InputPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled);
public static int Result;
public static int Round;
public static void Main()
{
while (true) // do this "forever" :)
{
if (!button.Read())
{
Round += 1;
Debug.Print("-----------------------");
Debug.Print("Round: " + Round);
Debug.Print("-----------------------");
Debug.Print("Clear all leds...");
ClearLeds();
Debug.Print("Go around: 1...");
LedCircle(100);
Debug.Print("Go around: 2...");
LedCircle(200);
Debug.Print("Dice!!!");
DisplayRandomNumber();
Debug.Print("Result: " + Result);
}
}
}
private static void LedCircle(int sleeptime)
{
led1.Write(true);
Thread.Sleep(sleeptime);
led1.Write(false);
led2.Write(true);
Thread.Sleep(sleeptime);
led2.Write(false);
led3.Write(true);
Thread.Sleep(sleeptime);
led3.Write(false);
led4.Write(true);
Thread.Sleep(sleeptime);
led4.Write(false);
led5.Write(true);
Thread.Sleep(sleeptime);
led5.Write(false);
led6.Write(true);
Thread.Sleep(sleeptime);
led6.Write(false);
}
private static void DisplayRandomNumber()
{
Random rd = new Random();
Result = 0;
while (Result == 0) // 0 not allowed
{
Result = rd.Next(7);
}
switch (Result)
{
case 1:
led1.Write(true);
break;
case 2:
led1.Write(true);
led2.Write(true);
break;
case 3:
led1.Write(true);
led2.Write(true);
led3.Write(true);
break;
case 4:
led1.Write(true);
led2.Write(true);
led3.Write(true);
led4.Write(true);
break;
case 5:
led1.Write(true);
led2.Write(true);
led3.Write(true);
led4.Write(true);
led5.Write(true);
break;
case 6:
led1.Write(true);
led2.Write(true);
led3.Write(true);
led4.Write(true);
led5.Write(true);
led6.Write(true);
break;
default:
Debug.Print("Error: " + Result + " is bigger then 6!");
break;
}
}
private static void ClearLeds()
{
led1.Write(false);
led2.Write(false);
led3.Write(false);
led4.Write(false);
led5.Write(false);
led6.Write(false);
}
}
}
Hallo Jonny
Verfolge Deine tollen Beiträge und habe heute auch mein Netduino erhalten :) Vielleicht für den Crack etwas doofe Fragen, habe aber bis jetzt noch keine Antwort gefunden: Wo ist der Befehlssatz und vor allem die “E/A Definition” für das Netduino zu finden (zB. GPIO_PIN_D1, aber wie heisst dann der analoge Eingang) oder entstammen diese dem C# ? Und ist es möglich zB einen Analogwert zu einem bestimmten Zeitpunkt Resistent auf dem Netduino abzulegen?
Ich komme eben von der SPS (Siemens) Seite und möchte mir jetzt frisch C# aneignen…
Freue mich schon auf Deinen nächsten Beitrag, mfg Martin
Vielen Dank erstmal.
Schön das die SPS’ler auch auf den Netduino kommen :lol:
E/A Definition machst du im Programm mit z.B.:
Die Ports können sind aber Variabel, dass heißt können als Eingang oder Ausgang genutzt werden (gibt von Siemens ja auch Karten die das können über z.B. Hardware Würfel oder Softwareseitig).
Analogwert ablegen, meinst du damit einfach einen Wert? Natürlich … in z.B. einer Datei auf der Speicherkarte oder per LAN an einen Rechner o.Ä.
Bei Fragen einfach fragen :lol:
Viele Grüße
Johann
Hey danke für die schnelle Antwort :)
Also das mit den Ports belegen habe ich ja geschnallt, nur wo kann ich nachschauen wie die Ports heissen (also; Digitaler Port = “GPIO_PIN_D1”, Taster auf Platine = “Onboard_SW_1”, LED auf Platine = “Onboard_LED”, Analoger Port =”??”, sonstiges was man noch ansprechen kann?) und was bedeutet der resistor_mode?
Öhm Speicherkarte?? – leider nein – geht also nur mit der plus Version, wenns PC unabhängig sein soll?
Grüsse, Martin
(wahrscheindlich überseh ichs dauernd, aber gibts eigentlich kein “Manual” von dem Teil, ausser dieser starting Guide :blush: )
Mhh, ich glaub ich versteh die Frage nicht ganz… ist ja schon Freitag :lol:
Die Belegung der Pins ist hier abgebildet:
Specs
Viele Interessante Sachen gibts auch im Wiki:
Wiki
Was willst du mit dem Analogwert machen? Weiterverarbeiten? Wenn ja einfach in eine Variable schreiben…
Ich mache noch ein Beispiel mit nem Poti… am Wochenende hab ich vielleicht bisl Zeit, aber erst gehts in die Berge :tongue:
Jou – dann stell ich doch einfach die Frage anders; wie sieht denn des aus wenn Du einen Analogeingang definierst? (Das Problem was icht habe ist nicht die Hard- sondern die Software Seite :blink: )
Ja der Analogwert wird quasi als position “geteacht” und soll dann, auch noch nach einem Spunnungsunterbruch vorhanden sein, damit man den nicht nach jedem mal ausschalten neu teachen muss.
Hey viel spass in den Bergern und den passenden Schnupfspruch gibts auch noch auf den weg: “Rumpedibumpel und weg war der Kumpel – priis”
Grüsse und schönes Weekend
Martin
Sorry für die späte Antwort, hatte Freitag noch viel zu tun (war Holz machen :happy: ).
Analogeingang ist ganz einfach zu definieren:
Zum lesen des Wertes ganz einfach in ein Objekt schreiben:
Ich mach evtl. heute noch ein Beispiel :biggrin:
Danke für den Schnupfspruch, sowas kann ma immer brauchen!
Hallo Johann
Herzlichen Dank für den Analog Beitrag – konnte meine Idee schon fast fertig verwirklichen :) Ist schon ein geniales Teil dieser Netduino. Betreffend meiner Frage für den Speicher (falls es noch Mitleser gibt dies intressiert): Scheinbar ist man seitens Netduino daran einen kleinen Bereich für diesen Zweck zugänglich zu machen, damit man kleine Pre-Settings ablegen kann ohne Speicherkarte. (http://forums.netduino.com/index.php?/topic/838-save-custom-settings/page__st__40) Es bleibt also zu hoffen…
Viele Grüsse
Martin
Hi Martin,
… ja, das ist ist es.
Hatte leider noch keine Zeit mir das Thema interner Speicher / Settings anzuschauen.
Aber danke für den Link!
Viele Grüße
Johann
Hallo Johann
Ich bins mal wieder :ninja: Gibt es eigentlich beim Netduino eine einfache möglichkeit Ein- ein bzw Ausschaltverzögerung zu machen, bei welcher nicht das ganze Programm stopt (also wie beim sleep Befehl) und einigermassen Zeitgenau läuft?
Viele grüsse aus dem verschneiten Fricktal :tongue:
Martin
Müsste mit nem Timer wohl am besten gehen, hoffe ich komm die Tage mal zurück zu meinem Netduino. Bin bisl im Stress :cwy:
MSDN Timer
Gruß aus der fast schneefreien Hallertau