- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Port über Taster ein und ausschalten

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.02.2010
    Ort
    Osdorf
    Alter
    29
    Beiträge
    127
    Anzeige

    Praxistest und DIY Projekte
    Code:
    If Button1_wert_integer = 1128 then 
    PORTA.0 = 1 'Hier hängt die LED drann 
    else 
    PORTA.0 = 0 
    End If
    Wenn ich jetzt den Knopf auf meinem Joystick gedrückt halte müsste die LED ja solange leuchten biss ich wieder los lasse. Tut sie aber nicht sie blinkt extrem schnell bis ich wider los lasse. Liegt das am Bascom Programm oder daran das mein Joystick Programm fürn Pc 1128 und 0 hintereinander ausgibt wenn ich einen Knopf gedrückt halte ?
    Gruß Tjark

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.02.2010
    Ort
    Osdorf
    Alter
    29
    Beiträge
    127
    Hier mein VB code (ich weiß gehört hier nicht rein aber ich wollte keinen Anderen Tread eröffnen.
    Code:
    '' Erstellt mit SharpDevelop.
    ' Benutzer: Tjark Möller •.• 
    ' Datum: 03.03.2012
    ' Zeit: 20:32
    ' 
    ' Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
    '
    Imports System
    Imports System.Windows.Forms
    Imports Microsoft.DirectX.DirectInput
    Imports Microsoft.DirectX
    
    
    
    
    Public Partial Class MainForm
    	Public Sub New()
    		' The Me.InitializeComponent call is required for Windows Forms designer support.
    		Me.InitializeComponent()
    		serialport1.open
    		'
    		' TODO : Add constructor code after InitializeComponents
    		'
    	End Sub
    	Private applicationDevice As Device = Nothing
    Public Shared state As New JoystickState()
    
    
    
    
    Public Function InitDirectInput() As Boolean 
    
    
       
    	dim instance As DeviceInstance
    	For Each instance In Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)
    		applicationDevice = New Device(instance.InstanceGuid)
    		Exit For
    	Next instance
    
    
    	applicationDevice.SetDataFormat(DeviceDataFormat.Joystick)
    	applicationDevice.SetCooperativeLevel(Me, CooperativeLevelFlags.Exclusive Or CooperativeLevelFlags.Foreground)
    	Dim d As DeviceObjectInstance
    	For Each d In applicationDevice.Objects
    		If 0 <> (d.ObjectId And CInt(DeviceObjectTypeFlags.Axis)) Then
    			' Set the range for the axis.
    			applicationDevice.Properties.SetRange(ParameterHow.ById, d.ObjectId, New InputRange(+1, +255)) 
    		End If
    	Next d
    	Return True    
    End Function 'InitDirectInput
    Public Sub GetData()
    	If Nothing Is applicationDevice Then
    		Return
    	End If
    	Try
    		applicationDevice.Poll()
    		Catch inputex As InputException
    	If TypeOf inputex Is NotAcquiredException Or TypeOf inputex Is InputLostException Then
    		Try
    			applicationDevice.Acquire()
    			Catch
    			Return 
    		End Try
    	End If
    	End Try
    	Try
    		state = applicationDevice.CurrentJoystickState
    		Catch
    		Return
    	End Try
    	
    
    
    End Sub 
    
    
    	
    	Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
    		InitDirectInput
    	End Sub
    	
    	Sub Timer1Tick(ByVal sender As Object, ByVal e As EventArgs)
    		GetData() 
    'Axis----------------------------------------------------
    label1.Text="X = "+state.X.ToString()
    label2.Text="Y = "+state.Y.ToString()
    label3.Text="Z = "+state.Z.ToString()
    label4.Text="Rz = "+state.Rz.ToString()
    'Buttons-------------------------------------------------- 
    Label5.Text ="Button1 = "+state.GetButtons(0).Tostring 
    Label6.Text ="Button2 = "+state.GetButtons(1).Tostring 
    Label7.Text ="Button3 = "+state.GetButtons(2).Tostring 
    Label8.Text ="Button4 = "+state.GetButtons(3).Tostring 
    Label9.Text ="Button5 = "+state.GetButtons(4).Tostring 
    Label10.Text ="Button6 = "+state.GetButtons(5).Tostring 
    Label11.Text ="Button7 = "+state.GetButtons(6).Tostring 
    Label12.Text ="Button8 = "+state.GetButtons(7).Tostring 
    Label13.Text ="Button9 = "+state.GetButtons(8).Tostring 
    Label14.Text ="Button10 = "+state.GetButtons(9).Tostring 
    Label15.Text ="Button11 = "+state.GetButtons(10).Tostring 
    Label16.Text ="Button12 = "+state.GetButtons(11).Tostring 
    'Serialport Write-----------------------------------------
    If serialport1.IsOpen Then 
    'Axis-----------------------------------------------------
    serialport1.Write ("X" + (state.X).tostring + Chr(13))
    serialport1.Write ("Y" + (state.Y).tostring + Chr(13))
    serialport1.Write ("Z" + (state.Z).tostring + Chr(13))
    serialport1.Write ("Rz" + (state.Rz).tostring + Chr(13))
    'Buttons--------------------------------------------------
    SerialPort1.Write ("B1" + (state.GetButtons(0)).ToString & Chr(13))
    SerialPort1.Write ("B2" + (state.GetButtons(1)).ToString + Chr(13))
    SerialPort1.Write ("B3" + (state.GetButtons(2)).ToString + Chr(13))
    SerialPort1.Write ("B4" + (state.GetButtons(3)).ToString + Chr(13))
    SerialPort1.Write ("B5" + (state.GetButtons(4)).ToString + Chr(13))
    SerialPort1.Write ("B6" + (state.GetButtons(5)).ToString + Chr(13))
    SerialPort1.Write ("B7" + (state.GetButtons(6)).ToString + Chr(13))
    SerialPort1.Write ("B8" + (state.GetButtons(7)).ToString + Chr(13))
    SerialPort1.Write ("B9" + (state.GetButtons(8)).ToString + Chr(13))
    SerialPort1.Write ("B10" + (state.GetButtons(9)).ToString + Chr(13))
    SerialPort1.Write ("B11" + (state.GetButtons(10)).ToString + Chr(13))
    SerialPort1.Write ("B12" + (state.GetButtons(11)).ToString + Chr(13))
    
    
    
    
    end if
    	End Sub
    	
    	
    	Sub Label1Click(ByVal sender As Object, ByVal e As EventArgs)
    		
    	End Sub
    	
    	Sub MainFormLoad(ByVal sender As Object, ByVal e As EventArgs)
    		
    	End Sub
    End Class
    Gruß Tjark

  3. #13
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    44
    Beiträge
    642
    Die Entprellung wird mit dem Waitms 100 vorgenommen.... man kann die Zeit auch noch etwas verkürzen oder verlängern, so wie es am besten funktioniert.
    Der Debounce Befehl geht aber nätürlich auch.

    MFG
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  4. #14
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Neutro Beitrag anzeigen
    Die Entprellung wird mit dem Waitms 100 vorgenommen.... man kann die Zeit auch noch etwas verkürzen oder verlängern, so wie es am besten funktioniert.
    Der Debounce Befehl geht aber nätürlich auch.

    MFG
    Muss da nicht noch eine zweite If-Abfrage nach dem Waitms 100 rein? Oder habe ich da was falsch in Erinnerung?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.02.2012
    Beiträge
    127
    Könnte man das Entprellen nicht auch einfach mit einem z.B. 100nF Kondensator parallel zum Taster machen?

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.02.2010
    Ort
    Osdorf
    Alter
    29
    Beiträge
    127
    Ich denke ich weiß warum die LED Blinkt. In meinem Programm in VB habe ich einen Timer von 100ms damit habe ich die Abfrage Frequenz des Joysticks definiert. Alle 100ms Wird ein neues Signal gesendet das der Knopf gedrückt wird, dass führt wohl zum Blinken der LED. Kann ich es nicht so machen das der erste Impuls des Knopfes gewertet wird vom UART und erst nach ca. 5sek ein neuer Impuls etwas bewirkt sonst würde ich ja die ganze zeit hin und her schalten wenn ich den Knopf zu lange drücke.
    Gruß Tjark

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.02.2010
    Ort
    Osdorf
    Alter
    29
    Beiträge
    127
    So jetzt hab ich es hinbekommen das der Taster beim betätigen die LED einschaltet und diese auch an bleibt ich darf max. 5 sek auf dem Taster bleiben sonst geht sie wieder aus. Wenn ihr eine Bessere Lösung wisst die das selbe Ergebnis bring immer her damit Mein Problem ist nämlich jetzt das wenn ich den Code für die Taster abfrage und den Code für die Servos zusammen laufen lasse der Atmega völlig spinnt. Er nimmt keine Befehle mehr an und der Servo mach fürchterliche Geräusche. Außerdem wird der Spannungswandler Extrem heiß! Kann das sein das der Controller mit dem Programm überfordert ist ? Werde aber ein Atmega 328 nehmen nicht den Atmega32. Hab das neue Board noch nicht hier. Gruß Tjark
    Code:
    $regfile = "m32def.dat"$framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    Config Servos = 4 , Servo1 = Porta.2 , Servo2 = Porta.3 , Servo3 = Porta.4 , Servo4 = Porta.5 , Reload = 10
    Config Dcf77 = Pind.7 , Timer = 1 , Gosub = Sectic
    Config Porta.0 = Output
    Config Porta.1 = Output
    Config Porta.2 = Output
    Config Porta.3 = Output
    Config Porta.4 = Output
    Config Porta.5 = Output
    
    Enable Interrupts
    Time$ = "00:00:00"
    Date$ = "09/04/00"
    
    Portswitch Alias Porta.1
    Led1 Alias Porta.0
    
    Dim Inputstring As String * 5
    Dim Data_available As Byte
    '----X-----------------------------------
    Dim Joystick_x_wert_string As String * 5
    Dim Joystick_x_wert_integer As Integer
    Dim X_empfangen As Byte
    '----Y-----------------------------------
    Dim Joystick_y_wert_string As String * 5
    Dim Joystick_y_wert_integer As Integer
    Dim Y_empfangen As Byte
    '----Z-----------------------------------
    Dim Joystick_z_wert_string As String * 5
    Dim Joystick_z_wert_integer As Integer
    Dim Z_empfangen As Byte
    '----Z-Rotation--------------------------
    Dim Joystick_rz_wert_string As String * 5
    Dim Joystick_rz_wert_integer As Integer
    Dim Rz_empfangen As Byte
    'Buttons---------------------------------
    Dim Button1_wert_string As String * 5
    Dim Button1_wert_integer As Integer
    Dim B1_empfangen As Byte
    
    Do
      Data_available = Ischarwaiting()
      If Data_available > 0 Then                                'wenn Daten da sind, dann...
        Input "" , Inputstring
        X_empfangen = Instr(inputstring , "X")                  'Gibt die Position des Substrings "X" aus oder null wenn nicht gefunden
        Y_empfangen = Instr(inputstring , "Y")                  'Gibt die Position des Substrings "Y" aus oder null wenn nicht gefunden
        Z_empfangen = Instr(inputstring , "Z")                  'Gibt die Position des Substrings "Z" aus oder null wenn nicht gefunden
       Rz_empfangen = Instr(inputstring , "Rz")                 'Gibt die Position des Substrings "Z-Rotation" aus oder null wenn nicht gefunden
       B1_empfangen = Instr(inputstring , "B1")                 'Gibt die Position des Substrings "Button 1 " aus oder null wenn nicht gefunden
    
    '----X-----------------------------------
        If X_empfangen = 1 Then
           Joystick_x_wert_string = Mid(inputstring , 2)        'die erste Stelle des Strings (das "X") abscheiden
           Joystick_x_wert_integer = Val(joystick_x_wert_string)       'string in integer konvertieren
        End If
    '----Y-----------------------------------
        If Y_empfangen = 1 Then
           Joystick_y_wert_string = Mid(inputstring , 2)        'die erste Stelle des Strings (das "Y") abscheiden
           Joystick_y_wert_integer = Val(joystick_y_wert_string)       'string in integer konvertieren
        End If
    '----Z-----------------------------------
         If Z_empfangen = 1 Then
           Joystick_z_wert_string = Mid(inputstring , 2)        'die erste Stelle des Strings (das "Z") abscheiden
           Joystick_z_wert_integer = Val(joystick_z_wert_string)       'string in integer konvertieren
        End If
    '----Z-Rotation--------------------------
        If Rz_empfangen = 1 Then
           Joystick_rz_wert_string = Mid(inputstring , 2)       'die erste Stelle des Strings (das "Rz") abscheiden
           Joystick_rz_wert_integer = Val(joystick_rz_wert_string)       'string in integer konvertieren
        End If
     '----Button 1 ---------------------------
        If B1_empfangen = 1 Then
           Button1_wert_string = Mid(inputstring , 2)           'die erste Stelle des Strings (das "Rz") abscheiden
           Button1_wert_integer = Val(button1_wert_string)      'string in integer konvertieren
        End If
    End If
    
    Servo(1) = Joystick_x_wert_integer
    Servo(2) = Joystick_y_wert_integer
    Servo(3) = Joystick_z_wert_integer
    Servo(4) = Joystick_rz_wert_integer
    
    If Time$ < "00:00:05" Then                                  'Hier wird das Signal Ignoriert bzw. Schaltet den Portswitch immer auf null wenn man drückt
    Gosub Ausschalten
    End If
    
    If Time$ > "00:00:05" Then                                  'Erst nach 5sek. wird ein neues Signal erfasst                                  '
    Gosub Einschalten
    End If
    
    If Portswitch = 1 Then
    Toggle Led1
    End If
    
    Loop
    End
    
    Einschalten:
    If Button1_wert_integer = 1128 Then
    Portswitch = 1
    Time$ = "00:00:00"                                          'Sofern ein Signal vom Joystickknopf gekommen ist werden die Folgenden für 5sek. Ignoriert.
    End If
    Return
    
    Ausschalten:
    If Button1_wert_integer = 1128 Then
    Portswitch = 0
    End If
    Return
    
    Sectic:                                                     'wird sekündlich aufgerufen
       Gosub Uhranzeigen
       If _sec = 0then
       End If
    Return
    
    Uhranzeigen:
    Print Time$ ; ""
    Return

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.02.2010
    Ort
    Osdorf
    Alter
    29
    Beiträge
    127
    Oder liegt es daran das Beide Funktionen also DCF77 und Config Servo Timer1 benutzen ?
    Gruß Tjark
    Edit: Daran kann es nicht liegen so weit ich grad gelesen habe benutzt Config Servo standardmäßig Timer0 man kann aber auch Timer1 benutzten.
    Geändert von Projekt 2252 (17.05.2012 um 22:26 Uhr)

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Taster soll neben serieller schnittstelle Port togglen
    Von aphex-world im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 10.01.2010, 11:01
  2. Led mit Taster ein- und ausschalten
    Von Nullinger im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 30.01.2009, 13:00
  3. 3 Taster von RN-LCD-Adapter mit einem Port abfragen
    Von masabuana im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 20.07.2007, 12:23
  4. LED Scheinwerfer über PortA an bzw ausschalten
    Von nooob im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 8
    Letzter Beitrag: 05.09.2006, 08:49
  5. Spannungssteuerung über Taster
    Von Strahleman im Forum Elektronik
    Antworten: 62
    Letzter Beitrag: 30.01.2006, 17:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen