-
Gesamte Inhalte
887 -
Benutzer seit
-
Letzter Besuch
Posts erstellt von AuronX
-
-
Bin grad noch im Urlaub, aber wenn es nur darum geht das bisher erreichte allgemein verfügbar zu machen, dann stell es einfach ins Forum und ich sortiere es zu nem Pull Request in deinem Namen ^^
-
Degree ist nur da um dir das Leben leichter zu machen. Deinen Servo interessieren nur Pulsweite und Periode.
Wenn du jetzt als minimale Pulsweite zum Beispiel 1000 einstellst und als minimalen Degree -25000, dann bedeutet das nicht mehr, als dass dein Servo genau dann mit einer 1000er Pulsweite angesteuert wird, wenn du eine Position von -25000 einstellst. Dein Servo "weiß" gar nichts vom Degree.
Der Sinn ist der: Wenn du einen Servo hast der 180° insgesamt drehen kann, dann kannst du den Degree von -9000 bis +9000 stellen und weißt dann, dass bei einer Position von 1000 der Servo 10° nach rechts gedreht ist.
Wenn dein Servo hingegen einen Fahrtenregler ansteuert der von keine Motordrehung bis volle Drehzahl steuert, dann kannst du den Degree von 0 bis 100 stellen und weißt zum Beispiel, dass bei Position 0 die Drehzahl 0% vom Maximum ist und bei 100 halt 100% vom Maximum.
Den Degree kannst du also frei definieren so wie es dir bequem ist, hoffe meine Erklärung war mehr hilfreich als verwirrend ^^
-
Letzteres ist technisch nciht möglich und ich vermute sogar gegen die Bedingungen von Github (automatisches Anlegen von Accounts). Zumal ja nur ein Bruchteil der Forenuser auf Github was beisteuern wird und dann noch viele schon vorher einen Account hatten (wie ich).
Code-formatierungen wird es von TF wohl zu nicht-unterstützten Sprachen kaum geben. Ansonsten reicht aber ein kostenloser Account völlig aus.
Grundprinzip bei allen Github-Projekten sieht so aus:
Du gehst auf das öffentliche Repo, dann forkst du es und führst alle Ändeurngen an deiner eigenen Kopie durch. Wenn was dabei ist was du für teilenswert hälst, dann kannst du ne "Pull Request" stellen, das ist quasi die Bitte an TF deine Änderungen zu übernehmen. Dann kann TF sich das anschauen, villt noch mit dir Rücksprache halten und am Ende übernehmen.
Das war Github in Kurzform. Falls es jetzt noch Organisatorisch was gibt kann TF das ja nachtragen, aber meiner Erfahrung nach ist es recht unkompliziert ^^
-
Github wird nicht von TF betrieben sondern ist ne unabhängige Seite die Git-Repositories für andere Leute hostet. Deswegen brauchst du da auch einen eigenen Account.
Solltest du bisher nicht mit Git oder anderen Versionsverwaltungssystemen vertraut sein, kannst du dich ja auf http://help.github.com erstmal grundsätzlich damit vertraut machen. Allerdings gibt es definitiv eine gewisse Einstiegshürde, wenn man noch nie vorher Versionsverwaltung betrieben hat.
-
Borg: Sag das nicht. Bei uns an der Uni sind die LEGO Teile ziemlich beliebt und werden von verschiedenen Leuten zerprogrammiert. Allerdings habe ich nie selbst daran gearbeitet, aber auf jeden Fall sollte es weit entfernt von unmöglich sein
-
Meiner Ansicht nach würde es hierher gehören:
https://github.com/Tinkerforge/generators
Dort Unterordner delphi und erstmal alle Klassen rein. Auch wenn es bisher nicht generiert wird ^^
-
Meiner Meinung nach dürfen Zeitangaben auch in der Form "nahe Zukunft", "ferne Zukunft", "nur in euren Träumen" erfolgen. (also nur "weiche" Zeitangaben)
-
und Degree +- 25000
Lässt du deine Software jetzt auch von -25000 bis +25000 steuern oder machst du da weiter 9000? Weil der Degree ja im Grunde "nur" eine Umrechnung ist.
-
@batti: Auf jeden Fall sollte der brickd aber nicht sterben gehen, wenn er kaputte Pakete erhält. Ist zum einen unschön, aber auch gewissermaßen ein Sicherheitsproblem (zwar nur DoS, aber immerhin ^^).
-
Zu der Schleife:
Findet das Warten nicht in der Funktion MsgWaitForMultipleObjects statt? Weil du das lock erst danach freigibst, das heißt also während du wartest darf es sich niemand anders nehmen. Ich würde jetzt vermuten, dass das Release VOR dem MsgWaitForMultipleObjects stehen sollte.
Das if(closing) usw sollte wohl lieber zwischen aquire und if(count > 0) stehen, auf jeden fall sollte es nur dort stehen wo du das lock gerade besitzt. Sonst ist es wieder möglich, dass jemand close aufruft, nachdem du auf closing geprüft hast.
-
Hmmh, ich sehe gerade das die Funktion Count in den C#Bindings überhaupt nicht benutzt wird, es wird immerzu das Property queue.count abgefragt, hat das ev. mit der o.g. Situation zutun ?
Die Funktion count macht ja nicht mehr als innerhalb einer critical-section den queue.count abzufragen. Da queue.count sonst auch nur innerhalb der locks verwendet wird ist das äquivalent.
Das lock(writeLock) in C# entspricht m.W. den Acquire und Release in DelphiwriteLock.Acquire; try ... finally writeLock.Release; end;
Tatsächlich sieht der vom C#-Compiler generierte Code ziemlich genau so aus (abgesehen von anderen Locking-Klassen )
Anfangs hatte ich die CriticalSection (WriteLock) zu Beginn und Ende von TryDequeue eingetragen, aber das führte dazu, dass der HauptThread, der nur dort reinläuft, das Enqueue vom Recv-Thread aber solange blockiert, bis die 2.5 sec abgelaufen sind.
Das klingt danach, dass du während des wartens das lock nicht abgegeben hast. Das wäre aber nötig. Ich versuche mal in Pseudo-code darzustellen wie es grob aussehen könnte (nicht schön aber selten):
while(true) { lock.aquire(); if(count > 0) { break; } lock.release(); WaitSomeTime(); } pop(); lock.release();
In diesem Beispiel habe ich jetzt sowas wie closing und exception-handling mal ausgeblendet. Das ist jetzt nur exemplarisch fürs locking, wenn du sonst keine besseren Bordmittel von Delphi bekommst.
-
Ich befürchte TryDequeue ist noch nicht korrekt gelocked (habe aber auch Probleme Delphi zu lesen ^^):
while (Count = 0) do begin state := MsgWaitForMultipleObjects(1,job,false,timeout,QS_ALLINPUT); if (closing) or (timeout < Timeout_Infinite) or (state=WAIT_TIMEOUT) then begin result := false; exit; end; timeout := tick-GetTickCount; end;
Ich verstehe nicht ganz wie, aber wenn ich es richtig sehe ist das der Code der wartet bis mindestens ein Eintrag in der Queue steckt (das ist jetzt eine Annahme von mir).
Daraufhin kommt dieser Code:
writeLock.Acquire; try p:=queue.Pop; item := p^; dispose(p); finally writeLock.Release; end;
Das Problem ist, dass zwischen dem Aquire und dem Verlassen der while-schleife darüber kein locking besteht. Es ist also möglich, dass mehrere Threads die while-schleife verlassen, dann bekommt der erste Thread das writeLock (Thread 2 hängt jetzt am aquire), holt sich das einzige Item in der Queue und gibt das lock wieder ab. Jetzt kann der zweite Thread weiterlaufen, beim Pop knallt es jetzt aber.
Der C#-Code funktioniert deswegen, weil die gesamte Schleife in einem locked-Bereich liegt, aber das Monitor.Wait es zulässt, dass man sein Lock mittendrin wieder abgibt und auch wiederbekommen kann.
Du müsstest also sicherstellen, dass man vor dem Prüfen des count das lock aquired, und es wieder abgibt und wartet falls der count == 0. Falls der count > 0, dann sollte man das lock behalten, poppen gehen und danach das lock abgeben.
Viele Grüße
Jan
-
It works under Win7 64Bit.
Did you check your host, the port and that the brickd is running?
The host should normally be localhost (if running from the same computer)
Port should be left unchanged (I don't remember the default)
To see whether the brickd is running go to
Start -> Rightclick on "Computer" -> Manage.
You get a window where you can navigate through a tree at the left side:
Services and applications -> Services
In the list search for brickd and check whether the status is "Running".
-
Nennen wir es einfach Schlafstörungen
-
Master, den will borg ja auch austauschen
-
Etwas mehr Detail wäre gut ^^
Wird nicht erkannt heißt, dass gar kein Gerät im Geräte-Manager auftaucht? Oder taucht im Geräte-Manager nur ein Gerät ohne passenden Treiber auf?
Du musst den Brick Daemon von hier installiert haben:
http://www.tinkerforge.com/doc/Downloads.html
In dessen Installationsordner wird auch ein Verzeichnis driver erstellt, dort findest du den Treiber für deine Bricks
-
Also ein Master-Master-Brick...
Nur dass es nach der Konfiguration ohne USB-Host auskommen soll
-
Meine Pull Request ist raus, aber ich glaube beim letzten Mal ist Git explodiert... Hoffe das klappt trotzdem alles halbwegs ^^
-
Ich habe zwar nicht für GPS gestimmt aber tatsächlich kenne ich eine Anwendung ^^
Ich hatte mir schonmal die Idee zusammengesponnen, dass ich in mein Auto ein Display montieren könnte das mir den Abstand und die Geschwindigkeitsdifferenz zum Vordermann anzeigt (gibt aber leider bisher keine Distanzmessung über viele Meter). Wenn ich die absolute Geschwindigkeit meines Vordermanns haben will, dann brauche ich meine eigene Geschwindigkeit. Am wenigsten basteln muss man da mit GPS. Mit mehr basteln kann man auch irgendwo ne Raddrehzahl abnehmen und aus der die Geschwindigkeit berechnen ^^
Das wäre ein (exotischer) Anwendungsfall.
-
Auf Windows Phone wiederum wurde nicht auf Abwärtskompatibilität geachtet und es gibt z.B. keine blockenden Sockets (daher auch die #ifdefs im Code).
Das ist ja furchtbar! Ich hab mich schon immer über die vielen verstreuten ifdefs geärgert... werde mal schauen, dass ich mir nen WP-SDK installiere, dann würde ich versuchen das Problem zu entschärfen.
-
Ergänzung wegen 2.0/4.0:
Die aktuell herunterladbare DLL wurde so wie es scheint für 2.0 gebaut. Daran sollte es also nicht liegen
-
Die DLLs sollen ja eigentlich 2.0 kompatibel sein. Ich müsste mal versuchen ob sie sich so wirklich kompilieren lassen...
-
In sämtliche Funktionen wird für meinen Geschmack immer die gleiche Paketstruktur redundant zusammengebaut.
Vermutlich lässt sich da noch einiges optimieren ^^
Für einen einfachen Generator ist es am Ende nur wichtig, dass man die einzelnen Methoden nach einfachen Regeln bauen kann, deiner Beschreibung nach scheinst du ja die Handhabung sogar zu vereinfachen, sollte also gut sein.
Wenn ich eine Methode generiere, dann habe ich die folgenden Informationen:
- Welche ID hat sie auf TCP-Ebene
- Wie heißt sie
- Für alle Paramter/Rückgabewerte: Name, Typ, vielfältigkeit
Vielfältigkeit wird in C# durch arrays abgebildet.
(Zur Referenz: Config vom Stepper)
-
Also wenn du ein bis zwei Beispiel-Devices geschrieben hast kann ich mir ja mal anschauen wie es mit der Generation dessen aussieht. Ohne Erfolgsgarantie, aber villt krieg ich ja was hin ^^
LCD 20x4 steigt aus, warum?
in Hardware
Geschrieben
Könnt ihr denn einen "allgemeinen" Snubber einsetzen? Dachte das käme auch immer auf die Last an die geschaltet wird. Ansonsten wäre ich auch sehr für eine Variante die vor Fehlbedienung sicher ist