Arduino anwesenheit Prüfen

Hallo miteinander,

seit gestern nacht habe ich da was im Kopf das nicht weg gehen will, drum bitte ich euch um Hilfe.
nein ich meine nicht den Vogel in meinem Kopf der Füllt sich ganz wohl bei mir :wink:

So jetzt zu meiner Frage, wir gehen davon aus das ich ein Beliebiges Arduino Mega nehme ohne zu wissen was dort für ein Programm aufgespielt wurde und Klemme es an meinen USB Port.

Ist es möglich über einen Standart Befehl oder so was in die Richtung über den Seriellen Monitor das Bord dazu zu bringen sich zu erkennen zu geben?

also so das ich Prüfen kann ob das Bord auch an dem Port angeschlossen ist?

Oder muss ich so was in mein Programm einbauen was auf das Arduino kommt?

Gruß
Mücke

Oder muss ich so was in mein Programm einbauen was auf das Arduino kommt?

Ja, musst Du. Der Arduino weiss nicht, welches Programm er geladen hat, er bekommt einfach Code und führt ihn aus. Wenn Du wissen willst, was da drauf ist, musst Du eine entsprechende Identifikationsfunktion in Deinen Code einbauen.

Hey,
ich glaube ich habe mich unglücklich ausgedrückt, sorry.

ich möchte nicht wissen was da drauf ist sondern ob ein Arduino am PC hängt.
Welche Software da aufgespielt ist ist mir in dem Moment erst mal egal :wink:

Hmmh, ich weiss ja nicht, was Du unter PC verstehst, bei meinem PC (Ubuntu) gebe ich das folgende Kommando ein und bekomme eine Liste der angeschlossenen Geräte. Wenn Dort ein Arduino dabei ist, kannst Du das an der Vendor-ID schnell erkennen.

lsusb

ich möchte nicht wissen was da drauf ist sondern ob ein Arduino am PC hängt.

Wenn du am Windows PC den Treiber installiert hast, siehst du im GeräteManager entweder einen Arduino oder keinen, wenn er nicht steckt.
Er sollte eigentlich immer dieselbe serielle Schnittstelle verwenden, die kannst du leicht in einem Windows Programm abfragen.
Dass es ein "Arduino an USB" ist, ist etwas spezieller.
Suchst du die Antwort, wie du das - ohne den GeräteManager zu verwenden - rauskriegst ?

Ah OK, dann muss ich mal schauen wie das bei QBasic bzw. FreeBasic geht ob ich mir da auch eine liste erstellen lassen kann.

michael_x:
Suchst du die Antwort, wie du das - ohne den GeräteManager zu verwenden - rauskriegst ?

ja so in die Richtung, mein Arduino Mega ist an einem USB jedoch wird auf dem Rechner doch eine COM Schnittstellen erzeugt ?

mir geht es darum ich möchte über ein FreeBasic geschriebenes Programm herausfinden ob ein Arduino angesteckt ist und wenn ja wo.
Ich möchte die Erkennung Automatisieren so das wenn ich das Programm Starte es den Comport selbst einstellt an dem das Arduino Steckt. dann muss ich das nicht mehr machen.

Hallo,
dies hier ist ein Arduino-Forum. Wie kommst Du hier auf FreeBasic?
Auf welchen System läuft den Dein Free-Basic? Win?
Hier ist ein wenig Info, die Idee mit der Reg Auslesen ist nicht schlecht.

Gruß und Spaß
Andreas

Es ist mir schon klar das wir hier im Arduino Forum sind aus diesem Grunde heraus habe ich auch meine Arduino Spezifische Frage hier gestellt.

Wie erkenne ich ob ein Arduino am Rechner (Win) angeschlossen ist oder nicht,
ich dachte mir vielleicht hat das Arduino einen Standart Befehl denn man über die Serielle Schnittstelle senden kann und es antwortet dann Standardmäßig, naja dem ist ja nicht so.

Jedoch sagte man das man die Reg. auslesen kann und dort könnte man dann eine Analyse durchfühlen :slight_smile:

das war doch schon alles was ich Fragte.

