PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Raspberry Pi mit Vb.net



Mcgrizzly123
03.08.2013, 12:52
Hallo

ich möchte den Laptop in meinem Roboter durch einen Raspberry Pi Modell B ersetzten (weniger Stromverbrauch, Platz/Gewicht und weil ich den Laptop noch anderweitig brauche).

Was soll der Raspberry Pi machen:

1. Einen Tcp Server hosten
2. Ein RN-mega2560 per USB befehle schicken
3. Eine Usb Webcam streamen
4. Eine Audio Kommunikation ermöglichen

Im Moment ist es mit dem Laptop so gelöst:

Eine WindowsFormAnwendung (vb.net) läuft als Tcp server auf dem Laptop. Auf dem SteuerPC läuft ebenfalls eine WindowsFormAnwendung (vb.net), die sich als Client mit dem Server verbindet und zb. Joystick Koordinaten (in einem String (x;y§servowert1%servowert2/....)) an den Server schickt. Dieser zerlegt dann den string an den Sonderzeichen und schickt die werte über den virtuellen seriellen Port an das Rn-mega2560. Gleichzeitig schickt das Rn-mega2560 werte wie akkustand zurück über den virtuellen seriellen Port an den Server(Laptop), die dieser dann wieder in einen String packt und zurück an den Clienten schickt(....zerlegen...-> Anzeigen).

Außerdem läuft auf dem SteuerPC ein lokaler Teamspeakserver mit dem sich sowohl der Laptop als auch der SteuerPC verbinden. Dadurch ist eine Audio Kommunikation mit der Umgebung des Roboters möglich.(Roboter verfügt über Aktivlautsprecher)

Im Moment funktioniert der Webcamstream nur über das Programm "Webcam XP 5" , dass einen html Server integriert hat. Diese Website, auf der das Livebild zu sehen ist, wird dann auf einem in dem Clienten eingebauten WebBrowser angezeigt.

Jetzt zu meinen Fragen:
1. Ist es möglich diese WindowsFormAnwendung (vb.net) auf dem Raspberry Pi zum laufen zu bringen (hab schon mal was von Mono gehört)
2. Unterstützt das für Frage 1 nötige Betriebssystem den Usb treiber des RN-mega2560 oder ist es mit dem Raspberry pi möglich einen direkte serielle Kommunikation zustande zubringen also mit Tx-> Rx / Tx-> Rx und halt GND.
3. Ist es möglich einen passenden Teamspeakclienten für diese Betriebsystem zu finden oder gibt es einen einfache Möglichkeit eine Audio Kommunikation zu ermöglichen.
4. Gib es eine Möglichkeit mit dem Betriebssystem das Webcambild Live zu streamen

Im Moment läuft alles noch im Rahmen eines lokalen Heimnetzwerks.(aber vielleicht soll es später noch übers Internet(Internetstick oder handyHotspot) laufen dann entweder über Hamachi oder Portfreigabe.

Mfg McGrizzly123

dremler
03.08.2013, 13:58
1. nativ wird das nicht laufen, da das ein Linuxsystem ist. Es gibt "Emulatoren" für .NET Framework, aber wie zuverlssig das Ganze funktioniert...keine Ahnung.
2. Direkt ansprechen RX und TX geht über dev/ttyAMA0
3. Sollte sich sicher was finden lassen, kenn ich mich nicht so damit aus.
4. Auch da sollte sich was finden lassen, kenn ich mich nicht so damit aus.

Kampi
03.08.2013, 21:23
Hey,

da sich das RN Mega2560 als normaler USB/Seriell Adapter anmelden wird (sieht nach einem normalen FT232 aus), kannst du davon ausgehen das du direkt über USB kommunizieren kannst.
VB.net auf dem Pi habe ich noch nicht probiert....was spricht dagegen das ganze in Python zu übersetzen? Hört sich für mich nach ein bisschen Stringbearbeitung an....das kann man schnell und einfach in Python integrieren.
Ein Webcam Bild kannst du dann sicher mit einem Webserver streamen....da gibt es glaube ich ein paar Anleitungen zu.
Im Zweifelsfall machst du einfach per PHP jede Sekunde ein Bild mit der Cam und lädst die Seite neu ;)

Mcgrizzly123
06.08.2013, 16:16
Hi

