Hallo

1) Wenn du die Winde an einen gewöhnlichen Modellbauempfänger (mit Fernbedienung) anschließt, kannst du nur Werte im Bereich 1000-2000 erzeugen. Werte von 1-999 und 2001-19999 (theoretisches Maximum) sollten daher sowieso nicht verwendet werden.

2) Weißt du denn, wie die Winde funktioniert, wenn man einen Modellbauempfänger anschließt und sie mit der Fernbedienung ansteuert?

Ich habe gegoogled, aber keine Info darüber gefunden!

Das müsstest du zuerst herausfinden, bevor du versuchst, die Winde per Arduino anzusteuern. Mit dem Arduino wirst du es übrigens nicht hinbekommen, die Winde irgend Etwas machen zu lassen, das mit einer gewöhnlichen Fernbedienung nicht möglich ist.

...zur Antwort

Soviel ich weiß ist das menschliche Auge darauf spezialisiert, die meiste Zeit weit zu blicken - also z.B. dass Landwirte bei der Feldarbeit zum Horizont sehen.

Für lesen (auch Bücher auf Papier!), schreiben und Bildschirmarbeit sind die menschlichen Augen nicht ausgelegt.

Da heutzutage viele Leute eine Arbeit im Büro haben, ist bei diesen Leuten die Brille fast schon vorprogrammiert.

Das Arbeiten mit Papier ist übrigens noch schlechter für die Augen als am Bildschirm - das habe ich von mehreren älteren Ingenieuren erfahren, die bereits in der "Vorcomputerzeit" als auch später nach der Einführung von Computern gearbeitet haben.

Ob das Lesen von Büchern (aus Papier) die Augen schädigt, kann man sich vor diesem Hintergrund natürlich auch fragen...

Flachbildschirme sind für die Augen auch deutlich besser als Röhrenmonitore, da Flachbildschirme (insbesonders dann, wenn sie nicht per VGA-, sondern per Digitalanschluss (DVI, HDMI, ...) angeschlossen sind) nicht flimmern.

Kleine Monitore sind für die Augen schlechter als große, weswegen das Programmieren am Smartphone (was du vorhast) für die Augen eher schlechter ist als an einem PC mit großem Bildschirm.

...zur Antwort

Moment mal:

Ist Linux das Betriebssystem, auf dem VMware läuft (also das eigentliche Betriebssystem deines Rechners, Host-Betriebssystem) oder das Betriebssystem, das in der VMware laufen soll (Gast-Betriebssystem) oder beides?

Falls das Host-Betriebssystem (also das "eigentliche" Betriebssystem deines Rechners) Windows ist (unabhängig vom Gast-Betriebssystem), kannst du verschiedene Einstellungen in VMware vornehmen, je nach dem, wie dein Rechner am Netz hängt:

  • Die virtuelle Maschine verhält sich wie ein Rechner an dem Netzwerk, an dem dein Rechner hängt. Netzwerkverbindungen zwischen Host und virtueller Maschine sind dann aber nicht möglich, wenn man den Host vom Netzwerk trennt (z.B. WLAN abschaltet oder mit dem Laptop irgendwo hingeht, wo es kein Netz hat)
  • Die virtuelle Maschine verhält sich so, als hätte dein (Host-) Rechner eine zweite Netzwerkkarte, an der sämtliche virtuelle Maschinen hängen. Zu diesem Zweck simuliert VMware einige Netzwerkkarten auf dem Host-PC. Netzwerkverbindungen zwischen Host und virtueller Maschine sind in diesem Fall immer möglich, dafür kann die virtuelle Maschine nicht ins "echte" Netzwerk bzw. Internet
  • Die Möglichkeit, eine gemeinsame IP-Adresse für virtuelle Maschine und Host-Rechner zu verwenden. In diesem Fall sind aber Netzwerkverbindungen zwischen Host und virtueller Maschine nicht möglich.

Man kann der virtuellen Maschine auch mehrere Netzwerkkarten verpassen, die jeweils eine andere dieser drei Einstellungen haben.

Ich gehe davon aus, dass diese Optionen auch bei Linux als Host-Betriebssystem zur Verfügung stehen.