Das ich das Projekt jetzt in FreeBasic Umsätzen möchte ist doch eine andere Geschichte,
meid Firmware für mein Arduino Mega habe ich schon geschrieben dank des Forums Hier,

Mir wäre nur nicht Klar wie ich mit dem Arduino ein ausführbares Programm schreiben kann das auf einem WIN Rechner läuft, aus dem Grund nehme ich hier FreeBasic.

Danke für den link, da werde ich mich gleich mal dran machen und mich einlesen und ein Paar Tests machen.

hi,

ich hab' das früher mal in visual basic script geschrieben:

http://forum.arduino.cc/index.php?topic=177899.msg1319101#msg1319101

grzß stefan

Mal schauen, ob ich das Problem verstanden habe.....

Der PC hat ein ganzes Büschel COM Ports.
Seien sie real, über USB, oder wie auch immer.

Und jetzt willst du wissen, ob ein Arduino auf dem Port steckt.
Und dann am besten, noch welcher.

Vorschlag:
AVRDUDE ist dein Freund.
(sollte man von jeder modernen Programmiersprache aus aufrufen können)

Wenn du mit DTR wackelst, macht der Arduino einen Reset (wenn er denn dran steckt).
Danach sollte der Bootloader des Arduinos los laufen.
Der Bootloader kann dir zumindest den Prozessortype nennen.
Evtl. auch das EEPROM auslesen, da könntest du eine Seriennummer unter bringen.
Du kannst dann das Flash auslesen, auch dort kann man eine Seriennummer unter bringen

Das EEPROM lesen und schreiben geht auf jeden Fall über den ISP Port, ob das auch über die UART funktioniert, habe ich noch nicht getestet. Die Fuses kann man auf jeden Fall nicht über den Bootloader setzen.

Das von Stefan werde ich mir mal genauer anschauen.

@combie: so aufwendig wollte ich das nicht herausfinden, mir reicht es wenn ich weis das ein Arduino da ist oder nicht, welche ist mir egal.

Firmware für mein Arduino Mega habe ich schon geschrieben

Ich würde generell einbauen, dass ein Arduino Sketch auf Anfrage seinen Namen und Version zurückliefert.

#define VERSIONINFO F("Testprogramm Version 0.0")

   if (Serial.read() == 'V')  // pseudoCode irgendwo in loop() 
        Serial.println(VERSIONINFO);

Einfacher als combies Vorschlag, und immer mal praktisch.
Ein Sketch kann natürlich auch in setup() ungefragt mit dieser Versions-Meldung loslegen.

Wenn du dann alle deine Sketche mit gleicher Baudrate fährst, hast du "was universell verwendbares",
was man immer mal brauchen kann.

Dein FreeBasic PC Programm weiss dann sogar, dass genau der erwartete Arduino dran hängt.

So eine Abfrage habe ich bei mir in mein Programm schon eingebaut.

doch was mache ich wenn ich warum auch immer kein Programm von mir auf dem Arduino habe?
dann antwortet es mir nicht und ich weis auch nicht ob eins da ist oder nicht. :frowning:

Hintergrund ist es das ich meinem Programm (FreeBasic) beibringen möchte die Richtige Firmware auf das Arduino zu schreiben.
damit sich mein Programm mit dem Arduino auch richtig unterhalten kann und auch das Richtige für meine Hardware dann später raus kommt ;-).

Wenn du den Arduino aus deinem Programm heraus flashen willst, musst du lernen wie man den AVRdude per Hand bedient.

Ich habe sowas nur in C# gemacht, aber man sollte auch in FreeBasic andere Programme starten können und ihnen Parameter über die Kommandozeile mitgeben können.

Ja das wäre Toll, ich habe nur die Befürchtung (durch meinen Wissensstand her) das sich das noch eine Weile hin ziehen wird :frowning:

Werde wahrscheinlich Fleißig hier im Forum Suchen und Fragen :wink:

hi,

ich frage in dem script von vorher nur die eigenschaft "Caption" ab.
aber:

B.149 Win32_PnPEntity
result as Integer = SetPowerState
(PowerState as Integer, Time as
Date/Time)
»SetPowerState« definiert den gewünschten Energiestatus und den Zeitpunkt,
zu dem das Gerät in diesen Status versetzt wird, indem für den Parameter
»PowerState« folgende Werte festgelegt werden: 1=»Kein Energiesparmodus
«, 2=»Energiesparmodus – Niedriger Energiestatus«,
3=»Energiesparmodus – Standby«, 4=»Energiesparmodus – Standby«,
5=»Energiezyklus« oder 6=»Ausschalten«. Der Parameter »Time« gibt für
alle Statusänderungen, außer 5 »Energiezyklus«, den Zeitpunkt zum Aktivieren
des Energiestatus als Datum-/Uhrzeit PowerState« auf 5 »Energiezyklus
« gesetzt ist, gibt der Parameter »Time« den Zeitpunkt zum Reaktivieren
des Geräts an. Das Ausschalten erfolgt unmittelbar. Der Wert 0
wird zurückgegeben, wenn die Anforderung einwandfrei ausgeführt wurde,
der Wert 1, wenn die Anforderung nicht unterstützt wird. Andere
Werte zeigen einen Fehler an.
result as Integer = Reset Fordert das Zurücksetzen eines logischen Geräts an. Der Wert 0 wird zurückgegeben,
wenn die Anforderung einwandfrei ausgeführt wurde, der
Wert 1, wenn die Anforderung nicht unterstützt wird. Andere Werte zeigen
einen Fehler an.
Availability Die Verfügbarkeit und der Status des Geräts. Die Eigenschaft »Availability
« gibt z.B. an, daß das Gerät aktiv ist und sich nicht im Energiesparmodus
(Wert=3) befindet. Die Energiesparmodi sind wie folgt definiert: Der
Wert 13 (»Energiesparmodus – Unbekannt«) gibt an, daß sich das Gerät
im Energiesparmodus befindet, aber der genaue Status unbekannt ist; 14
(»Niedriger Energiestatus«) gibt an, daß sich das Gerät im Energiesparmodus
befindet, aber noch funktioniert und die Leistung verringert ist; 15
(»Standby«) gibt an, daß das Gerät nicht funktioniert, aber schnell reaktiviert
werden kann; 17 (»Warnung«) gibt an, daß sich das Gerät sowohl in
einem Warnungs- als auch in einem Energiesparmodus befindet.
Caption Die Eigenschaft »Caption« gibt eine kurze Textbeschreibung (eine Zeile)
des Objekts an.
ClassGuid Die Eigenschaft »ClassGuid« gibt die GUID (Globally Unique Identifier)
für das Plug & Play-Gerät an.
ConfigManagerErrorCode Gibt den Fehlercode des Win32-Konfigurations-Managers an.
ConfigManagerUserConfig Gibt an, ob das Gerät eine benutzerdefinierte Konfiguration verwendet.
CreationClassName Gibt an, ob das Gerät eine benutzerdefinierte Konfiguration verwendet.
Description Die Eigenschaft »Description« gibt eine Textbeschreibung des Objekts an.
DeviceID Die Eigenschaft »DeviceID« enthält eine Zeichenfolge, die das Plug &
Play-Gerät angibt.
ErrorCleared Die Eigenschaft »ErrorCleared« ist ein boolescher Wert, der angibt, daß
der in der Eigenschaft »LastErrorCode« angezeigte Fehler behoben ist.
ErrorDescription Die formfreie Zeichenfolge »ErrorDescription« enthält Informationen
über den in der Eigenschaft »LastErrorCode« angezeigten Fehler und
eventuelle Korrekturvorgänge.
642 Anhang B: WMI Klassenreferenz
InstallDate Die Eigenschaft »InstallDate« gibt an, wann das Objekt installiert wurde.
Wenn der Wert nicht angegeben ist, kann das Objekt trotzdem installiert
sein.
LastErrorCode »LastErrorCode« gibt den letzten Fehlercode des logischen Geräts an.
Manufacturer Die Eigenschaft »Manufacturer« gibt den Hersteller des Plug & Play-
Geräts an. Beispiel: Acme
Name Die Eigenschaft »Name« definiert die Objektbezeichnung. Wenn sich
diese Eigenschaft in einer Teilklasse befindet, kann sie als Schlüsseleigenschaft
überschrieben werden.
PNPDeviceID Gibt die Win32 Plug & Play-Gerätekennung des logischen Geräts an.
Beispiel: *PNP030b
PowerManagementCapabilities Gibt die energiespezifischen Funktionen des logischen Geräts an. Die
Werte 0=»Unbekannt«, 1=»Nicht unterstützt« und 2=»Deaktiviert« können
angegeben werden. Der Wert 3=»Aktiviert« gibt an, daß die Energieverwaltungsfunktionen
aktiviert sind, aber die exakte Funktion unbekannt
ist oder die Informationen nicht verfügbar sind. »Automatische
Energiesparmodi« (4) gibt an, daß ein Gerät seinen Energiestatus basierend
auf dem Energieverbrauch oder anderen Kriterien ändern kann.
»Energiestatus einstellbar« (5) gibt an, daß die Methode »SetPowerState«
unterstützt wird. »Energiezyklus unterstützt« (6) gibt an, daß die Methode
»SetPowerState« mit dem Parameter »PowerState« 5 (»Energiezyklus«)
ausgeführt werden kann. »Geplante Reaktivierung unterstützt« (7) gibt
an, daß die Methode »SetPowerState« mit dem Parameter »PowerState« 5
(»Energiezyklus«) und dem Parameter »Time« ausgeführt werden kann.
PowerManagementSupported Gibt an, daß die Energieverwaltung für das Gerät verfügbar ist (es kann
z.B. in den Standbymodus versetzt werden). Dieser boolesche Wert zeigt
an, daß die Energie des logischen Geräts verwaltet werden kann, nicht,
daß die Energieverwaltungsfunktionen aktiviert sind.
Service Die Eigenschaft »Service« gibt den Namen des Dienstes an, der das Plug &
Play-Gerät unterstützt. Siehe auch: »Win32_SystemDriverPNPEntity«.
Beispiel: atapi
Status Die Eigenschaft »Status« gibt den aktuellen Status des Objekts an. Es können
betriebsbereite oder nicht betriebsbereite Zustände definiert werden.
Betriebsbereite Zustände sind »OK«, »Heruntergestuft« und »Künftiger
Fehler«. »Künftiger Fehler« gibt an, daß ein Element ordnungsgemäß
funktioniert, aber in naher Zukunft ein Fehler auftreten wird. Ein Beispiel
ist eine SMART-aktivierte Festplatte. Nicht betriebsbereite Zustände sind
»Fehler«, »Starten«, »Beenden« und »Dienst«. »Dienst« kann während des
erneuten Spiegelns eines Datenträgers, beim erneuten Laden einer Benutzerberechtigungsliste
oder einem anderen administrativen Vorgang zutreffen.
Nicht alle Vorgänge sind online.
B.150 Win32_PointingDevice 643
StatusInfo Die Zeichenfolge »StatusInfo« gibt den Gerätestatus an: »Aktiviert« (Wert
= 3), »Deaktiviert« (4), »Andere« (1) oder »Unbekannt« (2). Der Wert 5
(»Nicht anwendbar«) wird verwendet, wenn diese Eigenschaft nicht auf
das logische Gerät zutrifft.
SystemCreationClassName Die Zeichenfolge »StatusInfo« gibt den Gerätestatus an: »Aktiviert« (Wert
= 3), »Deaktiviert« (4), »Andere« (1) oder »Unbekannt« (2). Der Wert 5
(»Nicht anwendbar«) wird verwendet, wenn diese Eigenschaft nicht auf
das logische Gerät zutrifft.
SystemName Die Zeichenfolge »StatusInfo« gibt den Gerätestatus an: »Aktiviert« (Wert
= 3), »Deaktiviert« (4), »Andere« (1) oder »Unbekannt« (2). Der Wert 5
(»Nicht anwendbar«) wird verwendet, wenn diese Eigenschaft nicht auf
das logische Gerät zutrifft.
B.150 Win32_PointingDevice

schwer zu lesen, aber wenn Du Caption zb durch ClassGUID ersetzt oder ergänzt, bekommst Du wahrscheinlich eine eindeutige nummer für genau einen bestimmen einzelnen arduino. Du mußt die einzelnen properties probieren, ich hab' keinen arduino hier...

gruß stefan