So mein Raspberry Pi ist gestern gekommen. Habe bis jetzt whezzy installiet, ein paar Sachen ausprobiert und bin Jetzt auf ein Problem gestoßen, an dem ich nicht weiter kommen:
Denn Tcp Server hab ich hinbekommen - Daten werden empfangen, der string zerlegt und das zurücksenden klappt auch -, aber bei weitersenden der Daten an das RN-Mega2560 gib es Probleme.
Python Serial ist installiert und der Rn-mega2560 wurde erkannt. Scheinbar wird auch gesendet, aber am mega2560 kommt nichts an (Adresse ist richtig da wenn ich das rn-mega2560 trenne, eine Fehlermeldung kommt, aber wenn es verbunden ist nicht).
hier mal ein test code in python:

import serial
import sys

serialport = serial.Serial("/dev/ttyUSB0", 9600)
serialport.close()
serialport.open()
serialport.write("a")
print "gesendet"
serialport.close()


und hier der test code auf dem RN-Mega2560:

$regfile = "m2560def.dat"
$hwstack = 82
$framesize = 68
$swstack = 68


$crystal = 16000000
$baud = 19200

'______Onboard-LED___________
Config Pind.5 = Output
Led Alias Portd.5
'----------------------------


'__________Relais _________

Config Pina.0 = Output
Relais1_l Alias Porta.0

Config Pina.1 = Output
Relais1_r Alias Porta.1

Config Pina.2 = Output
Relais2_r Alias Porta.2

Config Pina.3 = Output
Relais2_l Alias Porta.3
'----------------------------



'_________Motor Ports____________
Config Pinl.1 = Output
Motor1_reset Alias Portl.1

Config Pinl.0 = Output
Motor1_richtung Alias Portl.0

Config Pinl.5 = Output
Motor2_reset Alias Portl.5

Config Pinl.4 = Output
Motor2_richtung Alias Portl.4

Config Pinl.2 = Input
Pinl.2 = 1
F1_m1 Alias Portl.2

Config Pinl.3 = Input
Pinl.3 = 1
F2_m1 Alias Portl.3

Config Pinl.6 = Input
Pinl.6 = 1
F1_m2 Alias Portl.6

Config Pinl.7 = Input
Pinl.7 = 1
F2_m2 Alias Portl.7
'--------------------------------



Config Pine.5 = Input
Usb Alias Pine.5 'Ist 1 wenn USB angeschlossen

Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4


Dim Test As Byte
Led = 1

Do
Test = Waitkey()
Led = 0


Loop
End
(die ganzen Portdefintionen mal nicht beachen)

Habe auch schon mit "Input" probiert und dann im Python Code ein \n oder ein chr(13) als Zeilenumbruch verwendet.
Aber kein Erfolg der RN-Mega2560 scheint einfach nichs zu empfangen.

Hätte einer eine Idee wo ran es liegen könnte oder was ich falsch machen.

Mfg McGrizzly

TheDarkRose
06.08.2013, 16:21
Zu beachten ist, das der Raspberry Pi nur 3,3V Pegel hat. Kann sein, dass das nicht mehr als High erkannt wird. Oder es ist einfach Rx/Tx vertauscht. GND ist verbunden?

Mcgrizzly123
06.08.2013, 16:54
Hi
Das RN-Mega2560 ist über USB verbunden nicht über die GPIOs pins.

Mfg McGrizzly123

Kampi
06.08.2013, 16:57
Hey,

das Bascom Programm erwartet wahrscheinlich ein CR + LF am Zeilenende.
Der "write()" Befehl sendet aber aber nur den angegebenen Text ohne CR + LF.
Probier mal folgendes:

serialport.write("a\n\r")

Alternativ hast du mal überprüft ob der Text vom Pi gesendet wird (sprich das Pi an den PC angeschlossen und mitm Terminal drauf geschaut) und ob das Programm vom Mega richtig arbeitet?

dremler
06.08.2013, 18:01
richtiger müsste wenn sein: "a\r\n"

Kampi
06.08.2013, 18:07
richtiger müsste wenn sein: "a\r\n"

Stimmt sorry :)

Mcgrizzly123
06.08.2013, 22:17
Vielen Dank

Hat prima funktioniert.
"a\r\n"