VMware hat einen DHCP-Server, der dem Gastbetriebssystem bei Einstellungen 2 und 3 eine IP-Adresse zuweist, wenn DCHP im Gastbetriebssystem eingeschaltet ist. In Einstellung 1 wird meines Wissens der DHCP-Server des echten Netzwerks verwendet. Aber man kann DHCP im Gastbetriebssystem auch abschalten und eine Adresse manuell zuweisen.

Sowohl Linux als auch Windows haben die Möglichkeit, mehrere IP-Adressen auf einer Netzwerkkarte gleichzeitig zu verwenden - unabhängig VMware, allerdings muss man wissen, wie das geht und es ist nicht trivial.

Wenn ein Rechner (egal ob Host oder Gast) mehrere Netzwerkkarten hat, hat der Rechner sowieso für jede Netzwerkkarte eine eigene IP-Adresse.

...zur Antwort

Beim Ada-Programmieren sehe ich bereits ein praktisches Hindernis, sofern ihr einen Chip in eurem Modell programmieren wollt:

Entweder ihr nehmt ein x86-Board; diese sind aber vergleichsweise groß, so dass auch euer Modell groß werden muss, und mit Preisen von 100 Euro aufwärts relativ teuer.

Oder ihr nehmt ein ARM-Board und besorgt euch einen entsprechenden Compiler. Leider sind kostenlose Ada-Compiler für ARM selten und kostenpflichtige sind unbezahlbar (ich habe keinen unter 15'000 Euro gefunden).

Wenn ihr in C oder C++ programmieren wolltet, könntet ihr ein ARM-Board für 5-20 Euro in Zigarettenschachtel-Größe und einen kostenlosen Compiler verwenden.

Wenn ihr mit Ada einen PC programmieren wollt und nicht einen Chip im Modellboot sähe die Sache natürlich anders aus. Für PCs gibt es kostenlose Ada-Compiler.

Das Programmieren von Ada selbst ist dann auch nicht so ganz ohne, weswegen diese Sprache auch außer der Luftfahrt (wo es bestimmte Regelungen gibt) kaum verwendet wird.

...zur Antwort

0x378, 0x379 und 0x37A sind die Adressen der ersten LPT-Schnittstelle bei Mainboards mit on-Board-LPT-Schnittstelle. (0x278, 0x279 und 0x29A sind die der zweiten LPT-Schnittstelle, 0x3BC, 0x3BD und 0x3BE die der dritten - falls es jemals Rechner mit drei LPT-Schnittstellen gab.)

Durch das Schreiben eines Wertes an Adresse 0x378 werden die entsprechenden Bits auf die Pins D0-D7 (also die Datenleitungen) gelegt. Adresse 0x379 dient zum Rücklesen der Statusleitungen (Papierende usw.); 0x37A zum Setzen der Steuerleitungen.

Der Befehl, den du angegeben hast, setzt also alle 8 Datenleitungen auf "1".

Ich gehe aufgrund des Methodennamens "ControlPort.Output" davon aus, dass du die DLL "inpout32.dll" verwendest. Diese DLL ruft einen Treiber ("inpout32.sys" (32-bit) oder "inpoutx64.sys" (64-bit)) auf, der dann auf den Port zugreift. (In neuen Windows-Versionen sind Port-Zugriffe nur über Treiber möglich.)

Hast du diesen Treiber installiert? Falls nein, passiert natürlich rein gar nichts!

Da ein anderer User in diesem Zusammenhang nach USB-zu-LPT-Adaptern gefragt hat:

  • Über Portadressen kann man prinzipiell nur Geräte ansteuern, die direkt an der CPU hängen. Das wären der on-Board-LPT-Port oder der USB-Hostcontroller aber eben keine USB-Geräte! Es kann daher keinen USB-zu-LPT-Adapter geben, der sich über Port 0x378 ansteuern lässt. Möglich wäre allerdings ein Austausch der Datei "inpout32.dll", so dass der Befehl "ControlPort.Output" auf den USB-Bus zugreift anstatt das zu machen, was er "eigentlich" tun sollte...
  • Die auf dem Markt befindlichen USB-zu-LPT-Wandler bieten in der Regel nicht die Möglichkeit, die Datenleitungen D0-D7 direkt anzusteuern. Daher kann man solche Adapter nicht zusammen mit solchen Platinen, wie du sie hast, verwenden.

...zur Antwort

Da ich selbst bereits ein Betriebssystem programmiert habe und seit längerem an meinem zweiten OS arbeite, weiß ich es. Es gibt übrigens mehr Hobbyprogrammierer als man denkt, die so etwas machen und es ist einfacher, als die meisten denken:

Ohne Assembler für den entsprechenden Prozessor kommst du auf gar keinen Fall aus. Gerade in der Initialisierungsphase des OS müssen Dinge gemacht werden, die man nur direkt in Assembler hinbekommt.

Es gibt ein Freeware-Betriebssystem mit grafischer Oberfläche, das komplett in Assembler geschrieben ist; da größere Programme in Assembler aber sehr unübersichtlich sind und es schwerer ist, Programme in Assembler zu schreiben als in einer Hochsprache, wird ein Großteil eines Betriebssystems in C geschrieben.

C ist diejenige Programmiersprache, die sich am einfachsten mit Assembler mischen lässt. Außerdem bietet C von sich aus die Möglichkeit, auf bestimmte Hardware-Adressen zuzugreifen, was bei einem Betriebssystem natürlich absolut wichtig ist.

C++ wird deswegen nicht verwendet, weil es sich nicht so gut mit Assembler mischen lässt; außerdem kann man einige C++-Features (z.B. das Schlüsselwort "new") in einem Betriebssystem an vielen Stellen nicht einsetzen. Außerdem verwenden C++-Compiler bestimmte Funktionen, die für bestehende Betriebssysteme bereits fertig programmiert sind. Diese muss man für das eigene Betriebssystem dann erst einmal selbst programmieren.

Sprachen wie Java oder C# kann man gar nicht verwenden, da diese Sprachen - sehr stark vereinfacht gesagt - völlig darauf ausgelegt sind, dass die Programme, die in diesen Sprachen geschrieben sind, von einem anderen Programm aus gestartet werden (z.B. der "Java Virtual Machine").

Fazit: Um ein Betriebssystem schreiben zu können, braucht man Assembler und C.

Übrigens: Bei Dev-Cpp sind prinzipiell alle Tools, die man zum Schreiben eines Betriebssystems braucht, dabei - wenn auch etwas versteckt (bei Visual Studio nicht).

...zur Antwort

Google warnt davor, die NDK zu benutzen, "nur" weil man kein Java programmieren will.

Der Grund hierfür ist einfach:

Ein Programm mit NDK-Anteil läuft prinzipiell nur auf bestimmten Prozessoren. Schreibst du die App für ein Gerät mit ARM-Prozessor, so läuft sie auf einem Gerät mit x86-CPU nicht.

Außerdem ist es recht "tricky" und Aufwendig, die NDK zu verwenden - insbesonders dann, wenn man nicht mit C++, sondern mit C arbeiten will. Ich habe das bereits gemacht und weiß, was auf dich zukommen würde.

Es gibt jedoch Compiler, die C- oder C++-Code in Java-Bytecode umwandeln können. Diesen könnte man dann in ein Android-Projekt einbinden.

...zur Antwort

Falls du keine fertigen Formeln verwenden darfst: Die Rechnung ist relativ einfach:

U1 = Z11*I1 + Z12*I2
U2 = Z21*I1 + Z22*I2

Bei diesen Gleichungen bringe ich I1 nun auf die linke und U2 auf die rechte Seite:

U1 - Z11*I1 =       Z12*I2
- Z21*I1 = -U2 + Z22*I2

Mit dem Gaußverfahren kann man dieses Gleichungssystem nun nach U1 und I2 auflösen; das Ergebnis, was stehen bleibt, sieht dann so aus:

U1     = A11*U2 + A12*I2
I1 = A21*U2 + A22*I2

Die Vorfaktoren vor U2 und I2 sind also die Werte der Kettenmatrix.

...zur Antwort

Die 99,8% beziehen sich auf die normale Belastung des Transformators.

Würden beide Gleichungen (U1/U2=... und I1/I2=...) exakt stimmen, so wäre der Wirkungsgrad übrigens 100%.

Beim unbelasteten Transformator stimmt die Gleichung I1/I2=... nicht: Der Transformator ist in diesem Fall eigentlich nur eine Spule, die an Wechselstrom angeschlossen wird. Obwohl I2=0 ist, ist I1>0, da es sich beim Transformator in diesem Fall ja um eine Spule handelt. Da der Transformator idR. nicht supraleitend ist, ist allerdings der Strom durch die Spule 1 kein reiner Blindstrom, sondern es wird Leistung in Wärme umgesetzt. Der Wirkungsgrad ist folglich 0%.

Beim sehr stark belasteten Transformator muss man sich klar machen, dass der Verlust bedingt durch den Ohmschen Widerstand der Windungen quadratisch mit dem Strom (I1) zunimmt.

Das bedeutet, dass beim extrem stark belasteten Transformator die Eingangsleistung quadratisch mit dem Eingangsstrom ansteigt, jedoch die Ausgangsleistung nur linear.

...zur Antwort

Die Bezeichnung "nicht religiös" wird wohl deswegen verwendet, weil die Bezeichnung "Atheist" verschiedene Bedeutungen hat (bzw. dass sich dessen Bedeutung über die Zeit hinweg geändert hat) und von unterschiedlichen Leuten unterschiedlich verstanden wird:

Als dieses Wort ("Atheist") in der Deutschen Sprache erstmalig aufkam, bezeichnete es - wenn ich es richtig verstanden habe - Personen, die fest davon überzeugt waren, dass es keinen Gott geben kann.

Leute, die weder davon überzeugt waren, dass es Gott gibt, noch davon, dass es keinen gibt, wurden also nicht mit diesem Begriff bezeichnet.

Später dann wurden alle Leute, die nicht definitiv an Gott geglaubt haben mit diesem Begriff bezeichnet - also auch Leute, denen es egal war, ob es Gott gibt oder nicht.

Heute ist es oft so, dass diejenigen Leute, die ursprünglich mit dem Begriff "Atheist" bezeichnet wurden, als "Antitheist" bezeichnet werden und nur noch die Gruppe, die weder an Gott glaubt noch von dessen nicht-Existenz überzeugt ist, als "Atheist".

Vor diesem Hintergrund gibt es - auch hier auf GF - ständig wieder Missverständnisse und sogar Streit, wenn irgendwo in einer Antwort, einer Frage oder in einem Kommentar das Wort "Atheismus" auftaucht, da jeder User eine andere Vorstellung davon hat, welche der oben genannten Bedeutungen des Begriffs "Atheismus" denn wohl im Beitrag gemeint war.

Um derartigen Schwierigkeiten aus dem Weg zu gehen, denke ich, dass z.B. von Behörden der Begriff "Atheist" nicht mehr so häufig verwendet wird und dafür eher Bezeichnungen wie "nicht religiös".

...zur Antwort

Prinzipiell ist es möglich, aus Maschinencode (die 2600 hatte einen 6502-kompatiblen Prozessor) Assemblercode zu machen.

Von dort aus wieder auf Quellcode zu kommen, ist nicht möglich. Es gibt zwar für bestimmte Prozessoren Programme, die Maschinencode in Pseudo-Quellcode decompilieren können; da aber Maschinencode keinerlei Informationen über Variablennamen usw. enthält, wird sich dieser Pseudo-Quellcode massiv vom Original-Quellcode unterscheiden.

Für dein Ziel:

so dass ich den Source Code sehen kann so wie die Programmieren damals

ist der auf dem ROMs gespeicherte Maschinencode also nicht ausreichend.

Bei der 2600 sind die Spiele ohne Bankswitching maximal 4 Kilobytes groß, mit Bankswitching 16 Kilobytes. Derartig kleine Programme werden normalerweise nicht in einer Hochsprache geschrieben und dann compiliert, sondern direkt in Assembler-Code.

Bei Spielmodulen mit Bankswitching müsste man beim "decompilieren" auch noch die Bankswitching-Logik des Spielmoduls verstehen, da diese für die Funktion des Spieles absolut wichtige Elektronik mit dem Spielmodul selbst mitgeliefert wurde.

...zur Antwort

Die zweite Platine ist eine USB-Platine. Diese kannst du wie fast jedes USB-Gerät gleichzeitig mit einer anderen Hardware verwenden.

Was Platinen zum Anschluss an den LPT-Port angeht:

Diese funktionieren meistens NICHT zusammen mit USB-zu-LPT-Adaptern, sondern nur mit on-Board-LPT-Schnittstellen.

Außerdem benötigen die meisten dieser Platinen unter Windows spezielle Treiber haben, um den on-Board-LPT-Port so anzusteuern, wie man es für diese Platinen braucht - da diese Ansteuerung sich erheblich von Druckern unterscheidet.

...zur Antwort

> das der Code in dem Exe File drinnen sein muss

Nein.

Bei Compiler-Sprachen wird der Code entweder in Bytecode oder direkt in Maschinencode übersetzt, um eine EXE-Datei zu erzeugen. Das sind Befehle, die aus Zahlen bestehen, die der Computer verstehen kann.

Es gibt so-genannte Disassembler, mit denen man diese Zahlen in ein einigermaßen lesbares Format (so-genannten Assembler-Code) bringen kann. Diese Tools können auch den Inhalt von Windows-EXE-Dateien anzeigen.

Ein einzelner Befehl in einer Programmiersprache besteht dabei aus mehreren Befehlen, die der Prozessor ausführen muss.

Beispielsweise könnte der Befehl:

meinObjekt.meineMethode(5+meineZahl);

...in der EXE-Datei in mit Zahlen gespeichert sein, die der Disassembler folgendermaßen darstellen würde:

mov eax, [ebp-24]
add eax, 5
push eax
mov eax, [ebp-28]
push eax
mov eax, [eax]
call dword ptr [eax+20]
add esp, 8

Jede Zeile entspricht dabei einer Zahl oder einer Kombination aus Zahlen, die für den Prozessor einen Befehl darstellen. "add" zum Beispiel ist die Addition aus "5+meineZahl".

Das Beispiel zeigt übrigens Maschinencode, während C# Bytecode (MSIL) erzeugt - ohne sich wirklich gut damit auszukennen, kann man aber beide Varianten nicht verstehen.

...zur Antwort

Könntest du noch dazu sagen, um welche Schaltung es sich handelt und welche beiden Phasenlagen du meinst?

Bei einem LRC-Glied ist die Phasenverschiebung zwischen Strom und Spannung bei Resonanzfrequenz beispielsweise 0° und nicht 90°.

Die Phasenverschiebung der Spannungen an L und C gegenüber der Gesamtspannung wären in diesem Fall allerdings jeweils 90°...

...zur Antwort

Bei Windows bestimmt ein einziges Byte in der EXE-Datei, ob ein Programm ein Konsolenprogramm ist oder nicht. Wenn man ein Konsolenprogramm doppelklickt, wird ein Konsolenfenster geöffnet, wenn man ein "nicht-Konsolenprogramm" in der Befehlszeile startet, erscheint sofort wieder die Zeile um den nächsten Befehl einzugeben, obwohl das Programm noch läuft.

Bei Windows gibt es zwei Befehle, um Java-Programme zu starten: "java" und "javaw". "java.exe" ist eine Konsolenanwendung, "javaw.exe" keine. Wenn du also ein Programm mit dem Befehl

java -jar MeineDatei.jar

startest, hast du eine Konsole, wenn du hingegen

javaw -jar MeineDatei.jar

verwendest, nicht!

In der Registry ist eingetragen, welcher Befehl ausgeführt werden soll, wenn man eine Datei von einem bestimmten Dateityp (z.B. ".jar") doppelklickt. Dort ist für die Dateiendung ".jar" normalerweise "javaw.exe" eingetragen.

Man kann das zu "java.exe" umändern; dann öffnet sich aber für alle JAR-Dateien (auch die, die keine Konsole brauchen) ein Konsolenfenster.

...zur Antwort

Hallo.

Bevor ich auf deine eigentliche Frage eingehe, würde ich dich noch auf die Auswirkungen davon hinweisen, dass Spannung eines Kondensators vom Ladezustand abhängig ist:

  • Einen Kondensator kann man nicht wie einen Akku aufladen; wenn man ihn über einen Widerstand (bzw. Transistor etc.) aufläd, gehen mindestens 50% der Energie als Wärme verloren; dies kann man per Integralrechnung nachweisen. Entsprechend muss man Kühlkörper vorsehen.
  • Beim Entladen des Kondensators fällt die Spannung ab! Wenn der Verbraucher eine bestimmte Mindestspannung benötigt, kann man nicht die volle Ladung des Kondensators nutzen.
  • Man kann bei einem Kondensator nicht sagen, dass er "voll" ist, sondern nur dass er "auf X Volt aufgeladen" ist. Schließlich kann man durch Erhöhen der Spannung einen "vollen" Kondensator immer weiter aufladen (bis er durch Überspannung kaputt geht)

Parallel geschaltete Kondensatoren verhalten sich im Prinzip exakt gleich wie ein einziger großer Kondensator, so dass alles, was mit einem großen Kondensator funktioniert, auch mit mehreren parallel geschalteten kleinen funktioniert. Nur das in-Reihe-Schalten ist wesentlich komplizierter (Stichwort: Balancing)...

Eine Schaltung, bei der eine Lampe oder LED leuchtet, wenn ein Kondensator "auf X Volt" aufgeladen ist, habe ich dir angehängt...

Für den Widerstand R3 gilt - falls ich mich nicht verrechnet habe - folgende Formel:

R3=R4*(((UC/UV)*((R1/R2)+1))-1)

... wobei UC die Spannung ist, bei der der Kondensator als "voll" gelten soll und UV die Versorgungsspannung des Operationsverstärkers. Für R1, R2 und R4 würde ich 1Kiloohm- oder 10Kiloohm-Widerstände ausprobieren.

Die Spannung der Lampe ist gleich groß wie UV. Falls du statt einer Lampe eine LED verwenden willst, vergiss bitte den Vorwiderstand nicht!

...zur Antwort

Das sind zwei Teilfragen in einem:

1) Wird ein Kurzschluss erzeugt?

