Hallo
ich komme irgendwie nicht weiter. Ich bin nicht gerade DER Experte was Programmierung angeht aber die grundlegenden Sachen beherrsche ich seit 2 Jahren.
Für mein Schulprojekt soll ich einen Buzzer bauen, wobei ich den IOWarrior 40 genommen habe. Dieser soll einfach nur in einer Schleife die Daten von Pin0
einlesen und sie am besten im Klartext an den PC schicken.
Die Beispiele auf der CD bringen mich, wenn sie denn funktionieren nicht wirklich weiter...
Im Grunde genommen will ich nur diesen Code durchsetzen:
Dim data As String = ""
Do
' Pseudo: data = iow.einlesen(Pin 0)
Select Case data
Case "10000000"
' Anweisung W
Case "01000000"
' Anweisung X
Case "00100000"
' Anweisung Y
Case "00010000"
' Anweisung Z
End Select
Loop
Wie mache ich das? Und wie initialisiere ich den Spaß? Dass ich zum Projekt die iowkit.dll hinzufügen muss habe ich nach langer Recherche herausgefunden...
Ich hoffe man kann mir helfen.
Pin auswerten VB.net (Anfänger)
Moderator: Guido Körber
Re: Pin auswerten VB.net (Anfänger)
Hallo.
Soll nur Pin 0 abgefragt werden, oder Port 0 mit allen 8 Pin (0-7) ?
Ist nur ein Eingang aktiv oder könnte auch Eingang Pin0 + Pin5 parrallel angesteuert werden?
Der Zustand von den einzelnen Pins kann man nur als Zahl von 0-255 (alle aus - alle ein) abfragen.
Die Abfrage der einzelnen Eingänge eines Port kann dann so erfolgen.
Select Case data
Case 1 'Pin0
' Anweisung W
Case 2 'Pin1
' Anweisung X
......
Case 128 'Pin7
Sind mehrere Pin Pin ein wird es schwieriger und man muss die einzelnen Pin erst maskieren.
Soll nur Pin 0 abgefragt werden, oder Port 0 mit allen 8 Pin (0-7) ?
Ist nur ein Eingang aktiv oder könnte auch Eingang Pin0 + Pin5 parrallel angesteuert werden?
Der Zustand von den einzelnen Pins kann man nur als Zahl von 0-255 (alle aus - alle ein) abfragen.
Die Abfrage der einzelnen Eingänge eines Port kann dann so erfolgen.
Select Case data
Case 1 'Pin0
' Anweisung W
Case 2 'Pin1
' Anweisung X
......
Case 128 'Pin7
Sind mehrere Pin Pin ein wird es schwieriger und man muss die einzelnen Pin erst maskieren.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Pin auswerten VB.net (Anfänger)
Hier mal ein grobes, sehr grobels Beispiel:
Ist aber im Prinzip das Selbe wie von Thoene schon geschrieben
Code: Select all
' Initialize everything
' Open device
iowHandles(0) = IowKitOpenDevice()
Res = IowKitRead(iowHandles(0), 0, data(0), 5)
'Bits 1,2,4,8,16,32,64,128
Select Case data(1)
Case 1
'Anweisung 1
Case 2
'Anweisung 2
Case 4
'Anweisung 3
Case 8
'Anweisung 4
End Select
' Close all IO-Warrior devices
IowKitCloseDevice((iowHandles(0)))
-
- Posts: 2
- Joined: Sat Apr 19, 2014 3:47 pm
Re: Pin auswerten VB.net (Anfänger)
Hallo nocheinmal,
also bin bis jetzt so weit gekommen:
Hierbei kann ich den Port 0.1 einmalig auslesen, allerdings reagiert er nur einmal. Heißt also ich setze ein Signal, welches richtig ausgelesen wird und für bekomme, allerdings bleibt dieser Zustand so stehen. Und genau das will ich nicht.
Außerdem ist mir noch aufgefallen, dass man den Quellcode nicht Debuggen kann... Kann mir da einer sagen, wieso dies und wie ich das Debuggen wieder einschalte?
Freundliche Grüße
also bin bis jetzt so weit gekommen:
Code: Select all
Public Sub Read()
' Read from IO-Warrior
Res = IowKitReadNonBlocking(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 8)
' Res = IowKitRead(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 8) ' Gleiches Problem
' Convert and set data
Label2.Text = "Port 0.0 nicht aktiv"
Label3.Text = "Port 0.1 nicht aktiv"
Label4.Text = "Port 0.2 nicht aktiv"
Label5.Text = "Port 0.3 nicht aktiv"
TextVal1.Text = ""
TextVal1.Text = data(1).ToString
'MsgBox(data(1).ToString & " " & Res)
Select Case data(1).ToString
Case "254"
'Timer1.Stop()
Label2.Text = "Port 0.0 aktiv"
Case "11111101"
Timer1.Stop()
Label3.Text = "Port 0.1 aktiv"
Case "11111011"
Timer1.Stop()
Label4.Text = "Port 0.2 aktiv"
Case "11110111"
Timer1.Stop()
Label5.Text = "Port 0.3 aktiv"
Case Else
End Select
End Sub
Code: Select all
data(1).ToString
Außerdem ist mir noch aufgefallen, dass man den Quellcode nicht Debuggen kann... Kann mir da einer sagen, wieso dies und wie ich das Debuggen wieder einschalte?
Freundliche Grüße
Re: Pin auswerten VB.net (Anfänger)
Soviel ich weiß wird im Normalmodus
Ich bevorzuge für die Abfrage den Spezialmodus und zwar
Das hat den Vorteil das der Aktuelle Zustand der Ports angezeigt wird.
Der Warior wird auch nicht blockiert.
Für die Case Abfrage benutze ich nur die Dezimalzahlen des Byte (0-255)
Bit0 = 1, Bit1 = 2, Bit2 = 4 usw.
Code: Select all
Res = IowKitReadNonBlocking(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 5) ; benutz.
Code: Select all
Res = IowKitRead(iowHandles(0), 1, data(0), 8)
Der Warior wird auch nicht blockiert.
Für die Case Abfrage benutze ich nur die Dezimalzahlen des Byte (0-255)
Bit0 = 1, Bit1 = 2, Bit2 = 4 usw.
Re: Pin auswerten VB.net (Anfänger)
Habe folgendes vergessen.
Für den Spezialmodus muß
Data(0) = 255
vor dem lesen gesetzt werden.
Data(0) = 0 ist für den Normalmodus.
Für den Spezialmodus muß
Data(0) = 255
vor dem lesen gesetzt werden.
Data(0) = 0 ist für den Normalmodus.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Pin auswerten VB.net (Anfänger)
Ich werde aus dem kleinen Stück Code nicht recht schlau. Wird der Timer1 irgendwann auch neu gestartet?
Wie ist die eigentliche Vorgehensweise des Programms. Ein paar mehr Infos wäre hilfreich, denn der gepostete Code sieht erstmal richtig aus.
Wie Thoene schon erwähnt hat kann man auch mit dem Special-Mode 0xFF die Pins auslesen, was ich selber auch lieber mache.
Das sähe so aus:
Wie ist die eigentliche Vorgehensweise des Programms. Ein paar mehr Infos wäre hilfreich, denn der gepostete Code sieht erstmal richtig aus.
Wie Thoene schon erwähnt hat kann man auch mit dem Special-Mode 0xFF die Pins auslesen, was ich selber auch lieber mache.
Das sähe so aus:
Code: Select all
IowKitSetTimeout(handle, 1000); //zum Abbrechen falls nicht gelesen werden kann
data(0) = 0xFF;
IowKitWrite(handle, IOW_PIPE_SPECIAL_MODE, data(0), 5);
IowKitRead(handle, IOW_PIPE_SPECIAL_MODE, data(0), 5);
data(1) -> Byte[0] //usw