Mfg McGrizzly

Mcgrizzly123
07.08.2013, 13:43
Hi nochmal

irgendwie funktioniert es trotzdem nicht so wie es soll. Also so hier mal der Code für Server auf dem Raspberry Pi:


from socket import *
import serial
import sys
import time

ECHO_PORT = 55555
BUFSIZE = 1024
H = 1
send = "0;0;00000/70 \n"
liste = [""]
m1 = ""
m2 = ""
r1 = ""
r2 = ""
r3 = ""
r4 = ""
rnotaus = ""
akku1 = ""
A = "A\r\n"
zeilenumbruch = "\r\n"
def main():
s = socket(AF_INET, SOCK_STREAM)
s.bind(('', ECHO_PORT))
s.listen(1)
serialport = serial.Serial("/dev/ttyUSB0", 9600)

print "Server gestartet"



conn, (remotehost, remoteport) = s.accept()
print 'Verbunden mit %s:%s' % (remotehost, remoteport)

while H == 1:

data = conn.recv(BUFSIZE)
liste = data.split(";")
del liste[9]
x = liste[0]
y = liste[1]
s1 = liste[2]
s2 = liste[3]
b1 = liste[4]
b2 = liste[5]
b3 = liste[6]
b4 = liste[7]
bnotaus = liste[8]
serialport.write(A)
serialport.write(x + "\r\n")
serialport.write(y + "\r\n")
serialport.write(s1 + "\r\n")
serialport.write(s2 + "\r\n")
serialport.write(b1 + "\r\n")
serialport.write(b2 + "\r\n")
serialport.write(b3 + "\r\n")
serialport.write(b4 + "\r\n")
serialport.write(bnotaus + "\r\n")
print "gosd" + x + y + s1 + s2 + b1 + b2 +b3 + b4 + bnotaus
m1 = serialport.readline()
m1l = m1.split("\r\n")
m1s = m1l[0]
m2 = serialport.readline()
m2l = m2.split("\r\n")
m2s = m2l[0]
r1 = serialport.readline()
r1l = r1.split("\r\n")
r1s = r1l[0]
r2 = serialport.readline()
r2l = r2.split("\r\n")
r2s = r2l[0]
r3 = serialport.readline()
r3l = r3.split("\r\n")
r3s = r3l[0]
r4 = serialport.readline()
r4l = r4.split("\r\n")
r4s = r4l[0]
rnotaus = serialport.readline()
rnotausl = rnotaus.split("\r\n")
rnotauss = rnotausl[0]
akku1 = serialport.readline()
akku1l = akku1.split("\r\n")
akku1s = akku1l[0]
print m1s + ";" + m2s + ";" + r1s + r2s + r3s +r4s + rnotauss + "/" + akku1s + "\n"
conn.send(m1s + ";" + m2s + ";" + r1s + r2s + r3s + r4s + rnotauss + "/" + akku1s + "\n")
if not data:
# Die Verbindung wurde getrennt
# Abbruch
serialport.close()
break

# Sende die Daten zurück zum client




if __name__ == '__main__':
main()




hier der Bascom Code:


$regfile = "m2560def.dat"
$hwstack = 82
$framesize = 68
$swstack = 68


$crystal = 16000000
$baud = 19200

'______Onboard-LED___________
Config Pind.5 = Output
Led Alias Portd.5
'----------------------------


'__________Relais _________

Config Pina.0 = Output
Relais1_l Alias Porta.0

Config Pina.1 = Output
Relais1_r Alias Porta.1

Config Pina.2 = Output
Relais2_r Alias Porta.2

Config Pina.3 = Output
Relais2_l Alias Porta.3
'----------------------------



'_________Motor Ports____________
Config Pinl.1 = Output
Motor1_reset Alias Portl.1

Config Pinl.0 = Output
Motor1_richtung Alias Portl.0

Config Pinl.5 = Output
Motor2_reset Alias Portl.5

Config Pinl.4 = Output
Motor2_richtung Alias Portl.4

Config Pinl.2 = Input
Pinl.2 = 1
F1_m1 Alias Portl.2

Config Pinl.3 = Input
Pinl.3 = 1
F2_m1 Alias Portl.3

Config Pinl.6 = Input
Pinl.6 = 1
F1_m2 Alias Portl.6