Die Antwort darauf: Ja, wird er. Der rechte Ausgang wird mit der Masse verbunden, also kurzgeschlossen.

2) Kann man das Gerät dadurch beschädigen?

In der Regel sollten die Geräte so gebaut sein, dass sie so einen Kurzschluss aushalten. Wenn du aber irgendwelche chinesischen Billigfabrikate nimmst, würde ich dafür nicht garantieren...

...zur Antwort

Funktionsweise elektronischer Stellantrieb Fußbodenheizung

Hallo zusammen,

ich habe heute ein Gerät in der Hand gehabt dessen Funktionsweise mir leider nicht ganz schlüssig ist.

Es handelt sich um einen elektronischen Stellantrieb für eine Fußbodenheizung. Und zwar um exkat dieses Modell:

http://www.amazon.de/Stellantrieb-Fussbodenheizung-230V-inkl-Ventilanpassung/dp/B004JIW386

Angeschlossen sind mehrere von den Dingern an genau solch einem Gerät:

w w w.heizman24.de/regeltechnik/regelklemmleisten/2034/menred-e8.583rf-mehrkanal-funkempfaenger-230-v-mit-8-kanaelen-433-mhz

Der Stellantrieb ist an einem Relaiskontakt angeschlossen (wahrscheinlich einmal Phase und einmal Nulleiter), hat zwei Drähte an denen eine Spannung von 230 Volt anliegt, wenn geheizt werden soll und 0 V wenn nicht. Liegt diese Spannung an, dreht sich der Antrieb sehr langsam (ca. 5 Minuten) nach außen bzw. der Stift des eigentlichen Ventils würde ganz ausfahren.

