UnoArduSim FullHelp de
UnoArduSim FullHelp de
3 Vollständige Hilfe
Inhaltsverzeichnis
Überblick
CodeBereich, Präferenzen und Editieren/Ansehen
CodeBereich
Präferenzen
Editieren/Ansehen
VariablenBereich und Editieren/Verfolgen Variable fenster
LaborBankBereich
Das 'Uno'
'I/O' Geräte
'Serial'-Monitor ('SERIAL')
Software Serieller ('SFTSER')
SD-Laufwerk ('SD_DRV')
Schieberegister Sklave ('SRSLV')
Konfigurierbare SPI Sklave ('SPISLV')
Zweidraht-I2C Sklave ('I2CSLV')
'1-Wire' Sklave ('OWIISLV')
Generator Ein Schuss ('1SHOT')
Digitaler Impulsgeber ('PULSER')
Analoger Funktionsgenerator ('FUNCGEN')
Schrittmotor ('STEPR')
GleichstromMotor ('MOTOR')
ServoMotor ('SERVO')
Piezo Lautsprecher ('PIEZO')
Rutschen Widerstand ('R=1K')
Druckknopf ('PUSH')
Farbige LED ('LED')
4-LED-Reihe ('LED4')
7-Segment LED Ziffer ('7SEG')
Analoger Schieberegler
Pin Drahtbrücke ('JUMP')
Menüs
Datei:
Laden INO oder PDE Prog (ctrl-L)
Editieren/Ansehen (Strg-E)
Speichern
Speichern Als
Nächster ('#include')
Bisherige
Ausgang
Finden:
Finden Weiter Funktionsmodul / Var
Finden Zurück Funktionsmodul / Var
Suche-Text einstellen (Strg-F)
Finden Nächster Text
Finden Vorheriger Text
Ausführen:
Schritt Hinein (F4)
Schritt Uber (F5)
Schritt Aus (F6)
Ausführen Dort (F7)
Ausführen Bis (F8)
Ausführen (F9)
Halt (F10)
Zurücksetzen
Animieren
Zeitlupe
Optionen:
Schritt Uber-Strukturen/ Betreiber
Register-Allocation
Fehler bei der Nichtinitialisierung
Hinzugefügt 'loop()' Verzögern
Verschachtelte Interrupts zulassen
Konfigurieren:
'I/O' Geräte
Präferenzen
VarAktualisieren:
Erlaube Auto (-) Zusammenziehen
Minimal
Markieren Änderungen
Fenster:
'Serial' Monitor
Alles wiederherstellen
Pin Digital Wellenformen
Pin Analoge Wellenform
Hilfe:
Schnell Hilfe Datei
Full Hilfe Datei
Fehler Korrekturen
Änderungen / Verbesserungen
Über
'Uno' Leiterplatte und 'I/O' Geräte
Timing
'I/O' Gerät Timing
Geräusche
Einschränkungen und nicht unterstützte Elemente
Inbegriffen Dateien
Dynamische Speicherzuweisungen und RAM
'Flash' Speicherzuordnungen
'String' Variablen
Arduino-Bibliotheken
Zeiger
'class' und 'struct' Objekte
Imfang
Qualifikationsspiele 'unsigned'. 'const' . 'volatile'. 'static'
Kompilierer-Richtlinien
Arduino-Sprachelemente
C / C ++ - Sprachelemente
Funktionsmodul Vorlagen
Echtzeit-Emulation
Versionshinweise
Fehler Korrekturen
V2.3 - Dezember 2018
V2.2 - Jun. 2018
V2.1.1– Mar. 2018
V2.1– Mar. 2018
V2.0.1– Jan. 2018
V2.0 - Dez. 2017
V1.7.2– Feb. 2017
V1.7.1– Feb. 2017
V1.7.0– Dez. 2016
V1.6.3 - Sept. 2016
V1.6.2 - Sept. 2016
V1.6.1– Aug. 2016
V1.6– Juni 2016
V1.5.1 - Juni 2016
V1.5 - Mai 2016
V1.4.3 - April 2016
V1.4.2 - März 2016
V1.4.1 - Januar 2016
V1.4 - Dezember 2015
V1.3 - Oktober 2015
V1.2 - Juni 2015
V1.1 - März 2015
V1.0.2 - Aug. 2014
V1.0.1 - Jun. 2014
V1.0 - Erstveröffentlichung Mai 2014
Änderungen / Verbesserungen
V2.3 Dezember 2018
V2.2 Juni 2018
V2.1 März 2018
V2.0.1 Januar 2018
V2.0 Sept. 2017
V1.7.2– Februar 2017
V1.7.1– Februar 2017
V1.7.0– Dez. 2016
V1.6.3 - Sept. 2016
V1.6.2 - Sept. 2016
V1.6.1– Aug. 2016
V1.6 - Juni 2016
V1.5.1 - Juni 2016
V1.5 - Mai 2016
V1.4.2 - März 2016
V1.4 - Dezember 2015
V1.3 - Oktober 2015
V1.2 Juni 2015
V1.1 - März 2015
V1.0.1 - Jun. 2014
V1.0 - Erstveröffentlichung Mai 2014
Überblick
UnoArduSim ist eine Freeware Echtzeit (sehen für Timing Beschränkungen ) Simulator-Tool, das ich für Studenten
und Arduino-Enthusiasten entwickelt habe. Es ist so konzipiert, dass Sie mit Arduino programme experimentieren und
problemlos debuggen können ohne die Notwendigkeit einer tatsächlichen Hardware . Es ist auf die Zielgruppe
ausgerichtet Arduino 'Uno' leiterplatte, und Sie können aus einem Satz von virtuellem 'I/O' geräte auswählen und
diesen geräte mit Ihrem virtuellen 'Uno' in konfigurieren und verbinden LaborBankBereich . - Sie brauchen sich nicht
um Verdrahtungsfehler, unterbrochene / lose Verbindungen oder fehlerhafte geräte zu kümmern, die Ihre Entwicklung
und Tests des programm beeinträchtigen.
UnoArduSim stellt einfache Fehlernachrichten für alle analysieren- oder ausführung-Fehler bereit, die auf sie stoßen,
und ermöglicht das Debuggen mit Zurücksetzen . Ausführen . Ausführen Dort, Ausführen Bis . Halt und flexibel
Schritt Operationen in der CodeBereich mit gleichzeitiger Ansicht aller globalen und aktuell aktiven lokalen variablen,
arrays und objekte in der VariablenBereich . Ausführen-Zeit Die array-Begrenzungsprüfung wird bereitgestellt, und
ein ATmega-RAM-Überlauf wird erkannt (und die Schuldige-programm-Zeile wird hervorgehoben!). Alle an den
elektrischen steht konflikt mit angeschlossenen 'I/O' geräte werden gekennzeichnet und gemeldet, sobald sie
auftreten.
Wenn ein INO oder ein PDE programm datei geöffnet ist, wird es in das programm geladen CodeBereich . Das
programm erhält dann eine Analysieren, um es in eine tokenisierte ausführbare Datei umzuwandeln, die dann bereit
ist simuliertes ausführung (Im Gegensatz zu [Link] ist eine eigenständige binären-Programmdatei nicht
erstellt) Jeder analysieren-Fehler wird erkannt und gekennzeichnet, indem die fehlerhafte Zeile in analysieren
hervorgehoben wird und der Fehler im Fehlerbericht gemeldet wird Statusleiste ganz unten in der UnoArduSim-
Anwendung fenster. Ein Editieren/Ansehen fenster kann geöffnet werden, um eine mit Syntax hervorgehobene
Version Ihres Benutzers programm anzuzeigen und zu bearbeiten. Fehler während des simulierten ausführung (z. B.
eines falsch passenden baudrate) werden in der Statusleiste und über eine Popup-Meldungsbox gemeldet.
UnoArduSim V2.3 ist eine im Wesentlichen vollständige Implementierung von Arduino-Programmiersprache V1.6.6
wie beim dokumentiert [Link] . Sprache der Sprachreferenz und mit Ergänzungen wie in den
Versionshinweisen zur Version Herunterladen Seite angegeben. Obwohl UnoArduSim nicht die vollständige C ++ -
Implementierung unterstützt, die das [Link]-zugrunde liegende GNU kompilierer unterstützt, ist es
wahrscheinlich, dass nur die fortgeschrittensten Programmierer feststellen würden, dass einige C / C ++ - Elemente,
die sie verwenden möchten, fehlen (und natürlich gibt es immer einfache Elemente) Problemumgehung für solche
fehlenden Features). Im Allgemeinen habe ich nur das unterstützt, was meiner Meinung nach die nützlichsten C / C ++
- Funktionen für Arduino-Hobbyisten und Studenten ist - zum Beispiel 'enum' und '#define' werden unterstützt,
funktionsmodul-Pointer jedoch nicht. Obwohl benutzerdefinierte objekte ( 'class' und 'struct' ) und (die meisten)
Überladungen von Operatoren werden unterstützt. Mehrfachvererbung ist nicht möglich .
Da UnoArduSim ein Simulator für die Hochsprache ist, Es werden nur C / C ++ - Anweisungen unterstützt .
Assembleraussagen sind dies nicht . Da es sich nicht um eine Maschinensimulation auf niedriger Ebene handelt, Auf
die ATmega328-Register kann auf Ihre programm nicht zugegriffen werden entweder zum Lesen oder Schreiben,
obwohl Registerzuordnung, Weitergabe und Rückgabe emuliert werden (wenn Sie dies unter dem Menü auswählen)
Optionen ).
Ab V2.3 unterstützt UnoArduSim eingebaut automatisch für eine begrenzte Teilmenge der von Arduino bereitgestellten
Bibliotheken. Diese sind: 'Stepper.h' . 'SD.h' . 'Servo.h' . 'SoftwareSerial.h' . 'SPI.h' . 'Wire.h' .
'OneWire.h>' , und 'EEPROM.h' (Version 2). Für alle '#include' von von Benutzern erstellten Bibliotheken wird
UnoArduSim nicht Suchen Sie in der üblichen Arduino-Installationsverzeichnisstruktur nach der Bibliothek.
stattdessen brauchen Kopieren Sie den entsprechenden Header (".h") und die Quelle (".cpp") datei in dasselbe
Verzeichnis wie die programm datei, an der Sie gerade arbeiten (vorbehaltlich der Einschränkung, dass der Inhalt
eines '#include' datei muss vollständig verständlich sein der UnoArduSim analysator).
Ich habe UnoArduSimV2.0 mit mehrsprachiger Unterstützung in QtCreator entwickelt und ist derzeit nur für Fenster
verfügbar TM . Die Portierung auf Linux oder MacOS ist ein Projekt für die Zukunft! UnoArduSim entwickelte sich aus
Simulatoren, die ich im Laufe der Jahre für Kurse an der Queen's University entwickelt hatte, und es wurde
einigermaßen ausführlich getestet, aber es gibt sicher einige Fehler, die sich immer noch darin verstecken. Wenn Sie
einen fehler melden möchten, beschreiben Sie ihn bitte (kurz) in einer E-Mail an unoArduSim@[Link] und Bitte
fügen Sie Ihren vollständigen fehler-induzierenden programm-Arduino-Quellcode bei So kann ich den fehler
replizieren und reparieren. Ich werde nicht auf einzelne fehler-Berichte antworten, und ich habe keine garantierten
Zeitvorgaben für Korrekturen in einem späteren Release (denken Sie daran, dass es fast immer Problemumgehungen
gibt!).
Prost,
(Nebenstehend: Das unten abgebildete Beispiel fenster befindet sich alle unter einem vom Benutzer gewählten
Fenster-OS Farbschema mit dunkelblauer fenster-Hintergrundfarbe).
CodeBereich
Das CodeBereich zeigt Ihren Benutzer programm an, und hervorzuheben ist der ausführung.
Nach einer geladenen programm hat eine erfolgreiche Analysieren die erste Zeile in 'main()' ist markiert, und die
programm ist bereit für ausführung. Beachten Sie, dass 'main()' wird implizit von Arduino (und von UnoArduSim)
hinzugefügt und Sie tun dies nicht Binden Sie es als Teil Ihres Benutzers programm datei ein. Ausführung wird vom
Menü gesteuert Ausführen und das damit verbundene Werkzeugleiste Tasten und funktionsmodul-
Tastenkombinationen.
Wenn Ihr programm geladen ist '#include' dateien, Sie können mit zwischen wechseln Datei | Bisherige und
Datei | Nächster (mit Werkzeugleiste Tasten und ).
Das Menü Finden erlaubt es dir schnell springen zwischen funktionsmodule in dem CodeBereich (nachdem Sie
zuerst auf eine Linie geklickt haben, um den Fokus zu aktivieren), verwenden Sie die Nächster und Bisherige Befehle
(mit Werkzeugleiste Tasten und oder Tastenkombinationen PgDn und PgUp ). Alternativ können Sie finden
spezifizierten Text mit seinen Textbefehlen (mit Werkzeugleiste Tasten und oder Tastenkombinationen
Aufwärtspfeil und Pfeil nach unten ) nach der ersten Verwendung Finden | Suche-Text einstellen , oder
Werkzeugleiste Taste .
Präferenzen
Editieren/Ansehen
Durch Doppelklick auf eine beliebige Zeile in der CodeBereich (oder über das Menü Datei ), ein Editieren/Ansehen
fenster wird geöffnet, um Änderungen an Ihrem programm datei zu ermöglichen aktuell ausgewählte Zeile in dem
CodeBereich ist markiert.
Der fenster hat Finden (benutzen Strg-F) und Finden / Ersetzen Fähigkeit (Verwendung Strg-H ) . Das
Editieren/Ansehen fenster hat Zurücknehmen ( Strg-Z ), und Wiederholen ( Strg-Y) Tasten (die automatisch
angezeigt werden).
Verwerfen alle Änderungen Nachdem Sie die programm zum Bearbeiten geöffnet haben, klicken Sie auf Stornieren
Taste. Um das zu akzeptieren aktuellen Status, klicken Sie auf die Schaltfläche Akzeptieren und die programm
empfängt automatisch eine weitere Analysieren (und wird in den 'Uno' heruntergeladen, wenn keine Fehler gefunden
werden). Der neue Status wird im UnoArduSim fenster angezeigt Statusleiste .
EIN Kompilieren ( Strg-R ) Taste (plus eine zugehörige Analysieren Status Message-Box (siehe Abbildung oben)
wurde hinzugefügt, um das Testen von Bearbeitungen zu ermöglichen, ohne dass der fenster zuerst geschlossen
werden muss. EIN Speichern ( Strg-S Die Taste wurde auch als Verknüpfung hinzugefügt (entspricht einer
Akzeptieren plus ein späteres getrenntes Speichern aus dem Haupt fenster).
An jeder Stornieren oder Akzeptieren ohne Änderungen, die CodeBereich Aktuelle Zeile ändert sich in letzte
Editieren/Ansehen-Caret-Position und Sie können diese Funktion verwenden, um die CodeBereich zu einer
bestimmten Zeile (möglicherweise zur Vorbereitung einer Ausführen Dort ), Können Sie auch verwenden ctrl-PgDn
und ctrl-PgUp Um zum nächsten (oder vorherigen) Leerzeilenumbruch in Ihrem programm zu springen, ist dies
hilfreich, wenn Sie schnell zu wichtigen Orten navigieren (z. B. leere Zeilen zwischen funktionsmodule). Sie können
auch verwenden Strg-Startseite und Strg-Ende um zum programm-Anfang bzw. zum Ende zu springen.
Automatische Einzugsformatierung auf 'Tab'-Ebene wird beim Öffnen des fenster ausgeführt, wenn diese Option
unter eingestellt wurde Konfigurieren | Präferenzen. Sie können Registerkarten auch mithilfe einer Tastatur zu einer
Gruppe vorgewählter aufeinander folgender Zeilen hinzufügen oder löschen rechter Pfeil oder linker Pfeil Schlüssel
- aber Automatische Einrückung muss deaktiviert sein um zu vermeiden, Ihre eigenen Tab-Ebenen zu verlieren.
Damit Sie Ihre Kontexte und geschweifte klammern besser im Auge behalten können, klicken Sie auf ein '{' oder
'}' geschweifte klammer hebt den gesamten Text zwischen diesem geschweifte klammer und dem
zugehörigen Partner hervor .
Arrays und objekte werden in beiden angezeigt un-erweitert oder erweitert Format, mit einem nachgestellten Plus
'(+)' oder minus '(-)' Zeichen. Das Symbol für eine array x zeigt als 'x[]' . Um erweitern anzuzeigen, klicken
Sie einfach auf, um alle Elemente des array anzuzeigen 'x[](+)' in dem VariablenBereich . Um zur
zusammenziehen zurückzukehren, klicken Sie auf 'x[](-)' . Der un-erweitert-Standard für eine objekt 'p1' zeigt
als 'p1(+)' Um erweitern alle Mitglieder davon anzuzeigen 'class' oder 'struct' Beispiel, klicken Sie einfach
auf 'p1(+)' in dem VariablenBereich . Um zur zusammenziehen zurückzukehren, klicken Sie einfach auf
'p1(-)' . Wenn du Klicken Sie einfach auf eine beliebige Zeile, um markieren darauf zu klicken (es kann
einfach variable oder das Aggregat sein '(+)' oder '(-)' Zeile eines array oder objekt oder eines einzelnen
array-Elements oder objekt-Gliedes), dann mache ich ein Ausführen Bis Dadurch wird der ausführung beim
nächsten erneut aufgenommen und einfrieren Schreibzugriff irgendwo in diesem ausgewählten Aggregat, oder zu
dieser ausgewählten einzelnen variable-Position.
Beim Benutzen Schritt oder Ausführen Aktualisierungen der angezeigten variable-Werte werden gemäß den im Menü
vorgenommenen Benutzereinstellungen vorgenommen VarAktualisieren - Dies ermöglicht ein vollständiges Verhalten
von minimalen periodischen Aktualisierungen bis zu sofortigen Aktualisierungen. Reduzierte oder minimale
Aktualisierungen sind hilfreich, um die CPU-Last zu reduzieren. Dies kann dazu führen, dass der ausführung nicht
unter Echtzeit bleibt, was sonst übermäßig wäre VariablenBereich fenster-Update wird geladen. Wann Animieren ist
wirksam oder wenn der Markieren Änderungen Menüoption ausgewählt ist, ändert sich der Wert eines variable
während Ausführen führt dazu, dass der angezeigte Wert aktualisiert wird sofort , und es wird hervorgehoben - dies
verursacht das VariablenBereich (falls erforderlich) zu der Zeile scrollen, die variable enthält, und ausführung ist nicht
mehr Echtzeit !.
Wenn ausführung einfriert nach dem Schritt . Ausführen Dort . Ausführen Bis , oder Ausführen -dann- Halt , das
VariablenBereich hebt die variable hervor, die der entspricht Adressstandorte, die geändert wurden (falls
vorhanden) von der allerletzte unterweisung während dieser ausführung (einschließlich durch Initialisierung der
variable-Deklaration). Wenn diese Anweisung vollständig gefüllt ein objekt oder array , das übergeordnete (+) oder
(-) Zeile für dieses Aggregat wird hervorgehoben. Wenn stattdessen die Anweisung a Standort das ist momentan
sichtbar, dann wird es hervorgehoben. Wenn sich jedoch die geänderten Standorte derzeit im Inneren verstecken ein
un-erweitert array oder objekt, das Aggregat übergeordnete Zeile bekommt eine kursive Schrift mit hoher
Helligkeit als visueller Hinweis darauf, dass etwas in ihm geschrieben wurde - wenn Sie auf erweitern klicken, wird es
sein zuletzt modifiziertes Element oder Mitglied, das hervorgehoben werden soll.
Das 'Uno'
Dies ist eine Abbildung des 'Uno' leiterplatte und seiner Onboard-LEDs. Wenn Sie ein neues programm in
UnoArduSim laden, wird es bei erfolgreicher Analyse einem "simulierten herunterladen" zum 'Uno' unterzogen, das
das Verhalten eines echten 'Uno' leiterplatte nachahmt - Sie sehen, dass der serielle RX und der TX LED blinken
(zusammen mit der Aktivität des pins 1 und 0 welche sind fest verdrahtet für die serielle Kommunikation mit einem
Host-Computer). Unmittelbar darauf folgt ein pin 13 LED-Flash, der das Zurücksetzen der leiterplatte und (und das
automatische Anhalten von UnoArduSim am) den Beginn Ihres geladenen programm ausführung anzeigt. Sie können
diese Anzeige und die damit verbundene Ladeverzögerung vermeiden, indem Sie die Auswahl aufheben
Herunterladen anzeigen von Konfigurieren | Präferenzen.
Mit dem fenster können Sie die Logikpegel des digital auf
allen 20 'Uno' pins ( '1' auf rot für 'HIGH' . '0' auf blau für
'LOW' , und '?' grau für eine undefinierte unbestimmte
Spannung) und programmierter-Richtungen ( 'I' zum
'INPUT' , oder 'O' zum 'OUTPUT' ). Bei pins, die mit PWM
via gepulst werden 'analogWrite()' , oder von
'tone()' , oder von '[Link]()' . Die Farbe
wechselt zu Lila und das angezeigte Symbol wird '^' .
Linksklick auf einem 'Uno' pin öffnet sich a Pin Digital Wellenformen fenster, das die Vergangenheit anzeigt eine
Sekunde wert von Aktivität auf digital-Ebene auf diesem pin. Sie können auf ein anderes pins klicken, um diese der
Pin Digital Wellenformen-Anzeige hinzuzufügen (bis zu maximal 4 Wellenformen gleichzeitig).
Klicken Sie auf, um nach links oder rechts zu blättern, oder verwenden Sie die Tasten Home, PgUp, PgDn, End
Eine der angezeigten Wellenformen ist die aktiv pin wellenform , angezeigt durch Drücken der Taste "Pin" (wie in der
obigen Pin Digital Wellenformen-Bildschirmaufnahme). Sie können ein wellenform auswählen, indem Sie auf die
entsprechende Pin-Schaltfläche klicken, und dann die interessierende Kantenpolarität auswählen, indem Sie auf die
entsprechende Auswahlschaltfläche für steigende / fallende Kantenpolarität klicken. , oder oder mit den
Tastenkombinationen Aufwärtspfeil und Pfeil nach unten . Das kannst du dann springen Der aktive Cursor
(entweder die blaue oder die rote Cursorlinie mit der angezeigten Deltazeit) rückwärts oder vorwärts zur digital-Kante
dieses aktiven pin wellenform mit den Cursortasten ( . oder . (Abhängig davon, welcher Cursor war
früher aktiviert mit oder ) oder verwenden Sie einfach die Tastaturtasten ← und → .
Um einen Cursor zu aktivieren, klicken Sie auf die farbige Aktivierungsschaltfläche ( oder oben gezeigt) -
Dadurch wird die Ansicht auch an den aktuellen Ort von verschoben dieser Cursor . Alternativ können Sie die
Aktivierung mit Hilfe der Tastenkombination schnell zwischen den Cursors (mit ihren jeweils zentrierten Ansichten)
wechseln 'Tab' Schlüssel.
Sie können springen den aktuell aktivierten Cursor durch Linksklick irgendwo im Anzeigebereich wellenform auf
dem Bildschirm. Alternativ können Sie entweder die rote oder die blaue Cursorlinie auswählen, indem Sie rechts oben
darauf klicken (um sie zu aktivieren) und dann ziehen Sie es auf ein neuer Standort und loslassen. Wenn sich ein
gewünschter Cursor gerade außerhalb des Bildschirms befindet, können Sie dies tun Klicken Sie irgendwo mit der
rechten Maustaste in der Ansicht, um zu dieser neuen Bildschirmposition zu springen. Wenn beide Cursor bereits auf
dem Bildschirm angezeigt werden, wechselt der Rechtsklick einfach zwischen dem aktivierten Cursor.
Um ZOOM IN und ZOOM OUT (Zoom ist immer auf den AKTIV-Cursor zentriert), verwenden Sie das Mausrad
oder die Tastenkombinationen STRG-Aufwärtspfeil und STRG-Abwärtspfeil.
Stattdessen ein Rechtsklick auf einem 'Uno' pin öffnet ein Pin Analoge Wellenform fenster, das die anzeigt
vergangene Sekunde wert von Aktivität auf analoge-Ebene auf diesem pin. Im Gegensatz zum Pin Digital
Wellenformen fenster ist dies möglich Anzeige der analoge-Aktivität auf jeweils nur einem pin.
Klicken Sie, um nach links oder rechts zu blättern, oder verwenden Sie die Tasten Home, PgUp, PgDn, End
Sie können springen das blaue oder rote Cursorlinien zum nächsten steigenden oder fallenden "Neigungspunkt" mit
den Vorwärts- oder Rückwärtspfeiltasten ( . oder . , abhängig vom aktivierten Cursor, oder verwenden
Sie die ← und → Tasten) zusammen mit den Wahltasten für steigende / fallende Flanken . (Der
"Flankenpunkt" tritt auf, wenn die analoge-Spannung den ATmega pin-High-digital-Logikpegel-Schwellenwert
durchläuft). Alternativ können Sie erneut klicken, um zu springen, oder diese Cursorlinien ähnlich ihrem Verhalten in
der Pin Digital Wellenformen fenster ziehen
'I/O' Geräte
Eine Reihe verschiedener geräte umgibt den 'Uno' am Umfang des LaborBankBereich . "Small" 'I/O' geräte (von
denen insgesamt 16 erlaubt sind) befindet sich auf der linken und rechten Seite des Bereich. "Large" 'I/O' geräte (von
denen insgesamt 8 erlaubt sind) verfügt über "aktive" Elemente und befindet sich oben und unten am
LaborBankBereich . Die gewünschte Anzahl der verfügbaren 'I/O' gerät-Typen kann über das Menü eingestellt
werden Konfigurieren | 'I/O' Geräte .
In diesem Dialog kann der Benutzer die Typen und Nummern des gewünschten 'I/O' geräte auswählen. In diesem
Dialog können Sie auch Speichern 'I/O' geräte zu einem Text datei und / oder Laden 'I/O' geräte aus einem zuvor
gespeicherten (oder bearbeiteten) Text datei (einschließlich aller pin-Verbindungen und anklickbarer
Einstellungen sowie aller eingegebenen Eingabefeldwerte).
Beachten Sie, dass ab Version 1.6 die Werte in den Eingabefeldern für Periode, Verzögerung und Impulsbreite
in den entsprechenden E / A-geräte mit dem Buchstaben 'S' (oder 's') ergänzt werden können. Das zeigt, dass
sie sein sollten skaliert nach der Position eines globalen 'I/O ____S' Schieberegler im Haupt-fenster Werkzeugleiste.
Wenn sich der Schieberegler ganz rechts befindet, beträgt der Skalierungsfaktor 1,0 (Einheit) und mit dem
Schieberegler ganz nach links beträgt der Skalierungsfaktor 0,0 (vorbehaltlich der durch die einzelnen 'I/O' gerät
erzwungenen Mindestwerte). Sie können mehr als einen Editierfeldwert skalieren gleichzeitig mit diesem
Schieberegler Mit dieser Funktion können Sie den Schieberegler während der Ausführung ziehen zur einfachen
Änderung von Pulsbreiten, Perioden und Verzögerungen für die angeschlossenen 'I/O' geräte.
Einige davon geräte unterstützen die Skalierung ihrer eingegebenen Werte Verwenden Sie den Schieberegler am
Haupt-fenster Werkzeugleiste. Wenn der gerät-Wert mit dem Buchstaben 'S' ergänzt wird, wird sein Wert mit einem
Skalierungsfaktor (zwischen 0,0 und 1,0) multipliziert, der durch die
Schieberegler-Daumenposition bestimmt wird, vorbehaltlich der gerät-
Mindestwerteinschränkung (1,0 steht ganz rechts, 0,0 ganz links) -
siehe 'I/O_____S' unter jedem Schlauch geräte, der unten
beschrieben wird.
'Serial'-Monitor ('SERIAL')
Dieser 'I/O' gerät ermöglicht ATmega-Hardware-vermittelte serielle Ein- und Ausgänge (über den 'Uno'-USB-Chip) an
'Uno' pins 0 und 1. Das baudrate wird über die Dropdown-Liste am unteren Rand eingestellt - das ausgewählte
baudrate muss passen Der Wert, den Ihr programm an den übergibt '[Link]()' funktionsmodul für
einwandfreies Senden / Empfangen. Die serielle Kommunikation ist auf 8 Datenbits, 1 Stoppbit und kein Paritätsbit
festgelegt. Du darfst trennen (leer) T aber nicht ersetzen TX pin 00, jedoch nicht RX pin 01.
Um Tastatureingaben an Ihr programm zu senden, geben Sie ein oder mehrere Zeichen in der
oberen Zeile (TX-Zeichen) ein, bearbeiten Sie fenster und drücken Sie dann schlagen Sie die
'Enter' Tastaturtaste . (Zeichen werden kursiv dargestellt, um anzuzeigen, dass die
Übertragung begonnen hat) - oder, wenn bereits begonnen wird, werden hinzugefügte
eingegebene Zeichen kursiv dargestellt. Sie können dann die '[Link]()' und
'[Link]()' funktionsmodule, um die Zeichen in der Reihenfolge zu lesen, in der sie
empfangen wurden, in den pin 0-Puffer (das ganz linke Zeichen wird zuerst gesendet).
Formatierte Text- und numerische Ausdrucke oder unformatierte Byte-Werte können durch
Aufrufen des Arduino an die untere Konsolenausgabe (RX-Zeichen) fenster gesendet werden
'print()' . 'println()' , oder 'write()' funktionsmodule.
Zusätzlich, Ein größeres fenster zum Einstellen / Anzeigen von TX- und RX-Zeichen kann durch Doppelklick
(oder Rechtsklick) geöffnet werden 'Serial' gerät . Dieses neue fenster hat ein größeres TX-Zeichen-Editierfeld
und eine separate 'Send'-Schaltfläche, auf die geklickt werden kann, um die TX-Zeichen an das 'Uno' zu senden (auf
pin 0). Es gibt auch eine Option zum Ankreuzen, mit der Backslash-Zeichenfolgen wie beispielsweise neu interpretiert
werden '\n' oder '\t' für nicht rohe Anzeige.
Dieser 'I/O' gerät ermöglicht Bibliothekssoftware-vermittelte oder alternativ serielle Ein- und Ausgänge des Benutzers
"Bit-Banged" für jedes Paar von 'Uno' pins, das Sie ausfüllen ( ausser für pins 0 und 1, die für Hardware bestimmt
sind 'Serial' Kommunikation). Ihr programm muss ein '#include <SoftwareSerial.h>' Zeile oben, wenn
Sie die Funktionalität dieser Bibliothek verwenden möchten. Wie beim hardwarebasierten 'SERIAL' gerät wird der
baudrate für 'SFTSER' über die Dropdown-Liste am unteren Rand eingestellt - der ausgewählte baudrate muss dem
Wert entsprechen, den Ihr programm an den übergibt 'begin()' funktionsmodul für einwandfreies Senden /
Empfangen. Die serielle Kommunikation ist auf 8 Datenbits, 1 Stoppbit und kein Paritätsbit festgelegt.
Auch wie bei der Hardware 'Serial' . Ein größeres fenster für TX- und RX-
Einstellungen / Anzeigen kann durch Doppelklick (oder Rechtsklick) auf den SFTSER
gerät geöffnet werden .
Beachten Sie, dass im Gegensatz zur Hardware-Implementierung von 'Serial'Es gibt keine
bereitgestellten TX- oder RX-Puffer, die von internen ATmega-Interrupt-Operationen unterstützt
werden Das 'read()' und 'write()' blockieren (das heißt, Ihr programm fährt erst fort,
wenn sie abgeschlossen sind).
SD-Laufwerk ('SD_DRV')
Dieses 'I/O' gerät ermöglicht die durch Bibliotheksoftware vermittelte (aber nicht "bit-banged") datei-Ein- und
Ausgabeoperationen am 'Uno' SPI pins (Sie können wählen, welche CS * pin verwenden Sie). Dein programm kann
das einfach '#include <SD.h>' Linie oben und Sie können verwenden '<SD.h>' funktionsmodule ODER direkt
anrufen 'SdFile' funktionsmodule selbst.
Ein größeres fenster, das Verzeichnisse und dateien (und Inhalt) anzeigt, kann durch
Doppelklicken (oder Rechtsklicken) auf dem 'SD_DRV' gerät geöffnet werden . Der
gesamte Inhalt der Festplatte ist geladen von ein SD Unterverzeichnis im geladenen
programm-Verzeichnis (falls vorhanden) um 'SdVolume init()' . und wird gespiegelt das
gleiche SD Unterverzeichnis auf datei 'close()' . 'remove()' und so weiter
'makeDir()' und 'rmDir()' .
Während der SPI-Übertragungen blinkt ein gelbes LED, und 'DATA' zeigt das letzte 'SD_DRV'
an Antwort Byte. Alle SPI-Signale sind genau und können in a angezeigt werden Wellenform
fenster.
Schieberegister Sklave ('SRSLV')
Dieser 'I/O' gerät emuliert ein einfaches Schieberegister gerät mit Active-Low SS * ("Slave-Auswahl") pin zur
Steuerung der Dout Ausgang pin (wenn SS * ist hoch, Dout ist nicht angetrieben). Ihr programm kann die
Funktionalität des eingebaut SPI Arduino objekt und der Bibliothek verwenden. Alternativ können Sie sich entscheiden,
Ihr eigenes „Bit-Bang“ zu erstellen. Lärm und CLK signalisiert antreiben dieses gerät.
Das gerät erkennt Kantenübergänge an seinem CLK Eingang, der die Verschiebung seines
Registers auslöst - die gemessene Polarität CLK Die Kante kann mit einem Radio-Button
ausgewählt werden. Auf jedem CLK Kante (der erfassten Polarität) erfasst das Register seine
Lärm Pegel in die niedrigstwertige Bit (LSB) -Position des Schieberegisters, da die
verbleibenden Bits gleichzeitig um eine Position in Richtung der MSB-Position verschoben
werden. Wann auch immer SS * niedrig ist, ist der aktuelle Wert in der MSB-Position des
Schieberegisters angetrieben auf Dout.
Dieser 'I/O' gerät emuliert einen modusauswählbaren SPI-Slave mit Active-Low SS * ("Slave-Auswahl") pin zur
Steuerung der MISO Ausgang pin (wenn SS * ist hoch, MISO ist nicht angetrieben). Ihr programm muss ein
'#include <SPI.h>' line, wenn Sie die Funktionalität des eingebaut SPI Arduino objekt und der Bibliothek nutzen
möchten. Alternativ können Sie sich entscheiden, Ihr eigenes „Bit-Bang“ zu erstellen. MOSI und SCK signalisiert
antreiben dieses gerät.
Durch Doppelklick (oder Rechtsklick) auf die gerät können Sie einen größeren Begleiter
fenster öffnen das stattdessen erlaubt y Sie müssen den maximal 32-Byte-Puffer füllen (um
den SPI geräte zu emulieren, der seine Daten automatisch zurückgibt) und die letzten 32
empfangenen Bytes (alle als Hex-Paare) anzuzeigen. Beachten Sie, dass das nächste TX-
Pufferbyte ist nur automatisch zu 'DATA' nach dem ein voller '[Link]()' hat vervollständigt!
Dieses 'I/O' gerät emuliert nur a Slave-Modus gerät. Dem gerät kann ein I2C zugewiesen werden Busadresse mit
einem Zwei-Hex-ziffer-Eintrag in der 'Addr'-Editierbox (es reagiert nur auf I2C Bustransaktionen mit seiner
zugewiesenen Adresse). Das gerät sendet und empfängt Daten über seinen Open-Drain (nur Pulldown) SDA pin und
reagiert auf das Bustaktsignal an seinem Open-Drain (nur Pulldown) SCL pin. Obwohl der 'Uno' der Bus-Master ist,
der für die Generierung der verantwortlich ist SCL Signal, wird dieser Slave gerät auch ziehen SCL low während
seiner niedrigen Phase, um die niedrige Zeit des Busses (falls erforderlich) auf eine der internen Geschwindigkeit
entsprechende Zeit zu verlängern (die in der 'Clock'-Editierbox eingestellt werden kann).
Ihr programm muss ein '#include <Wire.h>' Zeile, wenn Sie die Funktionalität des
verwenden möchten 'TwoWire' Bibliothek, um mit diesem gerät zu interagieren. Alternativ
können Sie auch eigene Bit-Banged-Daten und Taktsignale für antreiben dieses Slaves gerät
erstellen.
Ein einzelnes Byte für die Rückübertragung an den 'Uno'-Master kann in die 'Send'-Editierbox
gesetzt werden, und ein einzelnes (zuletzt empfangene) Byte kann in seiner
(schreibgeschützten) 'Recv'-Editierbox angezeigt werden. Beachten Sie, dass Der 'Send'-Editierfeld-Wert gibt immer
den Wert an Nächster Byte für die Übertragung von diesem internen Datenpuffer des gerät.
Durch Doppelklick (oder Rechtsklick) auf die gerät können Sie einen größeren Begleiter fenster öffnen
stattdessen können Sie einen maximal 32 Byte großen FIFO-Puffer füllen (um TWI geräte mit einer solchen
Funktionalität zu emulieren) und (bis zu maximal 32) Bytes der zuletzt empfangenen Daten anzeigen (als zwei- Hex-
ziffer-Anzeige von 8 Bytes pro Zeile). Die Anzahl der Zeilen in diesen beiden Editierfeldern entspricht der gewählten
TWI-Puffergröße (die mit ausgewählt werden kann Konfigurieren | Präferenzen ). Dies wurde seit dem Arduino als
Option hinzugefügt 'Wire.h' Bibliothek verwendet fünf solche RAM-Puffer in ihrem Implementierungscode, der
RAM-Speicher teuer ist. Durch Bearbeiten der Arduino-Installation 'Wire.h' datei definierte Konstante ändern
'BUFFER_LENGTH' (und auch den Begleiter bearbeiten 'utility/twi.h' datei zu ändern TWI-Pufferlänge), um
entweder entweder 16 oder 8 zu sein, ein Benutzer könnte den RAM-Speicheraufwand des 'Uno' gezielt reduzieren
Hardware-Implementierung - UnoArduSim spiegelt daher diese reale Möglichkeit durch Konfigurieren |
Präferenzen .
Dieser 'I/O' gerät emuliert einen kleinen Satz von '1-Wire'-Bus geräte, der an pin OWIO angeschlossen ist. Sie können
einen '1-Wire'-Bus (mit einem oder mehreren dieser Slaves '1-Wire' geräte) auf dem 'Uno' pin Ihrer Wahl erstellen.
Diese gerät-Kabine kann durch Anrufen der verwendet werden 'OneWire.h' Bibliothek funktionsmodule nach dem
Platzieren eines '#include <OneWire.h>' Linie an der Spitze Ihres programm. Alternativ können Sie auf OWIO
auch Bit-Bang-Signale für dieses gerät verwenden (obwohl dies sehr schwierig ist, dies ohne elektrischen konflikt zu
tun) 'OneWire.h' funktionsmodule, aber solche konflikte sind in UnoArduSim angegeben).
Jeder reale OWISLV gerät muss über ein eindeutiges 8-Byte-i (64-Bit) verfügen. Interne
Seriennummer: In UnoArdusim wird dies durch den Benutzer vereinfacht, der eine kurze 1-
Byte-hexadezimalen bereitstellt 'ID' Wert (der standardmäßig beim Laden / Hinzufügen von
gerät sequenziell zugewiesen wird), plus 'Fam' Familiencode für diese gerät. UnoArduSIm
erkennt einen kleinen Satz von Familiencodes ab V2.3 (0x28, 0x29, 0x3A, 0x42), der
Temperatursensor und parallele E / A (PIO) geräte abdeckt (ein nicht erkannter Familiencode
lässt den gerät zu einem generischen 8-Byte-Scratchpad werden gerät mit generischem
Sensor.
Wenn die gerät-Familie keine PIO-Register hat, repräsentieren die Register D0 und D1 die ersten zwei Scratchpad-
Bytes, ansonsten repräsentieren sie den PIO Register „Status“ (tatsächliche pin-Pegel) und PIO-pin-Latch-
Datenregister.
Durch Doppelklick (oder Rechtsklick) auf der gerät, eine größere OWIMonitor fenster ist geöffnet. Von diesem
größeren fenster aus können Sie alle gerät-Register überprüfen, die Scratchpad-Positionen SCR0 und SCR1 mithilfe
von Bearbeitungen und eines Schiebereglers ändern (wiederum entsprechen SCR0 und SCR1 nur D0 und D1, wenn
kein PIO vorhanden ist) oder setzen externe pin-PIO-Pullups. Wenn SCR0 und SCR1 bearbeitet werden, speichert
UnoArduSim diese bearbeiteten Werte als Benutzer- "Präferenz", die einen Anfangswert (ausgehend von
Zurücksetzen) darstellt, der den vorzeichenbehafteten Wert darstellt, der vom Sensor des gerät ausgegeben wird. der
Slider wird auf 100% zurückgesetzt (Skalierfaktor 1,0) zum Zeitpunkt der Bearbeitung. Wenn der Slider anschließend
verschoben wird, wird der 'signed' Der Wert in SCR1 wird entsprechend der Position des Schiebereglers
(Skalierfaktor von 1,0 bis 0,0) verkleinert. Mit dieser Funktion können Sie die Reaktion Ihres programm auf einfache
Weise testen, um die Sensorwerte problemlos zu ändern. .
Wenn Sie bei einem gerät mit PIO pins die Kontrollkästchen auf pin-Ebene setzen, merkt sich UnoArduSim diese
überprüften Werte wie die aktuellen Pullups, die extern auf die pins angewendet werden. Diese externen Pullup-Werte
werden dann zusammen mit den pin-Latch-Daten (Register D1) verwendet, um die endgültigen tatsächlichen pin-
Pegel zu bestimmen, und das grüne LED, das an den PIO pin angehängt ist, wird beleuchtet oder gelöscht (der pin
geht nur 'HIGH', wenn ein externer Pullup ausgeführt wird . und das entsprechende D1-Latch-Bit ist ein '1').
Generator Ein Schuss ('1SHOT')
Dieser 'I/O' gerät emuliert einen digital-One-Shot, der auf seinem 'Out' einen Impuls mit der gewählten Polarität und
Impulsbreite erzeugen kann pin, der nach einer festgelegten Verzögerung von einer auf seiner empfangenen
Auslöseflanke auftritt Trg (Trigger) Eingang pin. Sobald die angegebene Auslöseflanke empfangen wurde, beginnt
timing, und ein neuer Auslöseimpuls wird erst beim 'Out' erkannt Der Impuls wurde erzeugt (und ist vollständig
beendet).
Eine mögliche Verwendung dieses gerät ist die Simulation Ultraschall-Entfernungssensoren, die
als Reaktion auf einen Auslöseimpuls einen Entfernungsimpuls erzeugen. Es kann auch überall
dort eingesetzt werden, wo Sie ein pin-Eingangssignal erzeugen möchten, das (nach Ihrer
gewählten Verzögerung) mit einem von Ihrem programm erzeugten pin-Ausgangssignal
synchronisiert wird.
'Pulse' und 'Delay'-Werte sind vom Main fenster aus skalierbar Werkzeugleiste 'I/O_____S'-
Skalierungsfaktor-Schieberegler-Steuerung durch Anhängen eines (oder beider) an den
Buchstaben 'S' (oder 's').
Eine andere Verwendung für dieses gerät ist das Testen eines programm, das Interrupts verwendet, und Sie möchten
sehen, was passiert, wenn a spezifische programm-Anweisung wird unterbrochen Trennen Sie die E / A Gerät, die
Sie an pin 2 (oder pin 3) angeschlossen haben, vorübergehend und trennen Sie sie durch \ 1SHOT gerät, dessen
'OUT' pin an 'Uno' pin 2 (bzw. pin3) angeschlossen ist. Anschließend können Sie dessen 'Trg'-Eingang auslösen
(unter der Annahme, dass die Empfindlichkeit der steigenden Flanke dort eingestellt ist) durch Einfügen das
Anweisungspaar {DigitalWrite (LOW), DigitalWrite (HIOGH) Kurz vor dem Befehl, für den der Interrupt in der Mitte
auftreten soll, setzen Sie das 1SHOT; s 'Delay' um den an 'OUT' erzeugten Impuls zeitlich innerhalb des programm-
Befehls zu ermitteln, der diesem auslösenden Paar folgt. Beachten Sie, dass einige Anweisungen nicht unterbrochen
werden können (z. B. '[Link]()'.
Dieser 'I/O' gerät emuliert einen einfachen digital-Impulsgenerator digital, der ein periodisches Signal erzeugt, das an
einen beliebigen 'Uno' pin angelegt werden kann.
Die Werte für 'Pulse' und 'Period' sind vom Hauptbereich aus skalierbar Werkzeugleiste
'I/O_____S'-Skalierungsfaktor-Schieberegler-Steuerung durch Anhängen eines (oder beider)
an den Buchstaben 'S' (oder 's').
Dieser 'I/O' gerät emuliert einen einfachen analoge wellenform Generator, der ein periodisches Signal erzeugt, das an
einen beliebigen 'Uno' pin angelegt werden kann.
Der Zeitraum (in Mikrosekunden) kann über das Editierfeld eingestellt werden. Der
Mindestzeitraum beträgt 100 Mikrosekunden. Das von ihm erstellte wellenform kann als
sinusförmig, dreieckig oder Sägezahn gewählt werden (verwenden Sie zum Erstellen einer
Rechteckwelle stattdessen eine 'PULSER'). Bei kleineren Perioden werden weniger Proben pro
Zyklus verwendet, um das erzeugte wellenform zu modellieren (nur 4 Proben pro Zyklus bei
Periode = 100 usec).
Der 'Period' Der Wert ist vom Main fenster aus skalierbar Werkzeugleiste 'I/O_____S'-
Skalierungsfaktor-Schieberegler durch Anhängen mit dem Buchstaben 'S' (oder 's').
Schrittmotor ('STEPR')
Dieser 'I/O' gerät emuliert einen 6V bipolaren oder unipolaren Schrittmotor mit integriertem Treiberschaltung Controller
angetrieben von entweder zwei (auf P1 . P2 ) oder vier (auf P1 . P2 . P3 . P4 ) Steuersignale. Die Anzahl der Schritte
pro Umdrehung kann ebenfalls eingestellt werden. Du kannst den ... benutzen 'Stepper.h' funktionsmodule
'setSpeed()' und 'step()' an antreiben den 'STEPR'. Alternativ kann 'STEPR' antworte auch zu dir selbst
'digitalWrite()' “ bit-banged “antreiben Signale.
Der Motor wird sowohl mechanisch als auch elektrisch genau modelliert. Motor-
Treiberschaltung-Spannungsabfälle sowie variierende Reluktanz und Induktivität werden
zusammen mit einem realistischen Trägheitsmoment in Bezug auf das Haltemoment
modelliert. Die Motorrotorwicklung hat einen modellierten Widerstand von R = 6 Ohm und eine
Induktivität von L = 6 Millis-Henries, die eine elektrische Zeitkonstante von 1,0 Millisekunden
erzeugt. Aufgrund der realistischen Modellierung werden Sie feststellen, dass die pin-Impulse
sehr eng gesteuert werden nicht bekommen der Motor tritt auf - sowohl aufgrund der endlichen
Stromanstiegszeit als auch aufgrund der Rotorträgheit. Dies stimmt mit dem überein, was beim
Fahren eines echten Schrittmotors von einem 'Uno' mit natürlich einem geeigneten ( und erforderlich ) Motor
Treiberschaltung-Chip zwischen den Motordrähten und der 'Uno'!.
Ein unglücklicher fehler im Arduino 'Stepper.h' Bibliothekscode bedeutet, dass sich der Schrittmotor beim
Rücksetzen nicht in Schritt-Position 1 (von vier Schritten) befindet. Um dies zu überwinden, sollte der Benutzer
verwenden 'digitalWrite()' in seinem / ihr 'setup()' Routine zum Initialisieren der Kontroll-pin-Stufen auf die
'step(1)' Stufen, die für die 2-pin (0,1) - oder 4-pin (1,0,1,0) -Steuerung geeignet sind, und dem Motor 10 msecs
erlauben, sich auf die anfängliche gewünschte Motorposition um 12 Uhr zu bewegen.
Beachten Sie, dass Untersetzung wird nicht direkt unterstützt aus Platzmangel, aber Sie können es in Ihrem
programm emulieren, indem Sie einen Modulo-N-Zähler variable implementieren und nur aufrufen 'step()' wenn
dieser Zähler 0 erreicht (für Untersetzung um den Faktor N).
GleichstromMotor ('MOTOR')
Dieser 'I/O' gerät emuliert einen 6-Volt-Gleichstrommotor mit 100: 1-Getriebe und integriertem Treiberschaltung-
Controller angetrieben anhand eines Pulsweitenmodulationssignals (an seinem Pwm Eingang) und ein
Richtungssteuersignal (an seinem Dir Eingang). Der Motor hat auch einen Radgeberausgang, den treibt an besitzt
Enc Ausgang pin. Sie können verwenden 'analogWrite()' zu antreiben die Pwm pin mit einem 490 Hz (bei pins
3,9,10,11) oder 980 Hz (bei pins 5,6) PWM wellenform mit einem Tastverhältnis zwischen 0,0 und 1,0 (
'analogWrite()' Werte 0 bis 255). Alternativ kann 'MOTOR' antworte auch zu dir selbst 'digitalWrite()' “
bit-banged “antreiben Signale.
Der Motor wird sowohl mechanisch als auch elektrisch genau modelliert. Berücksichtigt man
den Spannungsabfall des Motors des Motors Treiberschaltung und das realistische
Leerlaufdrehmoment des Getriebes liefert eine volle Geschwindigkeit von etwa 2
Umdrehungen pro Sekunde und ein Stillstandsdrehmoment von etwas mehr als 5 kg-cm (das
bei einem konstanten PWM-Arbeitszyklus von 1,0 auftritt) mit einem Gesamtmotor plus
Lastträgheitsmoment von 2,5 kg-cm. Die Motorrotorwicklung hat einen modellierten
Widerstand von R = 2 Ohm und eine Induktivität von L = 300 Mikro-Henries, die eine
elektrische Zeitkonstante von 150 Mikrosekunden erzeugt. Aufgrund der realistischen
Modellierung werden Sie feststellen, dass die PWM-Impulse sehr schmal sind nicht
bekommen der Motor dreht sich - sowohl aufgrund der endlichen Stromanstiegszeit als auch der signifikanten
Ausschaltzeit nach jedem schmalen Impuls. Diese kombinieren, um ein unzureichendes Rotordrehmoment zu
bewirken, um das federähnliche Getriebe des Getriebes unter Haftreibung zu überwinden. Die Folge ist bei der
Verwendung 'analogWrite()' Wenn der Arbeitszyklus unter 0,125 liegt, wird der Motor nicht wackeln. Dies stimmt
mit dem überein, was beim Fahren eines echten Getriebemotors von einem 'Uno' beobachtet wird. und erforderlich )
Motor Treiberschaltung Modul zwischen Motor und 'Uno'!.
Der emulierte Motorgeber ist ein auf der Welle montierter optischer Unterbrechungssensor, der einen wellenform mit
50% Einschaltdauer und 8 vollständigen Hoch / Tief-Perioden pro Radumdrehung erzeugt (so kann Ihr programm
Radumdrehungsänderungen mit einer Auflösung von 22,5 Grad erfassen).
ServoMotor ('SERVO')
Ihr programm muss ein '#include <Servo.h>' Zeile vor der Deklaration Ihrer Servo-
Instanz (en) wenn Sie die Servo-Bibliotheksfunktion verwenden möchten , z.B
'[Link]()' . '[Link]()' Alternativ reagiert SERVO auch auf
'digitalWrite()' Bit-Bang-Signale. Aufgrund der internen Implementierung von
UnoArduSim sind Sie auf 6 'SERVO' geräte beschränkt.
Mit diesem gerät können Sie Signale auf einem beliebigen 'Uno' pin "hören" und können eine
nützliche Ergänzung zu LEDs zum Debuggen Ihres programm-Betriebs sein. Sie können auch ein
bisschen Spaß haben, wenn Sie Klingeltöne spielen 'tone()' und 'delay()' ruft auf (obwohl das
rechteckige wellenform nicht gefiltert wird, so hören Sie keine "reinen" Noten).
Sie können auch ein angeschlossenes 'PULSER' oder 'FUNCGEN' gerät hören, indem Sie ein 'PIEZO' an der pin der
gerät treibt an anschließen.
Mit diesem gerät kann der Benutzer an einen 'Uno' pin entweder einen 1-k-Ohm-Pull-up-Widerstand
an + 5 V oder einen 1-k-Ohm-Pull-Down-Widerstand an Masse anschließen. So können Sie
elektrische Lasten simulieren, die einer echten Hardware gerät hinzugefügt werden. Klicken Sie mit
der linken Maustaste auf den Schiebeschalter Karosserie Sie können die gewünschte Pull-Up- oder
Pull-Down-Auswahl umschalten. Wenn Sie eine oder mehrere dieser geräte verwenden, können Sie
einen einzelnen (oder mehrere) -Bit-Code für Ihre programm festlegen, auf den sie lesen und
antworten soll.
Druckknopf ('PUSH')
Durch Klicken mit der linken Maustaste oder durch Drücken einer beliebigen Taste schließen Sie den
Tastenkontakt. Im Momentan bleibt er solange geschlossen, wie Sie die Maustaste oder die Taste
gedrückt halten verriegeln Modus (aktiviert durch Anklicken des 'latch' Taste) bleibt geschlossen
(und eine andere Farbe), bis Sie die Taste erneut drücken. Jedes Mal, wenn Sie Kontaktsprung
ausführen (für 1 Millisekunde) Verwenden Sie die Leertaste, um den Druckknopf zu drücken.
Farbige LED ('LED')
Sie können ein LED zwischen dem ausgewählten 'Uno' pin (über einen Strombegrenzungswiderstand
der Serie eingebaut, 1 k-Ohm) an Masse oder an + 5 V anschließen. Dadurch haben Sie die Wahl,
dass das LED leuchtet, wenn das angeschlossene 'Uno' pin eingeschaltet ist 'HIGH'oder
stattdessen wann ist es 'LOW'.
Die LED-Farbe kann in ihrer Editierbox entweder rot ('R'), gelb ('Y'), grün ('G') oder blau ('B') gewählt
werden.
4-LED-Reihe ('LED4')
Sie können diese Reihe von 4 farbigen LEDs zwischen dem gewählten Satz von 'Uno' pins (jeder mit
einem 1 k-Ohm-Strombegrenzungswiderstand der Serie eingebaut verborgen) an Masse oder an + 5
V anschließen. Dadurch haben Sie die Wahl, die LEDs leuchten zu lassen hoch wenn der
angeschlossene 'Uno' pin ist 'HIGH'oder stattdessen wann ist es 'LOW'.
Das '1of4' Das pin-Editierfeld akzeptiert eine einzelne pin-Nummer, die als zu verstehen gilt der erste von vier
aufeinander folgenden 'Uno' pins, der mit den 4 LEDs verbunden wird.
Die LED-Farbe ('R', 'Y', 'G' oder 'B') ist a versteckte Option das kann sein nur von gewählt werden Bearbeiten der
[Link] datei Sie können mit erstellen Speichern von dem Konfigurieren | 'I/O' Geräte Dialog.
Sie können dieses 7-Segment-Display Ziffer LED mit einem verbinden gewählte Menge von vier
aufeinanderfolgende 'Uno' pins, die den hexadezimalen-Code ergeben für das gewünschte
angezeigte ziffer ('0' bis 'F'), und schalten Sie dieses ziffer mit dem CS * pin (active-LOW für ON) ein
oder aus.
Dieses gerät enthält einen eingebaut-Decoder, der den Aktiv-HIGH Ebenen auf den vier aufeinander folgenden '1of4'
pins, um das angeforderte angezeigte hexadezimalen ziffer zu bestimmen. Die Stufe der niedrigsten pin-Nummer (die
in der '1of4' Editierfeld) steht für das niedrigstwertige Bit des 4-Bit-Codes hexadezimalen.
Die Farbe der LED-Segmente ('R', 'Y', 'G' oder 'B') ist a versteckte Option das kann sein nur von gewählt werden
Bearbeiten der [Link] datei Sie können mit erstellen Speichern von dem Konfigurieren | 'I/O' Geräte
Dialog.
Analoger Schieberegler
Ein schiebergesteuertes 0-5V-Potentiometer kann an ein beliebiges 'Uno' pin angeschlossen werden, um einen
statischen (oder sich langsam ändernden) analoge-Spannungspegel zu erzeugen, der von gelesen wird
'analogRead()' als Wert von 0 bis 1023. Ziehen Sie den analoge-Schieberegler mit der Maus
oder klicken Sie, um zu springen.
Pin Drahtbrücke ('JUMP')
Sie können zwei verbinden 'Uno' pins zusammen mit diesem gerät (wenn beim Eingeben der zweiten
pin-Nummer ein elektrischer konflikt erkannt wird, ist die gewählte Verbindung nicht zulässig und der
pin ist getrennt).
Dieser Jumper gerät ist nur bedingt nützlich und in Kombination mit Interrupts, zum Testen,
Experimentieren und Testen von programm am nützlichsten Lernzwecke.
1) Sie können Erstellen Sie einen digital-Eingang Zum Testen Ihres programm Dies hat ein komplexeres
timing, als mit einem der mitgelieferten Satz von Sets hergestellt werden kann Standard 'I/O' geräte wie folgt:
Definieren Sie einen Interrupt funktionsmodul (nennen wir ihn so) 'myIntr') und tun 'attachInterrupt(0,
myIntr, RISING)' in deinem 'setuo()'. Verbinden a Pulser gerät bis pin2 - jetzt 'myIntr()' wird
ausführen jedes Mal ein Pulser steigende Flanke tritt auf. Ihre 'myIntr()' funktionsmodul kann ein Algorithmus
sein, den Sie programmierter verwenden (mit globalem Zähler variablen und vielleicht sogar 'random()') um ein
wellenform nach eigenem Geschmack auf jedem verfügbaren Produkt herzustellen 'OUTPUT' pin (lassen Sie uns
sagen, das ist pin 9). Jetzt SPRINGEN pin 9 zu Ihrem gewünschten 'Uno' 'INPUT'pin, um das erzeugte digital
wellenform auf diesen Eingang pin anzuwenden (um Ihre programm zu testen; s Antwort auf diesen bestimmten
wellenform). . Sie können eine Folge von Impulsen oder seriellen Zeichen oder einfach Flankenübergänge
generieren (von beliebiger Komplexität und variierenden Intervallen). Bitte beachte, dass Wenn Ihr Haupt-
programm anruft 'micros()' (oder ruft ein beliebiges funktionsmodul auf, das darauf angewiesen ist), sein
'return' Wert wird erhöht durch die Zeit in Ihrem 'myIntr()' funktionsmodul Jedes Mal, wenn der Interrupt
ausgelöst wird. Sie können mit Aufrufen an eine schnelle Anzahl von zeitlich genau festgelegten Kanten erzeugen
'delayMicroseconds()' von Innerhalb 'myIntr()' (vielleicht um eine ganze zu generieren Byte von a
High-baudrate-Übertragung), oder generieren Sie einfach einen Übergang pro Interrupt (vielleicht zu generieren
ein bisschen eines Low-baudrate-Transfers) mit der Pulser Levice 'Period' entsprechend Ihrer timing-Bedürfnisse
ausgewählt (erinnern Sie sich daran) Pulser begrenzt sein Minimum 'Period' bis 50 Mikrosekunden).
Trennen Sie beispielsweise die 'SERIAL' 'I/O' gerät TX '00' pin (bearbeiten Sie es in ein Leerzeichen) und dann
SPRINGEN 'Uno' pin '01' zurück zu 'Uno' pin '00' eine Hardware-Loopback des ATMega zu emulieren 'Serial'
Teilsystem. Jetzt in deinem Test programm drinnen 'setup()' mach ein Single '[Link]()' von a
Wort oder Zeichen und in deinem 'loop()' alle empfangenen Zeichen zurückgeben (wenn
'[Link]()') indem Sie a '[Link]()' gefolgt von einem '[Link]()'und schau,
was passiert. Man könnte das ähnlich sehen 'SoftwareSerial' Schleife zurück wird versagen (Wie im realen
Leben - die Software kann nicht zwei Dinge gleichzeitig tun).
Sie können es auch ausprobieren SPI Loop-Back mit einem SPRINGEN pin 11 (MOSI) wieder an pin 12 (MISO)
anschließen.
3) Sie können Zählen Sie die Anzahl und / oder messen Sie den Abstand von bestimmten
Ebenenübergängen auf einem 'Uno' Ausgang pin X die als Ergebnis eines Komplexes auftreten Arduino-
Anweisung oder Bibliothek funktionsmodul (als Beispiele: 'analogWrite()' , oder 'OneWire::reset()' .
oder 'Servo::write()') , wie folgt:
SPRINGEN pin X unterbrechen pin 2 und in deinem 'myIntr()' verwenden ein 'digitalRead()' und ein
'micros()' Anruf, und mit gespeicherten Zeiten und Zeiten vergleichen (von vorherigen Interrupts). Sie können
bei Bedarf die Kantenempfindlichkeit für den nächsten Interrupt ändern. mit 'detachInterrupt()' und
'attachInterrupt()' von Innerhalb Ihre 'myIntr()' . Beachten Sie, dass Sie pin nicht verfolgen können
Übergänge, die zu eng zusammen auftreten (näher an der Gesamtzeit von ausführung von Ihre 'myIntr()'
funktionsmodul), z. B. bei I2C- oder SPI-Transfers oder bei hohem baudrate 'Serial' Transfers (Auch wenn Ihr
Interrupt funktionsmodul den Inter-Edge-timing dieser durch Hardware erzeugten Transfers nicht stören würde).
Beachten Sie auch, dass Software-vermittelte Übertragungen (wie 'OneWire::write()' und
'SoftwareSerial::write()' ) sind absichtlich vor Unterbrechung geschützt (durch den Bibliothekscode, der
vorübergehend alle Interrupts deaktiviert, um timing-Unterbrechungen zu verhindern), können Sie also nicht die
Interaktionen mit dieser Methode messen.
Sie können jedoch stattdessen dieselben Kantenabstandsmessungen vornehmen visuell in einem Digital-
Signalformen fenster, wenn Sie sich für den minimalen oder maximalen Abstand über eine große Anzahl von
Übergängen interessieren, oder für das Zählen von Übergängen, verwenden Sie dies 'myIntr()' -Plus-
SPRINGEN Technik ist bequemer. Und du kannst Messen Sie z. B. Abweichungen im Abstand von main-
programm, die aufgrund der Auswirkungen Ihrer Software zu unterschiedlichen ausführung-Pfaden
unterschiedlicher ausführung-Zeiten (verursacht durch wechselnde Eingabebedingungen oder sogar einen
separaten Interrupt bei pin 3) erzeugte Übergänge erzeugt haben. eine Art zu tun von programm "Profiling".
Menüs
Datei:
Laden INO oder PDE Prog (ctrl-L) Ermöglicht dem Benutzer die Auswahl eines programm datei mit der
ausgewählten Erweiterung. Das programm erhält sofort ein Analysieren
Speichern Als Speichern den bearbeiteten programm-Inhalt unter einem anderen datei-
Namen.
Finden Weiter Springe zur nächsten Funktionsmodul in der CodeBereich (wenn es den
Funktionsmodul / Var aktiven Fokus hat) oder zur nächsten variable im VariablenBereich (wenn es
stattdessen den aktiven Fokus hat).
Finden Zurück Springe zum vorherigen Funktionsmodul in der CodeBereich (wenn es den
Funktionsmodul / Var aktiven Fokus hat) oder zur vorherigen variable im VariablenBereich (wenn es
stattdessen den aktiven Fokus hat).
Finden Nächster Text Springt zum nächsten Textvorkommen im CodeBereich (wenn es den aktiven
Fokus hat) oder zum nächsten Textvorkommen im VariablenBereich (wenn es
stattdessen den aktiven Fokus hat).
Finden Vorheriger Text Zum vorherigen Textereignis im springen CodeBereich (wenn es den aktiven
Fokus hat) oder auf den vorherigen Text in der VariablenBereich (wenn es
stattdessen den aktiven Fokus hat).
Ausführen:
Schritt Hinein (F4) Schritte ausführung um eine Anweisung vorwärts oder in eine gerufene
funktionsmodul .
Schritt Uber (F5) Schritte ausführung um eine Anweisung vorwärts oder durch einen
vollständigen funktionsmodul-Aufruf.
Schritt Aus (F6) Vorschüsse ausführung um gerade genug, um die aktuelle funktionsmodul
zu verlassen.
Ausführen Dort (F7) Läuft die programm, Anhalten an der gewünschten programm-Leitung - Sie
müssen zunächst eine gewünschte programm-Linie auf markieren klicken,
bevor Sie Ausführen Dort verwenden.
Ausführen Bis (F8) Führt den programm aus, bis ein Schreibzugriff auf den variable erfolgt, in
dem sich der aktuelle markieren befand VariablenBereich (Klicken Sie auf
eins, um die erste markieren festzulegen).
Halt (F10) Hält programm ausführung (und friert die Zeit ein).
Zurücksetzen Setzt das programm zurück (alle Werte-variablen werden auf den Wert 0 und
alle Zeiger-variablen auf 0x0000 zurückgesetzt).
Optionen:
Schritt Uber-Strukturen/ Fliegen Sie durch Konstrukteure, Destruktoren und die Überlastung
Betreiber des Bedieners funktionsmodule während eines Schrittes (dh er
stoppt nicht innerhalb dieser funktionsmodule).
Fehler bei der Als Analysieren-Fehler kennzeichnen, wenn Ihr programm versucht,
Nichtinitialisierung ein variable zu verwenden, ohne seinen Wert (oder mindestens einen
Wert innerhalb eines array) initialisiert zu haben.
Hinzugefügt 'loop()' Verzögern Fügt jedes Mal eine Verzögerung von 1000 Mikrosekunden hinzu
'loop()' wird aufgerufen (falls es keine weiteren programm-
Aufrufe gibt) 'delay()' überall) - nützlich, um zu vermeiden, dass
die Echtzeit zu weit zurückfällt.
Verschachtelte Interrupts Erlaube die erneute Aktivierung mit 'interrupts()' von innerhalb
zulassen einer Benutzerinterrupt-Serviceroutine.
Konfigurieren:
'I/O' Geräte Öffnet ein Dialogfeld, in dem der Benutzer die Typen und Nummern des
gewünschten 'I/O' geräte auswählen kann. In diesem Dialog können Sie auch
Speichern 'I/O' geräte zu einem Text datei und / oder Laden 'I/O' geräte aus
einem zuvor gespeicherten (oder bearbeiteten) Text datei (einschließlich aller pin-
Verknüpfungen und anklickbaren Einstellungen und eingegebenen Werte)
auswählen
Präferenzen Öffnet ein Dialogfeld, in dem der Benutzer Voreinstellungen festlegen kann,
einschließlich der automatischen Einrückung der Quell-programm-Zeilen, der
Expert-Syntax, der Wahl der Schriftart schriftart, der Wahl einer größeren
Schriftgröße, der Erzwingung der array-Grenzen, der Erlaubnis für
Schlüsselwörter für logische Operatoren, der Auswahl von programm
herunterladen der 'Uno' leiterplatte-Version und der TWI-Pufferlänge (für I2C
geräte).
VarAktualisieren:
Erlaube Auto (-) Lassen Sie UnoArduSim auf zusammenziehen ein, und zeigen Sie erweitert
Zusammenziehen arrays / objekte an, wenn Sie hinter die Echtzeit zurückfallen.
Markieren Änderungen Markieren hat die variable-Werte im laufenden Betrieb geändert (kann zu
einer Verlangsamung führen).
Fenster:
'Serial' Monitor Schließen Sie eine serielle E / A-Einheit gerät an pins 0 und 1 (falls keine) an
und ziehen Sie eine größere heraus 'Serial' TX / RX-Text fenster
überwachen.
Pin Digital Wellenformen Stellen Sie eine minimierte Pin Digital Wellenformen fenster wieder her.
Pin Analoge Wellenform Stellen Sie eine minimierte Pin Analoge Wellenform fenster wieder her.
Hilfe:
Änderungen / Zeigen Sie wichtige Änderungen und Verbesserungen seit der letzten Version
Verbesserungen an.
Timing
UnoArduSim führt aus schnell genug auf einem PC oder Tablet, in den meisten Fällen ) Modell programm Aktionen in
Echtzeit, aber nur wenn dein programm eingebaut ist zumindest ein bisschen klein 'delay()' Anrufe oder andere
Anrufe, die es natürlich auf Echtzeit synchronisieren (siehe unten).
Um dies zu erreichen, verwendet UnoArduSim einen Fenster-Callback-Timer funktionsmodul, der es ermöglicht, die
Echtzeit genau zu verfolgen. Das ausführung einer Anzahl von programm-Befehlen wird während eines Zeitgebers
simuliert, und Anweisungen, die längeres ausführung erfordern (wie Aufrufe von 'delay()' ) müssen möglicherweise
mehrere Timer-Slices verwenden. Bei jeder Wiederholung des Callback-Timers funktionsmodul wird die Systemzeit
mithilfe der Systemhardware-Uhr korrigiert, so dass der programm ausführung ständig so eingestellt wird, dass er im
Echtzeitmodus bleibt. Nur mal ausführung bewerten Muss in Echtzeit zurückfallen ist, wenn der Benutzer enge
Schleifen erstellt hat ohne zusätzliche Verzögerung oder 'I/O' geräte sind für den Betrieb mit sehr hohen 'I/O' gerät-
Frequenzen (und / oder baudrate) konfiguriert, die eine übermäßige Anzahl von pin-Änderungsereignissen und die
damit verbundene Verarbeitungsüberlastung verursachen würden. UnoArduSim bewältigt diese Überladung, indem
einige Timerintervalle zur Kompensation übersprungen werden. Dies verlangsamt dann die Progression von programm
auf unter Echtzeit .
Außerdem wird programme mit großem arrays angezeigt oder es werden wieder enge Schleifen angezeigt ohne
zusätzliche Verzögerung kann eine hohe funktionsmodul-Anruffrequenz verursachen und ein Hoch erzeugen
VariablenBereich Die Aktualisierung der Anzeige verursacht, dass sie hinter der Echtzeit zurückbleibt - dies kann
umgangen werden mit Reduktion zulassen oder wenn es wirklich gebraucht wird Minimal, aus dem menü
VarAktualisieren .
Genaue Modellierung der Zeit unter einer Millisekunde ausführung für jede programm-Anweisung oder -Operation ist
nicht fertig - Für die meisten Fälle wurden nur sehr grobe Schätzungen für Simulationszwecke übernommen. Die
timing von 'delay()' , und 'delayMicroseconds()' funktionsmodule und funktionsmodule 'millis()' und
'micros()' sind alle vollkommen genau und solange Sie mindestens eine der Verzögerung funktionsmodule
verwenden in einer Schleife irgendwo in Ihrem programm, oder Sie verwenden ein funktionsmodul, das sich natürlich
an den Echtzeitbetrieb (wie 'print()' was an die gewählte baudrate gebunden ist) Die simulierte Leistung Ihres
programm wird sehr nahe an der Echtzeit sein (wiederum ohne übertriebene hochfrequente pin-Änderungsereignisse
oder übermäßige, vom Benutzer zugelassene Variablen-Updates, die die Geschwindigkeit verlangsamen könnten).
Um die Wirkung einzelner programm-Anweisungen zu sehen, w Henne rennen kann es wünschenswert sein, die
Dinge verlangsamen zu können. Ein Zeitverlangsamungsfaktor von 10 kann vom Benutzer unter dem Menü eingestellt
werden Ausführen .
Geräusche
Jeder 'PIEZO' gerät erzeugt einen Ton, der den elektrischen Pegeländerungen am angeschlossenen pin entspricht,
unabhängig von der Ursache dieser Änderungen. Um die Sounds auf dem programm ausführung zu halten, startet
und stoppt UnoArduSim die Wiedergabe eines zugehörigen Soundpuffers, wenn ausführung gestartet / angehalten
wird.
Seit V2.0 wurde der Sound nun geändert, um die Qt-Audio-API zu verwenden - leider auch den QAudioOutput
'class' unterstützt kein Durchschleifen des Sound-Puffers, um zu verhindern, dass die Sound-Samples ausgehen
(wie es bei längeren OS-Fensterbetriebsverzögerungen der Fall sein kann). Um zu vermeiden, dass die meisten
nervigen Klicks und Sound-Unterbrechungen während OS-Verzögerungen auftreten, wird der Sound jetzt gemäß der
folgenden Regel stummgeschaltet:
Der Ton ist stummgeschaltet, solange UnoArduSim nicht der "aktive" fenster ist (es sei denn, ein neues Kind hat
gerade fenster) erstellt und aktiviert wurde), und selbst wenn UnoArduSim der "aktive" Haupt-fenster ist, der
Mauszeiger jedoch draußen von der Hauptkundenbereich von fenster.
Beachten Sie, dass dies bedeutet, dass der Ton vorübergehend ist als König stummgeschaltet, während der
Mauszeiger schwebt über einem Kind fenster, und wird stumm geschaltet ob Dieses Kind fenster wird
angeklickt, um es zu aktivieren (bis der nächste UnoArduSim fenster erneut angeklickt wird, um ir erneut zu
aktivieren) .
Sie können den Ton jederzeit stummschalten, indem Sie im Client-Bereich des UoArduSim main fenster auf
ianywhere klicken.
Aufgrund der Pufferung s ound hat eine Echtzeitverzögerung von bis zu 250 Millisekunden von der entsprechenden
Ereigniszeit auf der pin des angeschlossenen 'PIEZO'.
Inbegriffen Dateien
Ein '< >' - eingeklammert '#include' von '<Servo.h>' . '<Wire.h>' . '<OneWire.h>' .
'<SoftwareSerial.h>' . '<SPI.h> ' . '<EEPROM.h>' und '<SD.h>' ist unterstützt, aber diese werden nur
emuliert - der tatsächliche dateien wird nicht gesucht; Stattdessen ist ihre Funktionalität direkt in UnoArduSim
"integriert" und gilt für die fest unterstützte Arduino-Version.
Alle zitiert '#include' (zum Beispiel von “ [Link] " . "[Link]" , oder "mylib.h" ) wird unterstützt, aber
alle solche dateien müssen wohnhaft in der gleiches Verzeichnis als die Muttergesellschaft programm datei Das
enthält ihre '#include' (Es wird keine Suche in anderen Verzeichnissen durchgeführt). Das '#include' Diese
Funktion kann hilfreich sein, um die Menge an programm - Code zu minimieren, der im angezeigt wird CodeBereich
jederzeit. Header dateien mit '#include' (dh diejenigen mit einem ".h" Erweiterung) bewirkt zusätzlich, dass der
Simulator versucht, den gleichnamigen datei mit einem ".cpp" Erweiterung (falls sie auch im Verzeichnis der
übergeordneten programm vorhanden ist).
Die übermäßige RAM-Verwendung für variable-Deklarationen wird zum Zeitpunkt Analysieren und der RAM-
Speicherüberlauf während programm ausführung gekennzeichnet. Ein Artikel auf Meny Optionen Ermöglicht die
Emulation der normalen ATmega-Registerzuordnung, wie dies beim AVR kompilierer der Fall wäre, oder die Erstellung
eines alternativen Kompilierungsschemas, das nur den Stack verwendet (als Sicherheitsoption, falls ein fehler in
meiner Registerzuordnungsmodellierung auftaucht). Wenn Sie zum Anzeigen des Stack-Inhalts einen Zeiger
verwenden, sollte dies genau widerspiegeln, was in einer tatsächlichen Hardwareimplementierung angezeigt wird.
'Flash' Speicherzuordnungen
'Flash'-Speicher 'byte' . 'int' und 'float' variablen / arrays und der entsprechende Lesezugriff
funktionsmodule werden unterstützt. Irgendein 'F()' funktionsmodul-Anruf ('Flash' -Makro) von beliebige wörtliche
Zeichenfolge ist unterstützt, der einzige unterstützte 'Flash'-Speicherstring-Direktzugriff funktionsmodule ist jedoch
'strcpy_P()' und 'memcpy_P()' . Um ein anderes funktionsmodule verwenden zu können, müssen Sie zuerst
den 'Flash'-String in ein normales RAM kopieren 'String' variable . und dann mit diesem RAM arbeiten
'String' . Wenn Sie das verwenden 'PROGMEM' variable-Schlüsselwort für Modifizierer, muss angezeigt werden
vor der variable-Name und der variable muss auch deklariert werden wie 'const' .
'String' Variablen
Der Einheimische 'String' Die Bibliothek wird mit wenigen (und geringfügigen) Ausnahmen fast vollständig
unterstützt.
Das 'String' Operatoren werden unterstützt +, + =, <, <=,>,> =, == . != . und [] . Beachten Sie, dass:
'concat()' nimmt ein Single Argument das ist das 'String' . oder 'char' , oder 'int' an das Original
angehängt werden 'String' objekt nicht zwei Argumente, wie irrtümlich auf den Arduino Reference-Webseiten
angegeben wird).
Arduino-Bibliotheken
Nur 'Stepper.h' . 'SD.h' . 'Servo.h' . 'SoftwareSerial.h' . 'SPI.h' . 'Wire.h' . 'OneWire.h' und
'EEPROM.h' für die Arduino V1.6.6 Die aktuelle Version wird in UnoArduSim unterstützt. Versuchen '#include'
das " .cpp ” und " .h ” dateien von anderen bisher nicht unterstützt Bibliotheken werden nicht arbeiten da sie
einfache Montageanweisungen und nicht unterstützte Anweisungen sowie nicht erkannte dateien enthalten werden!
Zeiger
Es werden alle Zeiger auf einfache Typen, arrays oder objekte, unterstützt. Ein Zeiger kann mit einem array desselben
Typs gleichgesetzt werden (z iptr = intarray ), aber dann wäre es da keine anschließende arrays-
Begrenzungsprüfung auf einem Ausdruck wie iptr [index] .
Funktionsmodule kann Zeiger zurückgeben oder 'const' Zeiger, aber jede nachfolgende Ebene von 'const' auf
dem zurückgegebenen Zeiger wird ignoriert.
Es gibt keine Unterstützung für funktionsmodul-Aufrufe, die durchgestellt werden Vom Benutzer deklarierte
funktionsmodul-Zeiger .
Überladungen für Operatoren zum Kopieren und Zuweisen werden zusammen mit Bewegungskonstruktoren und
Bewegungszuweisungen unterstützt. Die benutzerdefinierte objekt-Konvertierung ("type-cast") funktionsmodule wird
jedoch nicht unterstützt.
Imfang
Es gibt keine Unterstützung für die 'using' Schlüsselwort oder für Namespaces oder für 'file' imfang. Alle nicht
lokalen Deklarationen werden bei der Implementierung als global angenommen.
Irgendein 'typedef' . 'struct' , oder 'class' Definition (das kann für zukünftige Deklarationen verwendet
werden), muss gemacht werden global imfang ( lokal Definitionen dieser Elemente in einem funktionsmodul werden
nicht unterstützt).
Qualifikationsspiele 'unsigned'. 'const' . 'volatile'. 'static'
Das 'unsigned' Präfix funktioniert in allen normalen rechtlichen Kontexten. Das 'const' Schlüsselwort, wenn
verwendet, muss vorausgehen der variable-Name oder der funktionsmodul-Name oder 'typedef' Name, der
deklariert wird - Wenn Sie ihn nach dem Namen setzen, wird ein Analysieren-Fehler ausgegeben. Zum
funktionsmodul-Deklarationen, die nur Zeiger zurückgeben können, die funktionsmodule enthalten 'const'
erscheinen in ihrer Erklärung.
Alles UnoArduSim variablen sind 'volatile' durch die Umsetzung, so die 'volatile' Schlüsselwort wird in allen
variable-Deklarationen einfach ignoriert. Funktionsmodule darf nicht deklariert werden 'volatile' , noch
funktionsmodul-Aufrufargumente.
Das 'static' Das Schlüsselwort ist für normale variablen- und für objekt-Mitglieder und member-funktionsmodule
zulässig, für objekt-Instanzen selbst jedoch ausdrücklich nicht zulässig ( 'class' / 'struct' ), für Nichtmitglied
funktionsmodule und für alle Argumente von funktionsmodul.
Kompilierer-Richtlinien
'#include' und regelmäßig '#define' werden beide unterstützt, aber nicht makro '#define' . Das
'#pragma' Richtlinien und Richtlinien zur bedingten Inklusion ( '#ifdef' . '#ifndef' . '#if' . '#endif' .
'#else' und '#elif' ) sind auch nicht unterstützt . Das '#line' . '#error' und vordefinierte Makros (wie
'_LINE_' . ' _FILE_' . ' _DATE_' , und ' _TIME_' ) sind auch nicht unterstützt.
Arduino-Sprachelemente
Alle einheimischen Arduino-Sprachelemente werden mit Ausnahme der zweifelhaften unterstützt 'goto' Anweisung
(die einzige sinnvolle Verwendung, die ich mir vorstellen kann, wäre ein Sprung (zu einem Bail-Out und zum sicheren
Herunterfahren der Endlosschleife), falls eine Fehlerbedingung auftritt, mit der Ihre programm nicht anders umgehen
kann.
C / C ++ - Sprachelemente
Bitsparende "Bitfeldqualifizierer" für Mitglieder in Strukturdefinitionen sind nicht unterstützt.
Der ungerade "Komma-Operator" ist nicht unterstützt (Sie können also nicht mehrere durch Kommas getrennte
Ausdrücke ausführen, wenn normalerweise nur ein einzelner Ausdruck erwartet wird, z. B. in 'while()' und
'for( ; ; )' Konstrukte).
Funktionsmodul Vorlagen
Benutzerdefinierte funktionsmodule, die das Schlüsselwort "template" verwenden, um Argumente des Typs "generic"
akzeptieren zu können nicht unterstützt.
Echtzeit-Emulation
Wie oben erwähnt, sind ausführung-Zeiten der vielen verschiedenen möglichen individuellen Arduino programm-
Anweisungen nicht genau modelliert, damit Ihr programm in Echtzeit laufen kann, um zu dominieren 'delay()'
Unterricht (mindestens einmal pro 'loop()' ) oder eine Anweisung, die natürlich auf Echtzeit-pin-Pegeländerungen
(wie z. B. 'pulseIn()' . 'shiftIn()' . '[Link]()' . '[Link]()' . '[Link]()' usw.).
Fehler Korrekturen
V2.3 - Dezember 2018
1) Ein in V2.2 eingeführtes fehler machte es unmöglich, den Wert eines array-Elements darin zu ändern
Editieren/Verfolgen.
2) Seit Version 2.0 ist der Text im 'RAM free' Die Symbolleistensteuerung war nur bei Verwendung eines
dunklen Fenster-OS-Designs sichtbar.
3) Auf Datei | Ladenund an I / O gerät datei Laden, der datei filtert (wie '*.ino' und '*.txt') funktionierte nicht -
stattdessen wurden --dateien aller Typen angezeigt.
4) Der „modifizierte“ Zustand eines datei ging danach verloren Akzeptieren oder Kompilieren in einer
nachfolgenden Datei | Editieren/Ansehen wenn keine weiteren Änderungen vorgenommen wurden
(Speichern wurde deaktiviert und es gab keine automatische Eingabeaufforderung Speichern auf programm
Ausgang).
5) Die Operatoren '/=' und '%=' lieferten nur korrekte Ergebnisse für 'unsigned' linke Variablen.
6) Die ternäre Bedingung '(bval)? S1:S2' ergab ein falsches Ergebnis, wenn 'S1' oder 'S2' ein lokaler
Ausdruck anstelle einer Variablen war.
7) Die Funktion 'noTone()' wurde korrigiert, um 'noTone(uint8_t pin)' zu werden.
8) Ein langjähriger fehler verursachte einen Absturz, nachdem er von a Zurücksetzen Wenn dieses Zurücksetzen
mitten in einem funktionsmodul ausgeführt wurde, das aufgerufen wurde, wobei einer seiner Parameter fehlte (und
somit einen Standardinitialisiererwert erhielt).
9) Mitgliedsausdrücke (z. B. '[Link]' oder '[Link]()') erbten nicht die 'unsigned' Eigentum
ihrer rechten Seite ('var' oder 'func()') und konnte daher nicht direkt mit anderen verglichen oder kombiniert
werden 'unsigned' Typen - eine Zwischenzuordnung zu einem 'unsigned' variable wurde zuerst benötigt.
10) UnoArduSim bestand darauf, dass die Definition eines funktionsmodul einen Parameter hätte mit einem
Standardinitialisierer, dass der funktionsmodul einen früheren prototyp deklariert hat.
11) Ruft an 'print(byte bvar, base)' fälschlicherweise befördert 'bvar' zu einem 'unsigned
long', und so zu viele Ziffern ausgedruckt.
12) 'String(unsigned var)' und 'concat(unsigned var)' und Betreiber '+=(unsigned)' und '+
(unsigned)' falsch erstellt 'signed' stattdessen Saiten.
13) Ein R = 1K gerät, geladen aus einer [Link] datei mit Position 'U' wurde fälschlicherweise mit seinem
Schieberegler (immer) in die gezeichnet Gegenposition von seiner wahren elektrischen Position.
14) Versuch, sich auf die Standardeinstellung zu verlassen 'inverted=false' Argument bei der Deklaration a
'SoftwareSerial()' objekt verursachte einen Absturz und das Überholen 'inverted=true' funktionierte
nur, wenn der Benutzer programm ein nachfolgendes ausführte 'digitalWrite(txpin, LOW)' um zuerst
den erforderlichen Leerlauf herzustellen 'LOW' Ebene auf der TX pin.
15) I2CSLV geräte hat nicht auf Änderungen in den pin-Bearbeitungsfeldern reagiert (die A4- und A5-
Standardwerte bleiben in Kraft).
16) I2CSLV und SPISLV geräte erkannten und korrigierten keine Teiländerungen, wenn die Maus ihre Ränder
verließ
17) Pin-Werte für geräte, die einem SPISLV oder SRSLV folgten, wurden nicht ordnungsgemäß als
Hexadezimalwerte auf dem [Link] datei gespeichert.
18) Beim Versuch, mehr als einen SPISLV gerät MISO an pin 12 anzuschließen, wurde immer ein Fehler bei der
elektrischen Konflikt ausgelöst.
19) Umschalten einer pin von 'OUTPUT' zurück zu 'INPUT'-Modus Fehler beim Zurücksetzen des pin-
Datenlatchpegels auf 'LOW'.
20) Verwenden 'sendStop=false' in Aufrufen an '[Link]()'oder '[Link]()'
verursachte einen Fehler
21) UnoArduSim hat unzulässig a 'SoftwareSerial' Empfang gleichzeitig mit a 'SoftwareSerial'
Getriebe.
22) Probleme mit 'enum'-Variablen wurden behoben.
1) Array-Indizes, die waren 'byte' oder 'char' Die Größe variablen verursachte falsche array-Offsets (wenn
ein benachbartes variable ein Nicht-0-Hochbyte enthielt).
2) Beim logischen Testen von Zeigern wurde der Zeigewert auf Nicht-Null und nicht auf den Zeigerwert selbst
geprüft.
3) Irgendein 'return' Anweisungen eingebettet 'for()' oder 'while()' Schleifen wurden falsch behandelt.
4) Listen mit Aggregationsinitialisierung für arrays von objekte oder objekte, die andere objekte / arrays enthalten,
oder vollständig leere Initialisierungslisten wurden nicht ordnungsgemäß verarbeitet.
5) Zugang von 'enum' Elementwerte mit einem " Enumname. " Präfix wurde nicht unterstützt.
6) Deklarationszeileninitialisierung von a 'char[ ]' array mit einem zitierten String-Literal funktionierte nicht.
7) Ein array, das ohne vorherige Initialisierung an ein funktionsmodul übergeben wurde, wurde nicht
ordnungsgemäß mit dem Fehler "verwendet, aber nicht initialisiert" gekennzeichnet.
8) Zeigerausdrücke mit array-Namen wurden falsch behandelt.
9) Funktionsmodul-Parameter werden als deklariert 'const' wurden nicht akzeptiert.
10) Der Pin Analoge Wellenform fenster zeigte keine PWM-Signale an ( '[Link]()' und
'analogWrite()' ).
11) Member funktionsmodule, auf den über einen objekt-Pointer zugegriffen wurde, gab fehlerhafte
Memberzugriffe.
12) Kurvenformen wurden nicht aktualisiert, wenn a Ausführen Dort haltepunkt wurde erreicht.
13) Die Modellierung der Registerzuordnung konnte fehlschlagen, wenn ein funktionsmodul-Parameter direkt als
Argument für einen anderen funktionsmodul-Aufruf verwendet wurde
3) Wenn ein Benutzer programm eine '#include' von a '*.h' datei, UnoArduSim versucht nun auch
automatisch, das entsprechende zu laden '*.c' datei ob ein entsprechender '*.cpp' datei wurde nicht
gefunden.
4) Automatisches Einfügen eines close-geschweifte klammer '}' (nach jedem open-geschweifte klammer '{' )
wurde hinzugefügt Präferenzen.
5) Ein neuer Optionen Menüauswahl erlaubt jetzt 'interrupts()' von innerhalb einer Benutzerinterrupt-
Routine aufgerufen zu werden - dies ist nur zu Bildungszwecken, da das Verschachteln von Interrupts in der Praxis
vermieden werden sollte.
6) Type-cast von Zeigern auf eine 'int' Der Wert wird jetzt unterstützt (es erscheint jedoch eine Warnmeldung).
7) UnoArduSim unterstützt jetzt markierte programm-Zeilen (z 'LabelName: count++;' für die
Benutzerfreundlichkeit (aber 'goto' ist immer noch nicht zugelassen )
8) Ausführung-Warnungen treten jetzt auf, wenn bei einem Anruf an 'tone()' könnte mit aktivem PWM auf pins
3 oder 11 stören, wenn 'anlogWrite()' würde mit einem bereits aktiven Servo auf derselben pin stören, Wenn
ein Serieneingang versäumt wird, weil Interrupts derzeit deaktiviert sind, und wenn Interrupts so schnell kommen
würden, dass UnoArduSim einige von ihnen verfehlt.
3) Im Editieren/Anseheneine schließende geschweifte klammer '}' wird jetzt automatisch hinzugefügt, wenn
Sie eine Öffnung geschweifte klammer eingeben '{'.
4) Wenn Sie auf klicken Editieren/Ansehen fenster-Titelleiste 'X' Zum Beenden haben Sie jetzt die Möglichkeit
abzubrechen, wenn Sie die angezeigte programm datei geändert, jedoch nicht gespeichert hatten.
2) Der Benutzer-Interrupt funktionsmodule kann jetzt auch selbst das blockierende Arduino funktionsmodule
anrufen 'pulseIn()' (Dies sollte jedoch nur mit Vorsicht verwendet werden, da der Interrupt funktionsmodul
nicht zurückkehren wird, bis der Blocker funktionsmodul abgeschlossen ist).
4) Sie können Arduino funktionsmodule blockieren, das unterbrochen werden kann (z. B. 'delay()' und
'pulseIn()') und Statusanzeigen wurden erweitert, um anzuzeigen, wenn Sie einen Interrupt haltepunkt in
einem solchen funktionsmodul getroffen haben (oder wenn Sie auf Halt klicken, wenn sich ausführung gerade in
einem solchen funktionsmodul befindet).
5) Ein neuer Ausführen Bis Befehl (und Werkzeugleiste Element) wurde hinzugefügt - klicken Sie auf ein
beliebiges VariablenBereich variable (es kann einfach ein Aggregat sein array oder objekt oder ein array-Element
oder objekt-Glied zu markieren, dann tun Ausführen Bis - ausführung friert beim nächsten ein Schreibzugriff
innerhalb dieses Aggregats variable oder an diesen einzelnen Standort.
6) Wenn ausführung nach einem einfriert Schritt. Ausführen Dort. Ausführen Bis, oder Ausführen-dann-Halt
Aktion, die VariablenBereich hebt jetzt die variable hervor, die der entspricht Adressstandorte, die geändert
wurden (falls vorhanden) von der ganz zuletzt Anweisung während dieser ausführung - Wenn diese Position
momentan in einem un-erweitert array oder objekt verborgen ist, wird durch Klicken auf erweitern das zuletzt
geänderte Element oder Element hervorgehoben.
7) Der Benutzer kann nun den Wert einer bestimmten Person besonders überwachen Variable Bereich variable /
member / element während der Ausführung - Doppelklicken Sie auf diese Zeile in der VariablenBereich die öffnen
Editieren/Verfolgen Variable Wert fenster, dann mach eine der Ausführen oder Schritt Befehle - Der
angezeigte Wert wird während ausführung nach den gleichen Regeln aktualisiert, die für Aktualisierungen in der
ausführung gelten VariablenBereich. Nach dem Anhalten von ausführung können Sie einen neuen Wert eingeben
und Akzeptieren es vor der Wiederaufnahme von ausführung (und kann Zurückkehren zu den vorAkzeptieren
Wert, wenn Sie Ihre Meinung vorher ändern).
8) Die Zugriffstasten F4-F10 wurden so eingestellt, dass sie mit dem Ausführen-Menü übereinstimmen
Werkzeugleiste Befehle (von links nach rechts).
9) Doppelklicken Sie dazu mit der rechten Maustaste auf 'SERIAL', 'SFTSER', 'SPISLV', 'I2CSLV' geräte zeigt jetzt
auch größere TX / RX-Bytes / Zeichen fenster (und auf 'SD_DRV', eine dateien-Überwachung (fenster).
10) Das TX-Editierfeld in 'SERIAL' oder 'SFTSER' ist während einer aktiven Zeichenübertragung nicht mehr
deaktiviert (Sie können also das Anhängen oder Ersetzen dessen, was sich dort befindet), aber einen
Wagenrücklauf (oder 'Send'-Tastenklick in dem zugehörigen 'SerialMonitor'-Kind fenster) machen ignoriert werden,
bis die Übertragung wieder in den Ruhezustand zurückkehrt (Zeichen werden jetzt in angezeigt Kursivschrift Wenn
die Übertragung startbereit ist, ist ot aktiv). Darüber hinaus wird der Benutzer jetzt bei einem seriellen Stream
gewarnt 'begin()' wenn sie schon früher die angeschlossene gerät gestartet hätten (jetzt in Bearbeitung)
Übertragungen, da es dann keine Framing-Synchronisation geben würde, was zu Empfangsfehlern führt.
11) Der Standard hinzugefügt 'loop()' Die Verzögerung wurde von 250 Mikrosekunden auf eine Millisekunde
erhöht, um nicht so weit hinter die Echtzeit zurückzufallen, wenn der Benutzer einige nicht berücksichtigt
'delay()' (explizit oder natürlich) irgendwo im Inneren 'loop()' oder in einem funktionsmodul, das es aufruft.
12) Arrays und einfache Typen wurden nun zur Unterstützung der Heap-Zuordnung hinzugefügt 'new'
Anweisung.
15) Der Benutzer [Link] datei wird jetzt bei jedem geladen Datei | LadenNicht nur beim Start von
UnoArduSim.
16) Beim Versuch wird jetzt ein Analysieren-Fehler angezeigt 'attachInterrupt()' zu einem Benutzer
funktionsmodul ist das nicht 'void' zurückgeben, oder die funktionsmodul-Parameter hat oder die zuvor noch
nicht deklariert wurden 'attachInterrupt()'.
17) 'static' member-variablen wird jetzt oben im angezeigt VariablenBereich als Globals, anstatt in jeder
Instanz eines (erweitert) objekt zu erscheinen.
19) Alles Besonderes 'PROGMEM'. 'typedef' mögen 'prog_char' und 'prog_int16' wurden nun entfernt
(sie wurden in Arduino verworfen).
20) Verbesserte Fehlermeldungen für Analysieren-Fehler, die durch falsch geschriebene oder ungültige
Deklarationstypen verursacht wurden.
1) Hinzugefügt ein Verbesserte analysieren Fehlermeldung beim 'attachInterrupt()' bezieht sich auf ein
Interrupt-funktionsmodul, das nicht war früher prototypisiert .
1) Hinzugefügt eine Finden-Text Bearbeiten Sie das Steuerelement Werkzeugleiste zur Vereinfachung der Suche
nach Text (in der CodeBereich und VariablenBereich ).
2) Das Werkzeugleiste Die Zurücksetzen-Taste funktioniert jetzt genauso wie die 'Uno' leiterplatte Zurücksetzen-
Taste.
V1.6.1– Aug. 2016
Es wurde ein Häkchen hinzugefügt, um das doppelte Laden und Parsen bereits vorhandener Dateien zu
vermeiden '#include' dateien, .
2) Es wurde eine neue Funktion hinzugefügt, um die 'I/O' gerät Editierbox-Werte einfach zu erstellen skalierbar
während des ausführung durch Ziehen eines globalen 'I/O_____S'-Scaler-Schiebereglers auf die Hauptansicht
Werkzeugleiste (Geben Sie einfach einen einzelnen Buchstaben 's' oder 'S' nach einem Wert ein, um die
Skalierung anzuzeigen).
2) Auto zulassen (-) Zusammenziehen wurde dem Menü hinzugefügt VarAktualisieren explizite Kontrolle
darüber, ob erweitert arrays / objekte automatisch vertraglich festgelegt wird oder nicht, wenn ausführung hinter
der Echtzeit zurückbleibt
3) Die Charaktere von a 'String' Auf variable kann jetzt auch zugegriffen werdenüber array-Notation,z.B
'mystring[k]' .
2) Editieren/Ansehen unterstützt jetzt auch Wiederholenund hat eine neue Speichern (Strg-S) -Taste (entspricht
Akzeptieren plus ein späteres main-fenster Speichern) und gibt jetzt die Wahl zwischen 'Tab' size (eine neue
Einstellung, die mit gespeichert werden kann Konfigurieren | Präferenzen).
3) Alle beschreibbaren Eingabefelder folgen jetzt den ausgewählten Fenster OS-Designfarben, und alle
schreibgeschützten 'RECV'-Bearbeitungsfelder verwenden weißen Text auf schwarzem Hintergrund. Das
Editieren/Ansehen Hintergrund- und Syntax-markieren-Farben passen sich nun auch dem gewählten Thema an.
4) UnoArduSim erlaubt jetzt die Wahl der Schriftart - diese Auswahl und ihre Größe wurden in die verschoben
Konfigurieren | Präferenzen (kann also im gespeichert werden [Link] datei).
6) Zeichenfolgen aus hexadezimalen, oktalen und 4-ziffer-Zeichenfolgen können jetzt als numerische Literale
verwendet werden.
7) Nach einem ersten Mausklick auf ein 'PUSH' gerät-Tastenfeld kann der Benutzer stattdessen einen Tastendruck
(eine beliebige Taste) drücken, um die Tasterkontakte zu drücken.
8) Editieren/Ansehen gibt nun nach einem kurzen visuellen Flash-Cue seinen temporären anfänglichen
schreibgeschützten Zustand wieder frei (und entfernt die Hervorhebung der ursprünglich ausgewählten Zeile).
9) UnoArduSim sucht jetzt nach mehreren 'Stepper' und 'Servo' pin konflikte, dh fehlerhafter Benutzer
programm versucht, eine Verbindung zu pins herzustellen, an der bereits eine Verbindung hergestellt wurde
'Stepper' oder 'Servo' variablen.
10) Ein Analysieren-Fehler, der durch einen fehlenden linken oder rechten Rand eines Operators verursacht wird
(einen LHS- oder RHS-Ausdruck oder variable fehlt), erzeugt jetzt eine klare Fehlermeldung.
11) Das nicht genutzt 'String' Klasse 'flags' Das Mitglied variable wurde entfernt, um Arduino V1.6.6
zuzustimmen. EIN 'String' objekt belegt jetzt 6 Bytes (zuzüglich der Zeichen-Heap-Zuordnung).
1) Vorwärts definiertes funktionsmodule (dh diejenigen, die vor dem ersten Aufruf keine prototyp-Deklaration
haben) generiert jetzt nur Warnungen (keine analysieren-Fehler), wenn der spätere Rückgabetyp der
funktionsmodul-Definition den vom ersten Gebrauch abgeleiteten Typ nicht übereinstimmt.
2) Arrays mit einer Dimension von 1 werden nicht mehr zurückgewiesen (um den Standard-C ++ - Regeln zu
entsprechen).
3) Bearbeitungsfelder sind nicht mehr auf schwarz auf weißem Hintergrund gesetzt - sie übernehmen jetzt die
Palette, die vom verwendeten Fenster OS-Design festgelegt wird.
4) 'SERIAL', 'SFTSER', 'SPISLV' und 'I2CSLV' gerät erweitert Monitor fenster (durch Doppelklick geöffnet) nimmt
jetzt die Hintergrundfarbe des übergeordneten 'I/O' Gerät an.
2) Alle Einstellungen und Werte des 'I/O' Gerät (zusätzlich zum ausgewählten pins) werden nun auch als Teil
des ausgewählten Benutzers gespeichert 'I/O' Geräte Text datei für späteres Nachladen.
3) LED Die Farbe des 'I/O' gerät kann jetzt über ein Editierfeld am gerät entweder rot, gelb oder grün eingestellt
werden.
6) Konfigurieren | Präferenzen enthält jetzt ein Kontrollkästchen zum Zulassen 'and' . 'or' . 'not'
Schlüsselwörter, die anstelle des C-Standards verwendet werden && . || , und ! logische Operatoren.
1) Das 'PUSH' gerät hat jetzt ein "push-like" Kontrollkästchen mit der Bezeichnung 'latch' um sie „einrasten“ zu
lassen (statt „momentan“), werden sie beim Schließen in die geschlossene Position eingerastet (und ihre Farbe
ändern), bis sie erneut gedrückt werden, um die Kontakte zu lösen.
2) Volle Fähigkeit 'SPISLV' geräte wurde mit Knotenauswahl hinzugefügt ('MODE0'. 'MODE1'. 'MODE2', oder
'MODE3'). Ein Doppelklick öffnet einen TX / RX-Puffer fenster, in dem anstehende REPLY (TX) -Bytes definiert
werden können, und für die Anzeige früher empfangener (RX) Bytes. Der einfache Schieberegister-Slave gerät der
Vorgängerversion wurde in 'SRSLV' gerät umbenannt.
3) Fettgedruckte schriftart kann jetzt für das ausgewählt werden CodeBereich und VariablenBereich (aus dem
menü Optionen), und fettgedruckte Hervorhebung von Schlüsselwörtern und Operatoren kann jetzt ein- /
ausgeschaltet werden Editieren/Ansehen ..
5) Aus Gründen der Übersichtlichkeit bei der Fehlerberichterstattung dürfen variable-Deklarationen nicht mehr
mehrere Zeilen umfassen (mit Ausnahme von arrays mit Initialisierungslisten).
.
6) Syntaxfärbung Geschwindigkeit in Editieren/Ansehen wurde verbessert (dies wird bei größerem programme
spürbar).
7) Ein optionaler 200-Mikrosekunden-Overhead (im Menü Optionen ) wurde jedem Aufruf von hinzugefügt
'loop()' - Dies ist der Versuch, zu vermeiden, in dem Fall, in dem der Benutzer programm hat noch keinen
hinzugefügt 'delay()' überall (siehe Timing-Diskussion unter).
1) Die SD-Bibliothek ist jetzt vollständig implementiert und eine (kleine) 8 MByte SD-Diskette 'I/O' gerät ('SD_DRV')
wurde hinzugefügt (und die Funktionalität wurde mit allen Arduino-Beispiel-SD-programme getestet).
2) Wie Arduino konvertiert UnoArduSim jetzt automatisch ein funktionsmodul-Argument in seine Adresse, wenn ein
funktionsmodul aufgerufen wird und ein Zeiger erwartet wird, der übergeben wird.
3) Analysieren-Fehlermeldungen sind jetzt besser geeignet, wenn Semikolons fehlen und nach nicht erkannten
Deklarationen.
1) Der Haupt-fenster kann jetzt maximiert oder in die Größe geändert werden, um den fenster zu erstellen
CodeBereich und VariablenBereich breiter (für größere Bildschirme).
2) Ein neues Menü Finden (mit Werkzeugleisten-Schaltflächen) wurden hinzugefügt, um eine schnellere
Navigation im System zu ermöglichen CodeBereich und VariablenBereich (PgUp und PgDown oder Textsuche
mit Aufwärts- und Abwärtspfeil).
3) Das Editieren/Ansehen fenster erlaubt jetzt die Navigation von Ctrl-PgUp und Ctrl-PgDn (zur nächsten
Leerzeile) und wurde erweitert Finden / Ersetzen Funktionalität.
4) EIN Das Menü wurde um einen neuen Eintrag erweitert VarAktualisieren um dem Benutzer zu ermöglichen,
einen Berechnungssparansatz unter schwer zu wählen VariablenBereich Ladevorgänge aktualisieren
5) Das 'Uno' pins und das beigefügte LED spiegeln jetzt alle Änderungen wider, die am 'I/O' geräte vorgenommen
wurden, auch wenn die Zeit eingefroren ist (dh auch, wenn ausführung angehalten ist).
6) Der andere Benutzer funktionsmodule kann jetzt aus einem Benutzerinterrupt funktionsmodul heraus aufgerufen
werden (gemäß Update auf Arduino 1.06).
7) EIN größere Schrift kann jetzt aus dem Menü ausgewählt werden Optionen.