Config Pinl.7 = Input
Pinl.7 = 1
F2_m2 Alias Portl.7
'--------------------------------
Config Timer5 = Timer , Prescale = 8 'timer für servos
Enable Timer5
Timer5 = 62535
Config Portc = Output
Portc.0 = 0 'hier hängt servo1
Portc.1 = 0 'hier hängt servo2
Portc.2 = 0 'hier hängt servo3
Portc.3 = 0 'hier hängt servo4

On Timer5 Servoirq
Enable Interrupts


Config Pine.5 = Input
Usb Alias Pine.5 'Ist 1 wenn USB angeschlossen

Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 256 ' PWM für Motor 1+2
Enable Timer1
Led = 0


Motor1_reset = 1
Motor2_reset = 1
Dim I As Integer
Dim Alarm As Byte
Dim Test As String * 5
Dim Pos1 As Byte
Dim X As Integer
Dim X_neu As Integer
Dim Y As Integer
Dim Y_neu As Integer
Dim M1 As Integer
Dim M2 As Integer
Dim B1 As Integer
Dim B2 As Integer
Dim R1 As Integer
Dim R2 As Integer
Dim B3 As Integer
Dim B4 As Integer
Dim Notaus As Integer
Dim Akku1 As Integer
Dim Kanal As Byte
Dim Servo(4) As Word
Dim S1 As Word
Dim S2 As Word
Akku1 = 100
Echo Off
I = 0
Servo(1) = 62535
Servo(2) = 62535
Servo(3) = 62535
Servo(4) = 62535
B1 = 0
B2 = 0
R1 = 0
R2 = 0
Do
If Akku1 = 0 Then
Akku1 = 100
Else
Akku1 = Akku1 - 1
End If

Alarm = F1_m1
Alarm = Alarm + F1_m2
Alarm = Alarm + F2_m1
Alarm = Alarm + F2_m2
Alarm = 0 ' Fehlermeldungsproblem muss noch behoben werden!!!!!!

If Alarm > 0 Then





Else







'__________Joystick Koordinaten lesen und verarbeiten_________
Input #4 , Test
Pos1 = Instr(test , "A")
If Pos1 = 1 Then
Input #4 , "" , X
Input #4 , "" , Y
Input #4 , "" , S1
Input #4 , "" , S2
Input #4 , "" , B1
Input #4 , "" , B2
Input #4 , "" , B3
Input #4 , "" , B4
Input #4 , "" , Notaus



If Notaus = 0 Then

Servo(1) = 61535 + S1
Servo(2) = 63535 - S2

If B1 = R1 Then
Elseif B1 = 1 Then
Relais1_r = 1
Waitms 250
Relais1_r = 0
R1 = 1
Elseif B1 = 0 Then
Relais1_l = 1
Waitms 250
Relais1_l = 0
R1 = 0
End If

If B2 = R2 Then
Elseif B2 = 1 Then
Relais2_l = 1
Waitms 250
Relais2_l = 0
R2 = 1
Elseif B2 = 0 Then
Relais2_r = 1
Waitms 250
Relais2_r = 0
R2 = 0
End If

If X < 0 Then
X = 32767 + X
X = X / 128
Else
X = 32767 - X
X = X * -1
X = X / 128
End If
If Y < 0 Then
Y = 32767 + Y
Y = Y * -1
Y = Y / 128
Else
Y = 32767 - Y
Y = Y / 128
End If
If Y > 0 Then
If X < 0 Then
X_neu = X * -1
If Y > X_neu Then
M1 = Y
Else
M1 = X
M1 = M1 * -1
End If
Else
M1 = Y - X
End If
Else
If X > 0 Then
Y_neu = Y * -1
If Y_neu > X Then
M1 = Y
Else
M1 = X
M1 = M1 * -1
End If
Else
M1 = Y - X
End If
End If