Soll nicht geheizt werden schaltet das Relais ab und es liegen 0 Volt an. Dennoch fährt der Stellantrieb wieder vollständig zurück bzw. drückt den Stift des Ventils wieder ein.

Wie kann das sein, wenn doch keine Spannung mehr anliegt? Ist dafür ein Kondensator o.ä. verantwortlich?

Wenn der Stellantrieb komplett abgeklemmt wird, bleibt er auch bei der letzten Position stehen. Würde also bedeuten, dass ein Anschluss an N notwendig ist?

Der Controller kennt nur Ein und Aus und fährt dementsprechend das Ventil ganz rein oder ganz raus. Verstehen diese Dinger aus PWM (Pulsweitenmodulation), sodass diese mit einem anderen Controller auch mehrere Stelleinstellungen halten können?

Im Voraus besten Dank für diese spezielle Frage :-)

...zur Frage

Eine kurze Suche nach Antrieben für Heizungen bei Google hat ergeben, dass auch Danfoss solche Antriebe herstellt. Danfoss gibt ein Datenblatt zu diesem Antrieb heraus, in dem folgendes zu lesen ist:

Die Stellmechanik ... arbeitet mit einem ... beheizten Dehnstoffelement ...

Demnach benötigt man "in die eine Richtung" Strom, um das Element zu beheizen. Es dehnt sich dann aus (oder zieht sich zusammen - das gibt es auch). "In die andere Richtung" würde man das Element einfach abkühlen lassen, so dass der Antrieb sich in die andere Richtung bewegt.

