Jump to content

FSFIan

Members
  • Posts

    1301
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by FSFIan

  1. The error you are seeing happens in the line that tries to send the multicast UDP packet. I suspect the firewall is interfering with that. What I do not understand is why the interactive control reference manages to connect and receive data but the socat script does not. When you say the control reference works fine you do mean that you can see live data and manipulate in-game switches, right? The baud rate in the DCS-BIOS release is still 500000, so that is correct in this case. The issue is not on the Arduino side -- DCS-BIOS cannot send multicast UDP packets and socat is being prevented from connecting to the TCP server. What version of Windows are you using and what firewall are you running? Can you test with the firewall disabled?
  2. Firedawg: Could be a firewall issue. Here are a few things you can try: Check dcs.log for error messages related to DCS-BIOS. See if you can get the to work. Those use TCP instead of UDP. If it works, you know that DCS-BIOS itself is running. You can then use the following connect-to-serial-port.cmd script instead: REM Specify the number of the COM port your Arduino is connected to: set COMPORT=5 set /A TTYNUM=%COMPORT%-1 mode COM%COMPORT% BAUD=500000 PARITY=N DATA=8 STOP=1 TO=off DTR=on socat\socat -v TCP-CONNECT:localhost:7778 /dev/ttyS%TTYNUM% pause
  3. Probably not (when you respawn a group, the original unit dies so the player would be kicked out of the unit and have to reselect it). To make it somewhat acceptable as a workaround, you'd have to provide the player with a way to trigger the respawn at will (is there an F10 radio menu for CA players?).
  4. Did you have access to these before -- if so, how did you access the values and which update broke your method of access? If not, what problem are you actually trying to solve in the first place? Maybe there is a different solution.
  5. 14 bit resolution would be 2^14 = 16384 points. The ATMega32u4 on the Arduino Pro Micro has a 10-bit ADC (for 2^10 = 1024 points). If you want to get more than 10-bit resolution out of that board, you need to add an external ADC chip.
  6. I have written a first prototype: https://github.com/jboecker/dcs-export-core See the README on GitHub for setup and usage instructions. It doesn't do custom aircraft-specific Lua functions yet, that's what I will add next (it will load an aircraft-specific Lua file and if that file contains a "foo" function, you will get the output of that function through the "lFoo" key or something like that). You can also export draw arguments for the external aircraft model. This allows you to get the angles of all control surfaces, and AFAIK also the status of external lights and information about damage to individual parts. To see what different draw model arguments do, open the aircraft model (e.g. "Bazar\World\Shapes\A-10.edm") in the ED Model Viewer, select the argument numer you want in the "Arg #" box and move the slider around.
  7. I don't know about the specifics of how ammo trucks work or how long they need to reload when an ammo truck as available. However, if you can't get that to work, there is a simple solution: you can watch the amount of ammo left with unit:getAmmo() and respawn the group when it has run out. It has the side effect of also healing the unit(s), but since most kills in DCS only need one hit anyway it's not too much of a problem.
  8. Wenn man eine saubere, geregelte Spannungsversorgung hat, braucht man den Kondensator nicht. In der Praxis sind zwischen der geregelte Spannungsquelle (Netzteil oder USB-Port) und deiner Schaltung allerdings mehrere Zentimeter Kabel. Das hat zwei Effekte: zum Einen wirken die Kabel wie Antennen und können Störsignale einfangen. Zum anderen kann dein Netzteil nur die Spannung an seinem eigenen Ausgang regeln. Wenn deine Schaltung jetzt mehr oder weniger Strom braucht, dauert es einen Moment, bis die Störung das Netzteil erreicht hat, und dann muss das nachgeregelte Signal wieder die Schaltung erreichen. Ich glaube, das liegt an der Induktivität des Kabels, die sich der Änderung des Stromflusses widersetzt. Das heißt wenn sich der Strombedarf ändert, kann sich der gelieferte Strom nur "langsam" anpassen, so dass es kurz Unter- oder Überspannung gibt (wenige Nanosekunden). Die Energiereserve im Kondensator, der direkt neben dem IC sitzt, kann solche Störungen viel schneller ausgleichen als das "weit entfernte" Netzteil. "Aber durch meine Schaltung fließt doch immer gleich viel Strom!" Das trifft auf den Durchschnittsverbrauch zu, den dir ein Multimeter anzeigt. Ein CMOS-IC verbraucht aber (bis auf Leckströme) nur dann Strom, wenn sich irgendwo ein Signal von 0 auf 1 oder andersherum ändert. Wenn du also einen Mikroprozessor mit 16 MHz betreibst, braucht der nicht gleichmäßig viel Strom, sondern 16 Millionen mal pro Sekunde gibt es einen Peak im Strombedarf, wenn ein paar Tausend Transistoren gleichzeitig schalten. Meistens funktioniert die Schaltung auch ohne Kondensator. Das Problem ist nur, dass man ohne ein Oszilloskop nicht erkennen kann, wie sauber die Spannungsversorgung ist, und dass die Fehler, die durch unsaubere Spannungsversorgung verursacht werden können, im schlimmsten Fall zu undefiniertem Verhalten führen und nur selten auftreten. Als Faustregel: Für den Testaufbau braucht man die Kondensatoren nicht unbedingt (und auf den Arduino-Boards selbst sitzen sie natürlich schon drauf), aber bevor man sich von seiner Schaltung mit irgendeinem externen IC (MAX7219, Schieberegister, etc) in den Wahnsinn treiben lässt, sollte man sicherstellen, dass alle Kondensatoren, die im Datasheet gefordert werden, auch da sind. Motoren sollte man immer mit (auch etwas größeren) Kondensatoren versehen, damit sich der stark schwankende Strombedarf des Motors sich nicht störend auf den Rest der Schaltung auswirkt. Der MAX487 ist ein Transceiver, mit dem man einen Mikrocontroller an einen RS-485-Bus anschließen kann. RS-485 ist ein Kommunikationsstandard, der in der Industrie oft in Produktionsanlagen zum Einsatz kommt, um eine Steuereinheit mit Sensoren und Aktoren zu verbinden. Die Transceiver sind günstig und wenn man langsam genug kommuniziert, gehen Kabellängen bis 1000 Meter; bei den Geschwindigkeiten, die DCS-BIOS benutzt, sind immer noch ca. 40 Meter drin, das sind mehr als man in jedem Home-Cockpit brauchen wird. Der Plan ist, dass mehrere Arduinos untereinander über RS-485 kommunizieren und nur einer davon (ein Mega 2560) mit dem PC, damit die Leute, die sich ein komplettes Cockpit bauen wollen, nicht mehrere Dutzend USB-Anschlüsse brauchen. Die RS-485-Geräte hängen einfach alle am gleichen Kabel, eins nach dem anderen. Bei USB müsste man eine Sternverkabelung mit Hubs bauen und würde irgendwann wohl auch merken, dass es ab 20 Geräten oder so zu Problemen kommt (obwohl laut Standard bis zu 127 Geräte funktionieren müssten). Zum Thema Arduinos als USB-Joystick: Der Leonardo kann sowas, es gibt auch Projekte, die den ATMega16U2, der auf dem Uno und Mega als USB-auf-seriell-Wandler arbeitet, entsprechend umprogrammieren (hier zum Beispiel). Und dann gibt es noch V-USB, mit dem man auf fast jedem AVR ein Low-Speed-USB Device bauen kann (man braucht nur zwei Dioden, drei Widerstände und eine USB-Buchse), da weiß ich aber nicht, ob das irgendwer schonmal mit der Arduino-IDE zum Laufen gebracht hat.
  9. Theres an application note for that: AVR922: Add a Serial Number to your USB Device . It doesn't explicitly say whether it applies to the ATMega16U2, but it is linked from this page, so I assume it does.
  10. It's not a bug, it's a feature to enable localization of mission content. See the Known Scripting Engine Issues thread for details. Grimes has accounted for these changes in MiST v55:
  11. It's a good example that is just as complex as it needs to be to get something working. However, be aware that it will break other software like Helios, TacView, or DCS-BIOS unless it is the very first thing that is loaded, because it does not save and call previous callback functions. It also won't work in multiplayer mode because it assumes there is an active aircraft in LuaExportStart(). When you are in spectator mode, LoGetSelfData() will return nil, which it does not handle (and you can also change the aircraft later, in recent DCS versions that's possible even in single player mode).
  12. You want to look up Export.lua. Archive.org still has a copy of the original blog post by ED that documents the basics of Export.lua. Since that was written, the location of Export.lua has changed to %USERPROFILE%\Saved Games\DCS\Scripts\Export.lua. There is currently a project underway to come up with an Export.lua file that implements a protocol that everyone can agree on, please take a look at this thread. If you decide to do your own thing, please make sure you get the basics that are mentioned in that thread right to play well with other Export.lua files.
  13. Das ist kein Problem, DCS: World kann mit mehreren Eingabegeräten umgehen. Du solltest nur daran denken, vor dem Einrichten einmal in den Achseneinstellungen von DCS die Spalte für jedes Gerät zu markieren und "Clear Category" (kA wie der Button auf deutsch heißt) klicken, um die Standardbelegung zu entfernen (sonst kann es vorkommen, dass zwei Geräte z.B. den Pitch kontrollieren wollen, und man wundert sich, warum das Flugzeug nicht kontrollierbar ist).
  14. Ich hab hier mal was zusammengestellt. Händler Als deutsche Händler fallen mir spontan Reichelt, Conrad, Pollin und Farnell ein (Farnell verkauft nur an Geschäftskunden und Studenten, für Privatkunden gibt es den HBE-Shop). Pollin ist hauptsächlich auf Restposten spezialisiert und hat oft, aber nicht immer, sehr gute Preise. Viele Artikel sind nur eine Zeit lang im Programm, bis der Restposten halt weg ist, aber gerade bei so Zeugs wie Platinen, Kabel und Widerständen haben sie ständig günstige Ware im Programm. Reichelt und Conrad haben ein relativ gutes Sortiment. Und Farnell hat als einer der großen weltweiten Elektronik-Distributoren so ziemlich alles. Wenn du eine Conrad-Filiale in erreichbarer Nähe hast, ist das eine gute Quelle um mal eben ein paar Widerstände mit einem bestimmten Wert oder so nachzubesorgen. Und dann gibt's da noch eBay. Das ist gerade für die Arduino-Boards oft die beste Option. Man muss keine 40 Euro für einen Arduino ausgeben, wenn man das exakt gleiche Produkt auch für 10 bekommt (da ist dann halt nur kein Logo aufgedruckt). Am günstigsten sind immer die chinesischen Händler, da dauert's aber mehrere Wochen bis die Ware da ist. Lohnt sich aber auf jeden Fall, wenn man schon mit dem Basteln angefangen hat, da mal ein Pack Arduinos zu ordern, da der Preisunterschied schnell mal Faktor 2 bis 5 sein kann. Wenn man den Artikel schnell geliefert bekommen möchte, kann man "Artikelstandort: Deutschland" (nicht "eBay Deutschland") einstellen, auch dann sind die Preise meistens noch günstiger als in anderen Online-Shops. Die Links unten gehen fast alle zu Pollin. Grundausstattung Du brauchst mindestens: Einen Lötkolben. Wenn du mehr als ein, zwei Panel bauen willst, würde ich dir empfehlen, 50 bis 100 Euro in eine vernünftige Lötstation mit Temperatureinstellung zu investieren. Ansonsten tut's auch ein einfaches Modell -- das ist aber etwas nerviger zu benutzen (Aufwärmzeit, der Ständer fällt leichter um, etc.) und hat eventuell Probleme mit bleifreiem Lötzinn (das braucht eine höhere Temperatur). Ein Messing-"Schwamm" macht das Reinigen der Lötspitze deutlich einfacher und muss nicht ständig neu befeuchtet werden. Zu Hause hab ich so ein Billig-Teil und nutze ansonsten oft ein Wire Wrap-Tool oder ein Steckbrett. Auf der Arbeit hab ich vernünftige Lötstationen kennen gelernt. Lötzinn Ein Multimeter. Das muss nicht teuer sein, ich benutze ein Voltcraft VC130 was ich mal im Conrad für 5 Euro im Angebot bekommen hab. Die Genauigkeit ist relativ egal, auf ein paar Prozent kommt es hier nicht an. Ob bei Isolation und Überspannungsschutz gespart wurde, ist dir egal, denn du planst nicht, damit eine Steckdose zu messen. Die am meisten genutzte Funktion wird der Durchgangsprüfer sein, gelegentlich misst man mal eine Spannung oder einen Widerstand. Die Strommessung ist hilfreich, wenn man beurteilen will, ob eine Schaltung noch über USB versorgt werden kann oder ob man ein externes Netzteil braucht. Einen Seitenschneider zum Zuschneiden und Abisolieren von Draht Draht. Man kann fertige "jumper wires" benutzen, bei "male auf male" kann man sich auch einfach was passend zuschneiden Ein Steckbrett ("Breadboard") Arduino-Boards Für den Einbau in Panels ist der Arduino Pro Mini am interessantesten, da er relativ klein ist. Er ist auch eines der günstigsten Boards (aus China unter 2 Euro, aus DE ca. 4 Euro), weil kein USB-zu-seriell-Konverter mitgeliefert wird. Ein USB-Adapter (einer mit DTR-Leitung, z.B. auf Basis des CP2102-Chips) schlägt nochmal mit ca. 1,50 Euro (China) oder 5 Euro (DE) zu Buche. Die Pro Minis kann man auch wunderbar auf ein Breadboard stecken. Ansonsten ist der Mega 2560 interessant. Zum einen hat der relativ viele Anschlüsse, zum anderen hat der vier Hardware-UARTs und wird deshalb Grundlage des zentralen "Hubs" sein, wenn ich endlich mal mit der RS-485-Implementierung fertig werde. eBay (DE): Pro Mini, CP2102 USB-Adapter, Mega 2560 Nützlicher Kleinkram Bauteile, die man immer gebrauchen kann (da lohnt es sich gleich mehrere zu kaufen, also im Zehner-, Fünfziger- oder Hunderterpack): Kondensator 100 nF (jedes IC sollte einen nahe an den Stromversorgungspins bekommen) Widerstand 10 kOhm (wenn man mal nen externen pull-up oder pull-down braucht) Passende Vorwiderstände für LEDs. So 80 bis 160 Ohm je nach Vorwärtsspannung der LED. Immer, wenn du LEDs kaufst, solltest du auch passende Widerstände mitbestellen. Typische rote LEDs mit V_f = 2.4 V und Betriebsstrom 20 mA brauchen bei 5V einen 130 Ohm Vorwiderstand. Standard tactile push buttons (Link geht zu chinesischem Händler, die Dinger lassen sich so gut per Luftpost verschicken dass die Preisunterschiede enorm sind) Um den ganzen Kram zu lagern, benutze ich Druckverschlussbeutel, die ich dann in einen Sortierkasten stecke. Jumper Wires (female-female und eventuell female-male) Streifenrasterplatinen mit Rastermaß 2,54 mm eignen sich gut, wenn die Schaltung etwas dauerhafter aufgebaut werden soll, man aber keine Platinen fertigen lassen oder selbst ätzen will. Die Leiterbahnen können mit einem Bastelmesser oder einer kleinen Trennscheibe (Dremel oder so) unterbrochen werden. Stiftleisten und dazu passende Buchsenleisten, wenn man mal schnell einen Steckverbinder braucht. Diese einzeiligen IC-Sockel sind auch super praktisch -- man kann die aufeinander stecken um relativ fest haltende Steckverbinder zu basteln und man kann damit eben auch beliebige ICs sockeln. Bedienelemente Dann brauchst du natürlich noch alles, was du in deine Panels einbauen willst, also LEDs, Servo- oder Schrittmotoren, Kippschalter, etc. Gerade Schalter und Potis kann man ggf. auch aus altem Elektronikschrott ausbauen (gerade für die ersten Bastelversuche, wenn einem das genaue Aussehen egal ist). Mit den oben genannten Dingen lässt sich glaub ich schon einiges machen. Was dann noch fehlt, merkst du, wenn du die nächsten Projekte planst. Eine separate Stromversorgung brauchst du erst mal nicht (außer ggf. für Motoren), ansonsten kann man da auch alte Handy-Ladegeräte oder PC-Netzteile benutzen. PS: Du kannst dir schonmal ein paar MAX487 Transceiver bestellen. Wenn ich den ersten funktionierenden RS-485-Code veröffentliche, sind die dann auch längst aus China hier angekommen. Bei der Suche nach China-Händlern empfiehlt es sich übrigens, auf ebay.com zu suchen, auf ebay.de findest du auch mit "Artikelstandort: Weltweit" nicht alle Angebote.
  15. You could use a pattern that is often used for configuration files in Linux: introduce a folder (I suggest lfs.writedir().."MissionScripting.d") where each mod places a Lua file it wants to run. Better yet, make that two folders, one under lfs.writedir(), one in the DCS: World installation directory. Then modify MissionScripting.lua so it calls dofile() on every Lua file in these folders before sanitation. That way all mods can share the same MissionScripting.lua file. Then document what you did so this hopefully becomes a standard for every modder to use. Now that I think of it, I should do something similar for Export.lua...
  16. Make sure you are using the latest version of the Arduino library. To rule out any problems with your circuit, test with one of the Servo examples that come with the Arduino IDE.
  17. Thanks dooom, fixed in the original post too now. I thought the black preview was a script error in my browser. Now I double-checked my youtube tag and found that I had pasted in the URL instead of the video ID.
  18. Apparently, it does. I have added instructions to the README on GitHub and added a me-3d-view-dcs1.2.x.miz (because I assume that 1.2.x would not like a mission saved in the 1.5 ME).
  19. Im Moment musst du für jeden Port eine Kopie des connect-to-serial-port scripts anlegen und starten. Alternativ kannst du den com-handler von ArturDCS benutzen, das ist eine C#-Anwendung, die mehrere Ports gleichzeitig ansteuern kann ("Download ZIP", dann im "bin"-Ordner die .exe starten). Langfristig will ich einen RS-485-Bus unterstützen, so dass man einen Arduino Mega hat, der mit dem PC und mit bis zu drei RS-485-Bussen spricht. Dann braucht man nur noch einen USB-Port am PC, einen Mega als "Hub" und einen $0.20 RS-485-Transceiver pro Board. Die Arbeit daran ist schon einigermaßen fortgeschritten, ich hoffe noch dieses Jahr eine erste Alpha davon zu veröffentlichen, kann aber nichts versprechen.
  20. Correct, and it was always the case (for example in the area around Tiblisi). There are locations where the TAD map is simply not available in all zoom levels (you can verify this by extracting the ZIP fiile with the TAD map tiles, IIRC that was somewhere under mods\aircraft\A-10C\Textures).
  21. You can already toggle the LL and MGRS grids separately in the F10 map view. What additional layers would you like to have in there?
  22. I would like to see access to more features from Lua. The following are probably low-hanging fruit (greatest increase in what you can do with scripting per ED developer time): add a setAmmo() to ground units so we can reload units with scripts (also important for implementing persistence features) a way to set the contents of a warehouse add a getNextWaypointNumber() for AI controllers. We can give them a route with Lua right now, but figuring out what waypoints they already have passed (to send them to the correct waypoint when implementing a save/load feature) would require complex workarounds involving lots of geometry. These features would allow a mission designer to implement complex logistics (e.g. having a player transport ammo to units in the field by helicopter). I'd also like a way to tell any AI group (air and ground units) an exact set of enemy units they are allowed to engage. That would enable a mission designer to define their own rules for when a unit knows about and is able to engage a specific unit. Right now, all we have is setInvisible(), which will affect all enemy units.
  23. I think ED will add a 3D view to the mission editor, so you see the actual 3D model where you placed the unit instead of the map symbol. Would that make this feature redundant in your opinion (and save someone the work of creating all those .JPGs) or would you still need to see the unit before you place it (instead of placing something and changing the type afterwards)?
  24. Until ED integrates a 3D view into the new editor, you can use this hack to tide you over (at least for ground units).
  25. Wenn du noch keine Export.lua hast, kannst du die aus dem DCS-BIOS-Paket unverändert übernehmen, ansonsten einfach die eine Zeile die da drinsteht an deine bestehende Export.lua anhängen. Der eigentliche Code ist im Ordner "DCS-BIOS", den du auch nach C:\Users\Name\Saved Games\DCS\Scripts\ kopieren musst. Jetzt kommuniziert DCS-BIOS über das Netzwerk. Um das ganze dann mit der seriellen Schnittstelle zu verbinden, musst du das Skript "connect-to-serial-port.cmd" editieren (Rechtsklick -> Bearbeiten) und da die Nummer der seriellen Schnittstelle eintragen (COMPORT=...). Dann kannst du das Skript starten, um die serielle Schnittstelle mit DCS-BIOS zu verbinden (vorher musst du natürlich eine geeignete Firmware auf den Arduino flashen, z.B. das mitgelieferte Beispiel für das Master Caution Light der A-10C). Was auch ganz hilfreich bei der Fehlersuche sein kann, ist die "interactive control reference documentation". Wie in beschrieben ist, kannst du die Referenz als Google Chrome-Extension einrichten, dann kann die sich mit einem laufenden DCS verbinden und du kannst dir die Werte, die da rauskommen, ansehen. Wenn du ein Problem hast, was nicht in der control reference auftritt, liegt der Fehler wahrscheinlich irgendwo auf der Arduino-Seite. Wenn der Fehler auch in der control reference auftritt, dann ist das ein Bug in DCS-BIOS und du kannst dir die Fehlersuche in deinem eigenen Code sparen.
×
×
  • Create New...