If Y > 0 Then
If X > 0 Then
If Y > X Then
M2 = Y
Else
M2 = X
End If
Else
M2 = Y + X
End If
Else
If X < 0 Then
If Y < X Then
M2 = Y
Else
M2 = X
End If
Else
M2 = Y + X
End If
End If
M1 = M1 / 2
M2 = M2 / 2
If M1 > 5 Then
Motor1_richtung = 1
Compare1a = M1
Elseif M1 < -5 Then
Motor1_richtung = 0
Compare1a = -m1
Else
Compare1a = 0
End If
If M2 > 5 Then
Motor2_richtung = 1
Compare1b = M2
Elseif M2 < -5 Then
Motor2_richtung = 0
Compare1b = -m2
Else
Compare1b = 0
End If
Else
Compare1a = 0
Compare1b = 0
End If


End If


End If

'-------------------------------------------
Print #4 , M1
Print #4 , M2
Print #4 , R1
Print #4 , R2
Print #4 , B3
Print #4 , B4
Print #4 , Notaus
Print #4 , Akku1
Loop


Servoirq:
If Kanal = 0 Then
If Portc.0 = 0 Then
Timer5 = Servo(1)
Portc.0 = 1
Else
Portc.0 = 0
Incr Kanal
End If
End If
If Kanal = 1 Then
If Portc.1 = 0 Then
Timer5 = Servo(2)
Portc.1 = 1
Else
Portc.1 = 0
Incr Kanal
End If
End If
If Kanal = 2 Then
If Portc.2 = 0 Then
Timer5 = Servo(3)
Portc.2 = 1
Else
Portc.2 = 0
Incr Kanal
End If
End If
If Kanal = 3 Then
If Portc.3 = 0 Then
Timer5 = Servo(4)
Portc.3 = 1
Else
Portc.3 = 0
Incr Kanal
End If
End If

If Kanal = 4 Then
Timer5 = 40000
Kanal = 0
End If
Return
End

Das Problem ist was vom Rn-mega2560 kommt wird zwar richtig vom Server empfangen und richtig weiter an den Client gesendet, aber was an das RN-Mega2560 vom RPi gesendet wird, empfängt dieser wohl nicht richtig. Empfangen werden soll es "A" das klappt, dann x(0), y(0), s1(1000), s2(1000), b1(0), b2(0), b3(0), b4(0), bnotaus(0). Bei diesen Werten sollte zurückkommen m1(-255), m2(255), r1(0), r2(0), r3(0), r4(0), rnotaus(0), akku1(langsam von 100 bis 0 und dann wieder bei 100 anfangen). Wenn jetzt der Joystick neutral steht(x= 37268, y= 37268 und zurückkommen m1 = 0 m2 = 0) und das selbe bei den Buttons wenn 1 gesendet wird soll 1 zurückkommen.

Mit dem alten vb.net Server hat das prima funktionier, hier mal der Code für den alten vb.net Server:


Imports System.Text
Imports System.Net.Sockets
Imports System.Threading
Imports System.IO
Public Class Form1
Dim X As String = "32767"
Dim Y As String = "32767"
Dim B1 As String = "0"
Dim B2 As String = "0"
Dim B3 As String = "0"
Dim B4 As String = "0"
Dim notaus As String = "0"
Dim M1 As String = "0"
Dim M2 As String = "0"
Dim S1 As String = "1000"
Dim S2 As String = "1000"
Dim R1 As String = "0"
Dim R2 As String = "0"
Dim R3 As String = "0"
Dim R4 As String = "0"
Dim Rnotaus As String = "0"
Dim Akku1 As String = "78"
Dim port As Integer = 31415
Dim tcpclient As TcpClient
Dim tcplistener As New TcpListener(port)
Dim networkstream As NetworkStream
Dim streamw As StreamWriter
Dim streamr As StreamReader
Dim clientmessage As String
Dim thread_server As System.Threading.Thread
Private timer1 As New System.Timers.Timer
Private timer2 As New System.Timers.Timer
Dim down As Byte


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SerialPort1.PortName = TextBox1.Text
SerialPort1.Open()
Timer3.Start()
Timer4.Start()
TextBox1.BackColor = Color.Lime
multi_server()

End Sub


Private Sub multi_server()
thread_server = New System.Threading.Thread(AddressOf server)
thread_server.Start()
End Sub


Private Sub server()

tcplistener.Start()

ListBox1.Items.Add("[SERVER]: ist ONLINE")
ListBox1.SelectedIndex = ListBox1.Items.Count - 1
Try
tcpclient = tcplistener.AcceptTcpClient