Der eigentliche Antrieb funktioniert in diesem Fall also nicht elektrisch, sondern über die Temperatur.

Um zu überprüfen, ob auch dein Element so arbeitet, könntest du überprüfen, ob man es auch durch Temperaturänderungen (Fön) anstatt durch Anlegen von Spannung bedienen kann. KEINE GARANTIE, DASS ES DABEI NICHT KAPUTT GEHT!

Falls der Strom tatsächlich nur ein Heizelement bedient, kannst du auch PWM mit einer fahren - allerdings weiß ich, dass es Heizelemente gibt, denen es nicht gut tut, wenn sie nicht Volllast gefahren werden. In diesem Fall würde die PWM deinem Antrieb nicht gut tun.

...zur Antwort

Hallo.

Es gibt keinen "Standard"-C++-Befehl um die Farbe umzustellen. Entweder man verwendet zusätzliche Libraries (wie z.B. "ncurses"), die man nachträglich installieren muss, oder man greift direkt auf die Befehle des Betriebssystems zu, wodurch der Code dann allerdings nur für ein bestimmtes Betriebssystem compiliert werden kann. Da du mit Code::Blocks arbeitest, gehe ich davon aus, dass du Windows benutzt.

Unter Windows wird die Funktion "SetConsoleTextAttribute" dazu benutzt, die Farbe in der Konsole umzustellen (der erste Google-Treffer zu "SetConsoleTextAttribute" sollte die Beschreibung auf der Microsoft-Webseite sein).

Das Ganze funktioniert so:

#include <windows.h>
...
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
...
cout << flush;
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
...
cout << flush;
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
...
cout << flush;
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED);
...

Das "cout << flush;" sorgt dafür, dass vorherige "cout"-Operationen abgeschlossen werden, bevor der nächste Befehl (nämlich das Umschalten der Farbe) ausgeführt wird. Ansonsten kann es sein, dass die Farbe umgeschaltet wird, bevor das vorherige "cout" abgeschlossen worden ist und der Text vom vorherigen "cout" bereits teilweise in der neuen Farbe dargestellt wird.

Das zweite Argument ist eine bitweise ODER-Verknüpfung aus diversen Konstanten. Soll der Text z.B. weiß sein, so müsste man die Konstanten Rot, Grün, Blau und Intensity miteinander kombinieren; für dunkelgelb hingegen nur Rot und Grün...

Auf der Microsoft-Webseite zu SetConsoleTextAttribute findest du einen Link auf eine andere Seite (ebenfalls bei Microsoft) wo sämtliche Konstanten aufgelistet sind.

...zur Antwort