ListBox1.Items.Add("[CLIENT]: Connected")
ListBox1.SelectedIndex = ListBox1.Items.Count - 1
notaus = 0
timer1.Start()
timer2.Start()


Catch ex As Exception

MsgBox("FAIL_____FAIL_____FAIL")
End Try

End Sub

Private Sub Timer_empfangen(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs)
o:

Dim pos5 As Integer
Dim pos1 As Integer
Dim pos2 As Integer
Dim pos3 As Integer
Dim pos4 As Integer
networkstream = tcpclient.GetStream()
Dim streamr = New StreamReader(networkstream)
clientmessage = streamr.ReadLine()

pos1 = InStr(1, clientmessage, ";")
pos2 = InStr(1, clientmessage, ",")
pos3 = InStr(1, clientmessage, "!")
pos4 = InStr(1, clientmessage, "§")
pos5 = InStr(1, clientmessage, "clientdown")

If pos5 > 0 Then
timer1.Stop()
timer2.Stop()
notaus = 1
tcpclient.Close()
ListBox1.Items.Add("[CLIENT]: has Disconnected")
ListBox1.SelectedIndex = ListBox1.Items.Count - 1
server()
GoTo o
Else
X = Mid(clientmessage, 1, pos1 - 1)
Y = Mid(clientmessage, pos1 + 1, pos2 - pos1 - 1)
S1 = Mid(clientmessage, pos2 + 1, pos3 - pos2 - 1)
S2 = Mid(clientmessage, pos3 + 1, pos4 - pos3 - 1)
B1 = Mid(clientmessage, pos4 + 1, 1)
B2 = Mid(clientmessage, pos4 + 2, 1)
B3 = Mid(clientmessage, pos4 + 3, 1)
B4 = Mid(clientmessage, pos4 + 4, 1)
notaus = Mid(clientmessage, pos4 + 5, 1)

TextBox2.Text = X & "/" & Y & "/" & S1 & "/" & S2 & "/" & B1 & B2 & B3 & B4 & notaus

ListBox1.Items.Add("[CLIENT]: " + clientmessage)
ListBox1.SelectedIndex = ListBox1.Items.Count - 1
End If

End Sub

Private Sub Form1_FormClosend(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
tcpclient.Close()
tcplistener.Stop()
End Sub

Private Sub Timer_senden(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs)
networkstream = tcpclient.GetStream()
Dim streamw = New StreamWriter(networkstream)
TextBox5.Text = M1 & ";" & M2 & ";" & R1 & R2 & R3 & R4 & Rnotaus & "/" & Akku1
streamw.WriteLine(M1 & ";" & M2 & ";" & R1 & R2 & R3 & R4 & Rnotaus & "/" & Akku1)
streamw.Flush()
End Sub



Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Control.CheckForIllegalCrossThreadCalls = False
AddHandler timer1.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf Me.Timer_empfangen)
timer1.Interval = 1
AddHandler timer2.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf Me.Timer_senden)
timer2.Interval = 4
End Sub


Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
If SerialPort1.BytesToRead > 0 Then
Do
M1 = SerialPort1.ReadLine()
M2 = SerialPort1.ReadLine()
R1 = SerialPort1.ReadLine()
R2 = SerialPort1.ReadLine()
R3 = SerialPort1.ReadLine()
R4 = SerialPort1.ReadLine()
Rnotaus = SerialPort1.ReadLine()
Akku1 = SerialPort1.ReadLine()


TextBox4.Text = M1 & ";" & M2 & ":" & R1 & R2 & R3 & R4 & Rnotaus & "/" & Akku1


If SerialPort1.BytesToRead = 0 Then
Exit Do
End If
Loop
End If
End Sub

Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
TextBox3.Text = X & "/" & Y & "/" & S1 & "/" & S2 & "/" & B1 & B2 & B3 & B4 & notaus
SerialPort1.Write("A")
SerialPort1.Write(Chr(13))
SerialPort1.Write(X)
SerialPort1.Write(Chr(13))
SerialPort1.Write(Y)
SerialPort1.Write(Chr(13))
SerialPort1.Write(S1)
SerialPort1.Write(Chr(13))
SerialPort1.Write(S2)
SerialPort1.Write(Chr(13))
SerialPort1.Write(B1)
SerialPort1.Write(Chr(13))
SerialPort1.Write(B2)
SerialPort1.Write(Chr(13))
SerialPort1.Write(B3)
SerialPort1.Write(Chr(13))
SerialPort1.Write(B4)
SerialPort1.Write(Chr(13))
SerialPort1.Write(notaus)
SerialPort1.Write(Chr(13))
End Sub
End Class


Private Sub Timer4_Tick ist der Teil in dem an das RN-Mega2560 gesendet wird und Private Sub Timer3_Tick wo die Daten vom RN-mega2560 empfangen werden.

Mfg McGrrizzly

Thomas$
07.08.2013, 14:24
Bauderate mal angesehen?

"serialport = serial.Serial("/dev/ttyUSB0", 9600)"

"$crystal = 16000000 $baud = 19200"
bauderaten dieser code vereinigt euch

btw zum thema steuerung über website geht websocket (html5)gut, und für webcam soll mjpg_streamer gut gehen auch wenn ich noch probleme damit habe

Mcgrizzly123
07.08.2013, 14:34
hi
die Bauderate für usb wird aber hier definiert


Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4

Thomas$
07.08.2013, 15:27
ok 4 hardware uarts auch gut
wenn ich das so richtig verstanden habe lässt er sich auch darüber flashen (mit bootloader), muss man ihn dafür manuel reseten?
beim arduino muss man dies nicht dies führt aber zu dem neben effekt das wenn der port geöffnet wird dieser ersteinmal reset wird (http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection)


\r\n chr(13) + chr(10)

im vb.net code
SerialPort1.Write(X)
SerialPort1.Write(Chr(13))

oder hat SerialPort1.Write chr(10) automatisch angehängt?

$baud würde ich trotzdem rausnehmen oder auch auf 9600 definieren ;)

Mcgrizzly123
07.08.2013, 15:48
ok

wie soll ich den Code dann ändern

serialport.write(x + "\r\n")

so

serialport.write(x + "\r\n" + chr(13) + chr(10))

oder


serialport.write(x + chr(13) + chr(10))

oder

serialport.write(x + "\r\n" + chr(10)

ps: $baud wurde entfernt

Thomas$
07.08.2013, 16:08
mach es doch wie im vb.net code
serialport.write(x)
serialport.write(chr(13))
wenn es mit dem bascom code so funktioniert hat, wobei es mich wundert, dass es den zeilenumbruch überhaupt braucht.


edite
bzw zu code auf seite 1 mit

Test = Waitkey()
vlt mal mit Waitkey(#4)

Mcgrizzly123
07.08.2013, 16:28
Ok

Danke hat geklappt


edite
bzw zu code auf seite 1 mit

Test = Waitkey()
vlt mal mit Waitkey(#4)

Upps

Mfg McGrizzly

Mcgrizzly123
10.08.2013, 14:24
Hab mal Motion ausprobiert hat mir aber eine zu große Zeitverzögerung

bei mjpg_streamer bekomme ich folgende fehlermeldung



pi@raspberrypi ~/mjpg-streamer $ mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -p 8025 -y -w /usr/local/www"
MJPG Streamer Version: svn rev: 3:172
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format............: MJPEG
i: The format asked unavailable, so the width 640 height 472
The inpout device does not supports MJPEG mode
You may also try the YUV mode (-yuv option), but it requires a much more CPU power
Init v4L2 failed !! exit fatal
i: init_VideoIn failed

Thomas$
10.08.2013, 14:33
ich kann mich der fehlermeldung nur anschliesen, soweit bin ich auch schon gekommen ^^
mit fswebcam kann man zumindestens einzelbider machen, aber zum streamen die bilder immer auf der sdkarte speichern und über website aufrufen ist nun auch nicht das ideale

Mcgrizzly123
10.08.2013, 15:38
Ach noch ne Frage ich bekomme zwar einen Mumble Server auf dem RPi insatlliert aber nicht den Clienten den einzigen Link den ich gefunden, der "is broken".

Oder geht das überhaupt nicht.
Ziel ist es wie zb. mit Teamspeak (server+Client auf Roboter +Client am SteuerPC) mit der Umgebung des Roboters kommunizieren zu können.
Muss nicht mumble , hätte auch nichts gegen was anderes(freeware bitte).

Mfg Mcgrizzly123