0% fanden dieses Dokument nützlich (0 Abstimmungen)
17 Ansichten44 Seiten

UnoArduSim FullHelp de

UnoArduSim_FullHelp_de1

Hochgeladen von

Manuel Olivares
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
17 Ansichten44 Seiten

UnoArduSim FullHelp de

UnoArduSim_FullHelp_de1

Hochgeladen von

Manuel Olivares
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

UnoArduSimV2.

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,

Stan Simmons, Ph.D, [Link].


Assoziierter Professor (pensioniert)
Abteilung Elektrotechnik und Informationstechnik
Queen's University
Kingston, Ontario, Kanada
CodeBereich, Präferenzen und Editieren/Ansehen

(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.

Nach dem ausführung um eine (oder mehrere) Anweisungen


(Sie können verwenden) Werkzeugleiste Tasten . .
, oder ), wird die Zeile programm, die als nächstes
ausgeführte ist, markiert - die hervorgehobene Zeile ist immer
die nächste Zeile bereit, ausgeführte zu sein .

Ähnlich, wenn eine laufende programm eine (temporäre) trifft


Ausführen Dort) haltepunkt, ausführung wird angehalten und
die haltepunkt-Zeile wird hervorgehoben (und ist dann bereit
für ausführung).

Wenn programm ausführung momentan angehalten ist und


Sie in klicken CodeBereich fenster wird die gerade markierte
Zeile hervorgehoben. Das macht nicht Ändern Sie jedoch die
aktuelle programm-Zeile in Bezug auf programm ausführung.
Sie können aber ausführung verursachen zu weiterkommen
die gerade markierte Zeile, indem Sie auf die Schaltfläche
Ausführen Dort Werkzeugleiste Taste. Mit dieser
Funktion können Sie schnell und einfach bestimmte Zeilen in
einer programm erreichen, sodass Sie anschließend Zeile für
Zeile über einen interessierenden programm-Abschnitt springen können.

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

Konfigurieren | Präferenzen erlaubt Benutzern zum


Festlegen von programm und Anzeigeeinstellungen (die ein
Benutzer normalerweise übernehmen möchte) er nächste
Sitzung). Diese können daher von a gespeichert und geladen
werden [Link] datei, das sich in demselben
Verzeichnis befindet wie das geladene 'Uno' programm (
[Link] wird automatisch geladen, falls
vorhanden).

In diesem Dialogfeld können Sie zwischen zwei Schriftarten


mit einem Abstand und drei Schriftgrößen sowie
verschiedenen anderen Voreinstellungen wählen. Ab V2.0 ist
nun auch Language-Chpice enthalten. - dazu gehört immer
Englisch (en), plus ein oder zwei weitere Landessprachen
(sofern vorhanden), und eine Überschreibung basiert auf dem aus zwei Buchstaben bestehenden ISO-639-
Sprachcode in der ersten Zeile des myArduPrefs, txt datei (falls vorhanden). Auswahlmöglichkeiten werden nur
angezeigt, wenn Im Übersetzungsordner (darin befindet sich eine ".qm" -Übersetzung datei) das Home-Verzeichnis
[Link]).

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.

Dieses fenster verfügt über


vollständige
Bearbeitungsmöglichkeiten
mit dynamischer
Syntaxhervorhebung
(verschiedene markieren-
Farben werden für C ++ -
Schlüsselwörter,
Kommentare usw.
verwendet). Es gibt eine
optionale Hervorhebung der
fettgedruckte-Syntax und
automatische Formatierung
auf Einzugsebene
(vorausgesetzt, Sie haben
diese Option ausgewählt.)
Konfigurieren |
Präferenzen ). Sie können
auch bequem eingebaut funktionsmodul-Anrufe (oder eingebaut) auswählen '#define' Konstanten), die aus dem
bereitgestellten Listenfeld in Ihr programm eingefügt werden sollen - Doppelklicken Sie einfach auf das gewünschte
Listenfeld, um es an der aktuellen Caret-Position (funktionsmodul-Aufruf variable) zu Ihrem programm hinzuzufügen
Typen Sie dienen nur zur Information und werden entfernt, wenn Sie Dummy-Platzhalter hinzufügen, wenn Sie sie zu
Ihrem programm hinzufügen.

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 .

VariablenBereich und Editieren/Verfolgen Variable fenster


Das VariablenBereich befindet sich direkt unterhalb der CodeBereich. Es zeigt die aktuellen Werte für jeden globalen
und aktiven Benutzer (in-imfang) lokal variable / array / objekt im geladenen programm. Wenn sich Ihr programm
ausführung zwischen funktionsmodule bewegt, Der Inhalt wird so geändert, dass nur die lokalen variablen
angezeigt werden, auf die der aktuelle funktionsmodul / imfang zugreifen kann, sowie alle vom Benutzer
deklarierten Globals. Alle variablen, die als
deklariert wurden 'const' oder als 'PROGMEM'
(zugewiesen an 'Flash' Speicher) Werte haben,
die sich nicht ändern können, und um Platz zu
sparen, sind diese daher nicht angezeigt.
'Servo' und 'SoftwareSerial' objekt-
Instanzen enthalten keine nützlichen Werte und
werden daher auch nicht angezeigt.

Die Befehle im Menü Finden (mit


Werkzeugleiste Tasten und oder
Tastenkombinationen PgDn und PgUp ) lassen
Sie schnell zu springen zwischen variablen in dem VariablenBereich (nach dem ersten Klick auf eine Linie darin,
um den Fokus zu erhalten). Alternative, Sie können finden spezifizierten Text mit seinen Textsuchbefehlen (mit
Werkzeugleiste Tasten und oder Tastenkombinationen Aufwärtspfeil und Pfeil nach unten ) nach der ersten
Verwendung Finden | Stellen Sie Suche ein Text oder .

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 Editieren/Verfolgen fenster gibt dir die Fähigkeit, jedem variable-Wert


während des ausführung zu folgen , oder zu Ändern Sie den Wert in der
Mitte (angehalten) programm ausführung (So können Sie testen, wie sich der
neue Wert weiterentwickeln würde). Halt Dann zuerst ausführung Linke
Doppelklick auf dem variable, dessen Wert Sie verfolgen oder ändern möchten.
Um den Wert während programm ausführung einfach zu überwachen, lassen
Sie den Dialog geöffnet und dann einer der Ausführen oder Schritt Befehle -
der Wert wird in aktualisiert Editieren/Verfolgen nach den gleichen Regeln, die für Aktualisierungen in der
VariablenBereich . Um den variable-Wert zu ändern , geben Sie den Wert für das Bearbeitungsfeld ein und
Akzeptieren . Fahren Sie mit ausführung fort (mit einem der Schritt oder Ausführen Befehle), um diesen neuen Wert
von diesem Punkt an zu verwenden (oder Sie können Zurückkehren zum vorherigen Wert).
Bei programm Laden oder Zurücksetzen Beachten Sie, dass alle Der nicht initialisierte Wert-variablen wird auf den
Wert 0 zurückgesetzt und alle nicht initialisiert Zeiger-variablen wird auf 0x0000 zurückgesetzt.
LaborBankBereich
Der LaborBankBereich zeigt einen 5-Volt-'Uno' leiterplatte, der von einem Satz 'I/O' geräte umgeben ist, den Sie
auswählen / anpassen und an den gewünschten 'Uno' pins anschließen können.

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 '^' .

Beachten Sie, dass Digital pins 0 und 1 sind über 1-kOhm-


Widerstände fest mit dem USB-Chip verbunden seriell
Kommunikation mit einem Host-Computer.

Nebenstehend: Digital pins 0-13 erscheint als Simulator pins


0-13 und analoge pins 0-5 als A0-A5. Um auf ein analoge pin
in Ihrem programm zuzugreifen, können Sie sich auf die pin-
Nummer mit einem von zwei gleichwertigen Nummernsätzen
beziehen: 14-19; oder A0-A5 (A0-A5 sind eingebaut) 'const' variablen mit Werten von 14 bis 19). Und nur bei der
Verwendung 'analogRead()' wird eine dritte Option zur Verfügung gestellt - Sie können für diese eine Anweisung
die 'A' Präfix aus der pin-Nummer und verwenden Sie einfach 0-5. Zugriff auf pins 14-19 in Ihrem programm über
'digitalRead()' oder 'digitalWrite()' können Sie einfach auf diese pin-Nummer verweisen, oder Sie
können stattdessen die A0-A5-Aliase verwenden.

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 .

Jeder 'I/O' gerät hat einen oder mehrere pin-


Anhänge, die als a angezeigt werden zwei-
ziffer pin-Nummer (00, 01, 02,…
10,11,12,13 und danach entweder A0-A5
oder 14-19) in einem entsprechenden
Editierfeld. Für die pin-Nummern 2 bis 9
können Sie einfach die einzelne ziffer
eingeben - die führende 0 wird automatisch
angegeben, aber für die pins 0 und 1
müssen Sie zuerst die führende 0 eingeben.
Eingaben sind normalerweise auf der linken
Seite eines 'I/O' gerät und Ausgänge sind
normalerweise zur Rechten ( Raum, der
erlaubt ). Alle 'I/O' geräte reagieren direkt auf
die pin-Stufen und Änderungen auf der pin-
Ebene. Sie werden also auf eine der
Bibliotheken funktionsmodule, die auf ihr
angeschlossenes pins gerichtet sind, oder
auf programmierter ansprechen
'digitalWrite()' (für "bit-banged").
.
Sie können mehrere geräte mit demselben ATmega pin verbinden, sofern dies nicht der Fall ist elektrisch konflikt.
Ein solches konflikt kann entweder von einem 'Uno' als pin erstellt werden 'OUTPUT' Fahren gegen einen stark
gekoppelten (niederohmigen) gerät (z. B. Fahren gegen einen 'FUNCGEN'-Ausgang oder einen 'MOTOR'-Encoder-
Ausgang) oder durch zwei miteinander gekoppelte geräte (z. B. 'PULSER' und 'PUSH') an der gleichen pin befestigt).
Ein solches konflikt wäre in einer realen Hardwareimplementierung katastrophal und daher nicht zulässig und wird
dem Benutzer über ein Popup-Meldungsfeld angezeigt.

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.

Der Rest dieses Abschnitts enthält Beschreibungen für jeden gerät-Typ.

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.

Software Serieller ('SFTSER')

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.

Konfigurierbare SPI Sklave ('SPISLV')

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.

Das gerät erkennt Kantenübergänge an seinem CLK Eingabe entsprechend dem


ausgewählten Modus ( 'MODE0'. 'MODE1'. 'MODE2', oder 'MODE3'), die für den
programmierter SPI-Modus Ihres programm ausgewählt werden muss.

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!

Zweidraht-I2C Sklave ('I2CSLV')

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 .

'1-Wire' Sklave ('OWIISLV')

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]()'.

Digitaler Impulsgeber ('PULSER')

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 Periodendauer und die Pulsbreiten (in Mikrosekunden) können in Bearbeitungsfeldern


eingestellt werden. Die minimal zulässige Periode beträgt 50 Mikrosekunden und die minimale
Impulsbreite 10 Mikrosekunden. Die Polarität kann auch gewählt werden: entweder positive
Vorderflankenimpulse (0 bis 5 V) oder negative Vorderflankenimpulse (5 V bis 0 V).

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').

Analoger Funktionsgenerator ('FUNCGEN')

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')

Dieser 'I/O' gerät emuliert einen positionsgeregelten PWM-angetrieben-Gleichspannungs-Servomotor mit 6 Volt.


Mechanische und elektrische Modellierungsparameter für den Servobetrieb entsprechen denen eines Standard-
Servos HS-422. Das Servo hat eine maximale Drehzahl von ca. 60 Grad in 180 ms . Wenn die Unten links
Kontrollkästchen ist markiert, der Servo wird zu einem kontinuierliche Drehung Servo mit der gleichen maximalen
Geschwindigkeit, aber jetzt setzt die PWM-Pulsbreite die Geschwindigkeit anstatt den Winkel

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.

Piezo Lautsprecher ('PIEZO')

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.

Rutschen Widerstand ('R=1K')

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')

Dieser 'I/O' gerät emuliert eine Schließerstellung Momentane ODER-Verriegelung Einpoliger,


einstufiger (SPST) Taster mit einem Pull-Up-Widerstand (oder Pull-Down-Widerstand) von 10 kOhm.
Wenn für den gerät eine ansteigende Flanke gewählt wird, werden die Druckknopfkontakte zwischen
dem gerät, pin und + 5V mit einem 10-k-Ohm-Pulldown-Anschluss an Masse angeschlossen. Wenn
für die gerät ein Übergang mit abfallender Flanke gewählt wird, werden die Tasterkontakte zwischen
der gerät, pin und Masse verdrahtet, mit einem Zug von 10 kΩ auf + 5 V.

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.

7-Segment LED Ziffer ('7SEG')

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.

Drei mögliche Anwendungen für dieses gerät sind wie folgt:

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).

2) Sie können Experimentieren Sie mit Subsystem-Loopbacks:

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

Editieren/Ansehen (Strg-E) Öffnet die geladene programm zum Anzeigen / Bearbeiten.

Speichern Speichern Der bearbeitete programm-Inhalt geht auf das Original


programm datei zurück.

Speichern Als Speichern den bearbeiteten programm-Inhalt unter einem anderen datei-
Namen.

Nächster ('#include') Vorschub der CodeBereich um das nächste anzuzeigen '#include'


datei

Bisherige Gibt das zurück CodeBereich Anzeige zum vorherigen datei

Ausgang Beendet UnoArduSim, nachdem der Benutzer daran erinnert wurde,


geänderte datei (s) zu speichern.
Finden:

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).

Suche-Text einstellen Aktivieren Sie das Werkzeugleiste Finden-Editierfeld, um den Text zu


(Strg-F) definieren, nach dem als Nächstes gesucht werden soll (und fügt das erste Wort
aus der aktuell hervorgehobenen Zeile in der hinzu CodeBereich oder
VariablenBereich wenn einer von denen hat der Fokus).

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).

Ausführen (F9) Führt das programm aus.

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).

Animieren Stellt automatisch hintereinander folgende programm-Zeilen ein mit


zusätzlicher künstlicher Verzögerung und Hervorhebung der aktuellen
Codezeile. Echtzeitbetrieb und Geräusche gehen verloren.

Zeitlupe Verlangsamt die Zeit um den Faktor 10.

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).

Register-Allocation Weisen Sie den frei-ATmega-Registern funktionsmodul-Locals


anstelle des Stapels zu (erzeugt etwas weniger RAM-Speicher).

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.

Minimal Nur das aktualisieren VariablenBereich Anzeige 4 mal pro Sekunde.

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.

Alles wiederherstellen Alle minimierten untergeordneten Elemente fenster wiederherstellen.

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:

Schnell Hilfe Datei Öffnet die UnoArduSim_QuickHelp PDF datei.

Full Hilfe Datei Öffnet die UnoArduSim_FullHelp PDF datei.

Fehler Korrekturen Wichtige fehler-Korrekturen seit der letzten Version anzeigen.

Änderungen / Zeigen Sie wichtige Änderungen und Verbesserungen seit der letzten Version
Verbesserungen an.

Über Zeigt Version, Copyright an.


'Uno' Leiterplatte und 'I/O' Geräte
Der 'Uno' und das angeschlossene 'I/O' geräte sind alle exakt elektrisch modelliert. Sie können sich zu Hause eine
gute Vorstellung davon machen, wie sich Ihr programme mit der tatsächlichen Hardware verhält, und alle elektrischen
pin konflikte werden gekennzeichnet.

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 .

'I/O' Gerät Timing


Diese virtuellen geräte empfangen eine Echtzeit-Signalisierung von Änderungen, die an ihrem Eingang pins auftreten,
und erzeugen an ihrem Ausgang pins entsprechende Ausgänge, die dann vom 'Uno' abgetastet werden können - sie
sind daher inhärent mit programm ausführung synchronisiert. Der interne 'I/O' gerät timing wird vom Benutzer
eingestellt (z. B. durch Auswahl der baudrate oder Taktfrequenz), und Simulatorereignisse werden so eingerichtet,
dass sie den internen Echtzeitbetrieb überwachen.

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'.

Einschränkungen und nicht unterstützte Elemente

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).

Dynamische Speicherzuweisungen und RAM


Betreiber 'new' und 'delete' unterstützt werden, wie auch native Arduino 'String' objekte, aber nicht direkt
anrufen 'malloc()' . 'realloc()' und 'free()' darauf verlassen sich diese.

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 .

'class' und 'struct' Objekte


Obwohl Polymorphismus und Vererbung (in beliebiger Tiefe) unterstützt werden, a 'class' oder 'struct' kann nur
als maximal definiert werden ein Base 'class' (dh mehrere- Vererbung wird nicht unterstützt). Base-'class'
Konstruktorinitialisierungsaufrufe (über Doppelpunktnotation) in Konstruktordeklarationszeilen werden unterstützt,
jedoch nicht Elementinitialisierungen mit derselben Doppelpunktnotation. Dies bedeutet, dass objekte enthalten
'const' nicht-'static' variablen oder der Referenztyp variablen werden nicht unterstützt (diese sind nur mit
angegebenen Bauzeitelementinitialisierungen möglich)

Ü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.

'union' ist 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.).

Sehen und Geräusche Weitere Informationen zu Einschränkungen finden Sie oben.


Versionshinweise

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.

V2.2 - Jun. 2018


1) Das Aufrufen eines funktionsmodul mit weniger Argumenten als für seine Definition erforderlich war (wenn das
funktionsmodul "vorwärts definiert" wurde, dh wenn es keine vorherige prototyp-Deklarationszeile hatte), führte
dies zu einer Speicherverletzung und einem Absturz.
2) Seit V2.1 Wellenformen war nicht aktualisiert worden während Ausführen (nur bei Haltoder nach einem
Schritt) - in Ergänzung, VariablenBereich Die Werte wurden während längerer Zeit nicht aktualisiert Schritt
Operationen.
3) Ein kleinerer Wellenform Seit V2.0 bestehende Probleme beim Scrollen und Zoomen wurden behoben.
4) Schon in frühen Versionen war der Zurücksetzen bei t = 0 mit einem PULSER oder FUNCGEN, dessen
Periode sein allerletzter sein würde Zyklus vor t = 0 nur ein sein teilweise Zyklus, resultierte in seiner
Wellenform nach dem t = 0 wird um diesen (oder den verbleibenden) Teilzyklusbetrag von seiner wahren
Position verschoben, entweder nach rechts oder nach links (jeweils).
5) Einige Probleme mit der Syntaxfarben-Hervorhebung in behoben Editieren/Ansehen .
5) Seit V2.0 funktionierte das Klicken auf erweitern eines objekt in einem array von objekte nicht ordnungsgemäß.
6) 'delay(long)' wurde korrigiert zu sein 'delay(unsigned long)' und 'delayMicroseconds(long)'
wurde korrigiert zu sein 'delayMicroseconds(unsigned int)' .
7) Ab V2.0 wurde funktionsmodule mit 'attachInterrupt()' wurden für diesen Zweck nicht als gültig geprüft
(funktionsmodule) 'void' zurückkehren und keine Aufrufparameter haben).
8) Der Einfluss von 'noInterrupts()' auf funktionsmodule 'micros()'. 'mills()'. 'delay()' .
'pulseInLong()'; seine Auswirkungen auf 'Stepper::step()' und auf 'read()' und 'peek()'
Zeitüberschreitungen; auf allen seriellen RX-Empfang und auf 'Serial' Übertragung wird nun genau
wiedergegeben.
9) Die für Benutzerinterrupt-Routinen aufgewendete Zeit wird jetzt in dem von zurückgegebenen Wert
berücksichtigt 'pulseIn()' die Verzögerung von 'delayMicroseconds()' und in der Position der Kanten in
angezeigt Pin Digital Wellenformen .
10) Ruft an objekt-Mitglied funktionsmodule, die Teil größerer komplexer Ausdrücke waren oder sich selbst
innerhalb von funktionsmodul-Aufrufen mit mehreren komplexen Argumenten befanden, z.
'myobj.memberfunc1() + count/2' oder 'myfunc(myobj.func1(), count/3)'hätte falsche Werte
zum Zeitpunkt ausführung aufgrund fehlerhafter Stack-Space-Zuordnungen berechnet / übergeben.
11) Arrays des Zeigers variablen funktionierte ordnungsgemäß, hatte jedoch fehlerhafte angezeigte Werte in der
VariablenBereich.
12) Wenn dynamisches arrays des einfachen Typs mit erstellt wurde 'new' , nur das erste Element hatte eine
(defailt) -Initialisierung auf den Wert 0 erhalten - jetzt tun alle Elemente.
13) 'noTone()', oder das Ende eines endlichen Tones setzt die pin nicht mehr zurück (sie bleibt erhalten)
'OUTPUT' und geht 'LOW' ).
14) 'SERVO' geräte mit kontinuierlicher Rotation ist jetzt bei 1500 usecs Impulsbreite perfekt stationär.
15) Das Aufrufen von SdFile :: ls () (Verzeichnis der SD-Karten) funktionierte ordnungsgemäß, zeigte jedoch
einige fehlerhafte Block-SPI-Übertragungen in Waveforms fenster.

V2.1.1– Mar. 2018

1) Inkonsistenzen in nicht-englischen Sprachumgebungen behoben, in denen die Sprache gespeichert wurde


[Link], mit angezeigten Radiosprachentasten im Präferenzen Dialog und mit passenden übersetzten
Zeilen in [Link]
2) Belegungen mit 'new' Akzeptieren Sie jetzt eine ganzzahlige array-Dimension, die keine Konstante ist.
3) Klicken in der VariablenBereich Bei erweitern würde ein mehrdimensionales array ein überflüssiges
Leerzeichen anzeigen '[]' Klammerpaar .
4) Array-Elementreferenzen mit nachfolgenden überflüssigen Zeichen (z. B. 'y[2]12') wurden zum Zeitpunkt
von Analysieren nicht als Fehler erkannt (die zusätzlichen Zeichen wurden einfach ignoriert).

V2.1– Mar. 2018


1) Ein fehler in den neuen Versionen V2.0.x führte dazu, dass der Fenster-Heap bei jedem Update in der Version
mitwuchs VariablenBereich -- nach dem Millionen von Updates (viele Minuten von ausführung), kann ein Absturz
führen.
2) Rufe an 'static'Mitglied funktionsmodule mit Doppelpunkt '::' Notation zu Analysieren im Inneren
fehlgeschlagen 'if()', 'while()'. 'for()', und 'switch()' Klammern und wenn innerhalb von
Ausdrücken als Argumente für funktionsmodul-Aufrufe oder array-Indizes verwendet werden.
.V2.0.2, Februar 2018
1) Ein in V2.0 eingeführtes fehler verursachte eine Datei | Laden Absturz wenn ein '#include' verwies auf ein
fehlendes oder leeres datei
2) Das 'I/)' Name 'One-Shot' wurde anstelle des älteren 'Oneshot' erwartet; beide werden jetzt akzeptiert.

V2.0.1– Jan. 2018


3) In nicht englischsprachigen Sprachumgebungen 'en' wurde falsch als ausgewählt in angezeigt
PräferenzenUmständliches Umschalten auf Englisch ist unpraktisch (Auswahl der Auswahl und erneute Auswahl
erforderlich).
4) Es war dem Benutzer möglich, einen Gerät-pin-Eingabefeldwert in einem unvollständigen Zustand (wie 'A_') zu
belassen und die 'DATA'-Bits eines 'SRS:V' unvollständig zu belassen.
5) Die maximale Anzahl der Analoge-Slider war auf 4 begrenzt (jetzt auf 6 korrigiert).
6) UnoArduSim besteht nicht mehr darauf '=' erscheint in einer array-Aggregatinitialisierung.
7) UnoArduSim hatte darauf bestanden, dass das Argument "inverted_logic" bereitgestellt wurde
'SoftwareSderial()'.
8) Bit-Shift-Operationen lassen jetzt länger als die Größe des verschobenen variable zu.

V2.0 - Dez. 2017


1) Alle funktionsmodule, die als deklariert wurden 'unsigned' hatte trotzdem Werte zurückgegeben, als ob sie
waren 'signed' . Dies hatte keine Auswirkungen, wenn die 'return' Wert wurde einem zugewiesen
'unsigned' variable, hätte aber einen unsachgemäßen verursacht Negative Interpretation, wenn es MSB == 1
hatte, und es wurde dann einem zugewiesen 'signed' variable, oder in einer Ungleichheit getestet.
2) Analoge Sliders erreichten nur ein Maximum 'analogRead()' Wert von 1022, nicht der korrekte 1023.
3) Ein fehler, das in V1.7.0 versehentlich in Logik eingeführt wurde, um die Handhabung des SPI-Systems zu
beschleunigen, für das SCK pin SPI-Transfers verursacht hat 'SPI_MODE1' und 'SPI_MODE3' nach dem ersten
übertragenen Byte zu scheitern (es folgt ein zusätzlicher zusätzlicher SCK-Übergang). Das Aktualisieren einer
'SPISLV'-Edit-'DATA'-Box für übertragene Bytes wurde ebenfalls verzögert.
4) Das Colored LED gerät listete 'B' (für Blau) nicht als Farboption auf (obwohl es akzeptiert wurde).
5) Einstellungen für 'SPISLV' und 'I2CSLV' geräte wurden nicht für den Benutzer gespeichert 'I/O' Geräte datei.
6) Kopieren 'Servo' Instanzen sind aufgrund eines Fehlers fehlgeschlagen 'Servo::Servo(Servo
&tocpy)' Copy-Constructor-Implementierung.
7) Außer Reichweite '[Link]()' Die Werte wurden ordnungsgemäß als Fehler erkannt,
jedoch waren die angegebenen Grenzwerte, die den Fehlernachrichtentext begleiteten, falsch.
8) Ein gesetzlicher baudrate von 115200 wurde nicht akzeptiert wenn von einem geladen 'I/O' Geräte Text datei.
9) Die durch einen angeschlossenen Analoger Schieberegler gerät verursachte elektrische pin konflikte wurde
nicht immer erkannt.
10) In seltenen Fällen wird ein fehlerhafter String-Zeiger (mit fehlendem String-0-Terminator) an a übergeben
'String' funktionsmodul kann dazu führen, dass UnoArduSim abstürzt.
11) Die CodeBereich könnte markieren die aktuelle Analysieren-Fehlerzeile in der falsch programm-Modul (wann
'#include' wurde benutzt).
12) Das Laden eines 'I/O' Geräte datei mit einem gerät, der (falsch) antreiben gegen 'Uno' pin 13 hätte,
verursachte ein programm-Hang beim Popup der Fehlermeldung.
13) UnoArduSim hatte versehentlich erlaubt Der Benutzer kann nicht-hexadezimale Zeichen in den erweitert-TX-
Puffer fenster für SPISLV und I2CSLV einfügen.
14) Deklarationszeileninitialisierungen fehlgeschlagen, als der Wert auf der rechten Seite der Wert war 'return'
Wert von einem objekt-Member-funktionsmodul (wie in 'int angle = [Link]();').
15) 'static' Mitglied variablen explizit haben 'ClassName::' Präfixe wurden nicht erkannt, wenn sie ganz
am Anfang einer Zeile vorkamen (z. B. bei einer Zuordnung zu einer Basis-'class' variable).
16) Berufung 'delete' auf einem Zeiger, der von erstellt wurde 'new' wurde nur erkannt, wenn die
funktionsmodul-runde-klammer-Notation wie in verwendet wurde 'delete(pptr)'.
17) UnoArduSim-Implementierung von 'noTone()' hat fälschlicherweise darauf bestanden, dass ein pin-
Argument angegeben wird.
18) Änderungen, die zu einer Erhöhung der globalen 'RAM'-Bytes in einer verwendeten programm führten
'String' variablen (via Editieren/Ansehen oder Datei | Laden ), könnte in diesem globalen 'Uno' - Raum
aufgrund der Heap - Löschung des 'String' objekte gehört auf die alte programm, während der Heap der neuen
programm (falsch) verwendet wird. In einigen Fällen kann dies zu einem Absturz der programm führen. Obwohl
eine zweite Laden oder Analysieren das Problem gelöst hat, wurde diese fehler endlich behoben.
19) Die Rückgabewerte für [Link] () und [Link] () waren beide bei 0
hängen geblieben - diese wurden nun behoben.

V1.7.2– Feb. 2017


1) Interrupts an pin 2 wurden auch (unbeabsichtigt) durch Signalaktivität an pin 3 (und umgekehrt) ausgelöst.

V1.7.1– Feb. 2017


1) Funktionsmodul 'delayMicroseconds()' produzierte eine Verzögerung in Milli-Sekunden (1000-mal zu
groß).
2) Explizite type-cast eines 'unsigned' variable zu einem längeren Integer-Typ ergab eine falsche ('signed')
Ergebnis.
3) Hex-Literale größer als 0x7FFF sind nun 'long' per definitionem, und so wird es jetzt generieren 'long'
resultierende arithmetische Ausdrücke, an denen sie beteiligt sind.
4) Ein fehler, das versehentlich mit V1.7.0 eingeführt wurde, verhinderte den alternativen C ++ - Stil type-cast von
numerischen Literalen (z. B. '(long)1000*3000' wurde nicht akzeptiert).
5) 'Serial' nimmt seine vielen Bytes im 'Uno'-RAM nicht mehr auf, wenn es vom Benutzer programm nie
benötigt wird.
6) Die vom Benutzer deklarierte globale variablen belegt im 'Uno'-RAM keinen Platz mehr, wenn sie niemals
tatsächlich verwendet wird.
7) Single variablen als deklariert 'const',, 'enum' Mitglieder und Zeiger auf String-Literale, benötigen im 'Uno'-
RAM keinen Platz mehr (zur Kompatibilität mit Arduino)
8) RAM-Bytes erforderlich für '#include' Die eingebauten Bibliotheken stimmen jetzt weitgehend mit den
bedingten Arduino-Kompilierungsergebnissen überein.
9) Verwenden 'new' auf einem Zeiger war die tatsächliche Deklarationszeile ausgefallen (nur später) 'new'
Zuordnung zum Zeiger funktionierte).
10) Ein fehler wurde behoben, bei dem eine "ausstehende" Show eines SD-Plattenverzeichnisses ein programm-
Hang verursachen konnte.

V1.7.0– Dez. 2016


0) Einige Probleme beim Umgang mit Benutzerinterrupts wurden behoben:
a) Unterbricht 0 und 1 Kanten, die während eines Arduino funktionsmodul aufgetreten sind Blöcke während des
Wartens (wie 'pulseIn()'. 'shiftIn()'. 'spiTransfer()'. 'flush()'. und 'write()') hatte bei der
Unterbrechung des Interrupts einen Fehler im ausführung-Fluss verursacht
b) Mehrere Exemplare des lokalen variablen eines unterbrochenen funktionsmodul hatten erschienen in der
VariablenBereich (eine Kopie pro Interrupt-Return) und dies wurde in V1.6.3 behoben, die anderen Interrupt-
Probleme blieben jedoch bestehen.

c) Funktionsmodul 'delayMicroseconds()' verursachte keine Verzögerung, wenn innerhalb einer


Benutzerinterruptroutine aufgerufen wurde.
d) Aufrufe zur Sperrung von funktionsmodule gefällt 'pulseIn()' von Innerhalb eine Unterbrechung Routine
hatte nicht gearbeitet.
1) Ein in V1.6.3 eingeführtes fehler führte zum Verlust der Wertaktualisierung im VariablenBereich während der
Ausführung, wenn sich die Werte tatsächlich veränderten (dies geschah erst nach zwei oder mehr Halt oder Menü
VarAktualisieren Benutzeraktionen). Darüber hinaus, wenn ein Ausführen Dort danach durchgeführt wurde
Reduktion zulassen war ausgelöst worden VariablenBereich gelegentlich nicht neu gezeichnet (alte Werte und
local-variablen könnten dort bis zur nächsten Schritt erscheinen).
2) Das CodeBereich Hervorhebung des Verhaltens der Schritt Uber Befehl könnte irreführend erscheinen
'if()-else' Ketten - das wurde nun behoben (obwohl die tatsächliche Schrittfunktionalität korrekt war).
3) Funktionsmodul 'pulseIn()' hatte das Timeout in Millisekunden statt in Mikrosekunden falsch eingestellt - es
wurde auch das Timeout nicht ordnungsgemäß neu gestartet, wenn die Übergänge zu inaktiven und aktiven
Ebenen zum ersten Mal sichtbar wurden.
4) Verwenden Sie HEX-Literale zwischen 0x8000 und 0xFFFF in Aufträgen oder Arithmetik mit 'long' Die
Ganzzahl variablen ergab falsche Ergebnisse ungeprüfte Vorzeichenerweiterung.
5) Weitergabe an a 'float' von irgendwelchen 'unsigned' Integer-Typ mit einem Wert mit MSB = 1 hat
aufgrund eines Fehlers falsche Ergebnisse ergeben 'signed' Deutung.
6) Alles 'bit_()' funktionsmodule akzeptiert jetzt auch Operationen auf 'long' -Die Größen variablen und
UnoArduSim prüfen auf ungültige Bitpositionen (die außerhalb der variable-Größe liegen würden).
7) Eine ungültige Eingabe in das Editierfeld 'Pulse' (Breite) auf einem 'PULSER' Gerät verursachte eine
Beschädigung des 'Period'-Werts (bis der 'Period'-Bearbeitungseintrag des nächsten Benutzers dies feststellt).
8) Löschen eines 'PULSER' oder 'FUNCGEN' gerät mit der Das Menü Konfigurieren löschte das periodische
Signal des pin nicht, dass es gefahren wurde (ein Zurücksetzen ist nicht mehr erforderlich).
9) Die Fähigkeit, eine 1-D zu initialisieren 'char' array mit einer Anführungszeichenfolge fehlte (z. B. 'char
strg[] = “hello”; ').
10) Die Hex-Anzeige im erweitert 'SERIAL'- oder 'SFTSER'-Monitor fenster zeigte das falsche höchstwertige
Zeichen für Bytewerte über 127.
11) Das Wellenform fenster spiegelte keine vom Benutzer vorgenommenen Änderungen wider 'analogWrite()'
wenn der Ein neuer Wert war entweder 0% oder 100% Einschaltdauer.
12) Die Implementierung von '[Link]()' wurde jetzt behoben.
13) EIN [Link] datei mit mehr als 3 Wörtern in einer Zeile (oder Leerzeichen in der 'I/O' Geräte datei
Name) kann aufgrund eines fehlerhaften internen Zeigers zum Absturz führen.
14) Die letzte Zeile eines 'I/O' Geräte datei wurde nicht akzeptiert, wenn dies nicht der Fall war ende mit einem
Zeilenvorschub.
15) Das Hinzufügen von mehr als vier Analoge-Slidern führte zu einem stillen fehler, der LED 'I/O'-gerät-Zeiger
überschrieb
16) Beginnend mit V1.6.0 tastet analoge wellenform für den erste hälfte von jedem Dreieck wellenform waren alle
Null (aufgrund eines fehler in der wellenform-Tabellenberechnung).
17) Wiederholt machen Ausführen Dort Wenn auf einer haltepunkt-Linie nicht mehr mehrere Klicks pro Vorschub
erforderlich sind.
18) Das Übergeben von Adressausdrücken an einen Parameter funktionsmodul array wurde von der Analysator
nicht akzeptiert.
19) Das rekursive funktionsmodule, das Ausdrücke zurückgab, die Zeiger oder array-De-Referenzen enthielten,
lieferte falsche Ergebnisse, da die "ready" -Flags für diese Komponentenausdrücke zurückgesetzt wurden.
20) Berufung 'class' member-funktionsmodule durch ein beliebiger objekt-Zeiger variable oder ein
Zeigerausdruck hat nicht gearbeitet.
21) Benutzer funktionsmodule, der objekte nach Wert zurückgegeben hat, hat seinen Wert nur beim ersten Aufruf
von funktionsmodul erfolgreich zurückgegeben ob Sie gaben einen namenlos konstruierten objekt zurück (wie
'String("dog")' - Bei nachfolgenden Anrufen wurde die Rückgabe aufgrund eines "Ready" -Flags
übersprungen.
22) Es gab keine Sicherheitsvorkehrungen, um den Befehl zu verhindern Fenster | 'Serial' Überwachen Sie
fHinzufügen eines neuen 'Serial' gerät, als es eigentlich keinen Platz dafür gab.
23) Wenn das Hinzufügen eines Fixed-pin-gerät (wie 'SPISLV') eine pin-konflikt-Popup-Meldung verursacht, wird
die LaborBankBereich Neuzeichnen könnte ein Duplikat "Geist" gerät zeigen überlagert den 'I/O' gerät ganz
rechts (bis zum nächsten Neuzeichnen).
24) Einige Probleme mit unzuverlässigen 'PIEZO'-Sounds für nicht periodische pin-Signale wurden behoben.
25) 'PROGMEM' variablen muss jetzt auch explizit als deklariert werden 'const' Arduino zustimmen.
26) "Kein Heap-Speicherplatz" wurde fälschlicherweise als Fehler ausführung gekennzeichnet, wenn ein
'[Link]()' konnte den genannten datei oder einen nicht finden 'openNextFile()' erreichte das letzte datei
im Verzeichnis.
27) Ein Analysator fehler hat falsches Schließen des geschweifte klammer akzeptiert '}'.
28) Ein fehler mit VariablenBereich Entfernungen nach Member-objekt-Konstruktor-Return wurden behoben
(fehler gilt nur für objekte, die selbst andere objekte als Member enthalten).

V1.6.3 - Sept. 2016


1) Das lokale variablen eines unterbrochenen funktionsmodul wurde nicht aus dem System
entferntVariablenBereich bei Unterbrechung funktionsmodul, was zu mehreren Kopien führt dort erscheint bei
Interrupt-funktionsmodul return (und einer eventuellen eventuellen ausführung-Fehler oder Absturz).
2) Das Wellenform fenster spiegelte keine programmatischen Änderungen in wider 'analogWrite()' auf ein
neues Tastverhältnis von 0% oder 100%.
3) Die Hex-Anzeige im erweitert 'SERIAL'- oder 'SFTSER'-Monitor fenster zeigte das falsche MSB-Zeichen für
Bytewerte über 127 an.

V1.6.2 - Sept. 2016


1) Funktionsmodul-Aufrufe mit der falschen Anzahl oder dem falschen Argumenttyp hatten keine entsprechende
Analysieren-Fehlermeldung (nur die Eine generische Meldung "Kein gültiger Bezeichner" erschienen).
2) Das Werkzeugleiste Die Reset-Taste funktioniert jetzt genauso wie die 'Uno' leiterplatte-Reset-Taste.
3) Analysieren-Fehlertext wird nach 16 Zeichen nicht mehr ohne Ellipse abgeschnitten.

V1.6.1– Aug. 2016


1) In V1.6 eine 'Uno' leiterplatte Version in der [Link] datei, der sich vom Standardwert der Version 2
unterschied, verursachte beim Start eine Ausnahme (aufgrund eines nicht initialisierten Ereignisses pin 13).
2) Ändern des Wertes eines variable durch Doppelklick in VariablenBereich Fehlerhafte Popup-Fenster "Keine
Speicherzuordnung" (für programme mit beliebigem Benutzer) 'class').
3) 'SoftwareSerial' Zugriff nicht erlaubt 'write(char* ptr)' und 'write(byte* ptr, int size)'
funktionsmodule wegen fehlerhafter funktionsmodul-Überlasterkennung.
4) Problem mit automatischer Einbeziehung des entsprechenden ".cpp" datei für einen isolierten .h
"Bibliothekstyp" behoben. '#include'.

V1.6– Juni 2016


1) In V1.5 Automatische Einrückung der 'Enter'-Eingabe Editieren/Ansehen (bei Eingabe einer neuen Zeile) war
verloren gegangen.
2) Der Nachweis von pin steht konflikt mit mit angeschlossenem stark leitendem externen 'I/O' geräte wurde jetzt
hinzugefügt 'Serial' pin 1, auf SPI pins SS, MOSI und SCK, auf I2C pins SCL und SDA (alle wenn die
entsprechenden 'begin()' genannt wird) und auf jedem deklariert 'SoftwareSerial' TX pin.

V1.5.1 - Juni 2016


1) In V1.5 Die neuen, an das Thema anpassbaren Syntax Markieren-Farben wurden nicht jedes Mal
ordnungsgemäß zurückgesetzt Editieren/Ansehen wurde geöffnet, und so waren (mit einem weißen Hintergrund)
nur jedes zweite Mal korrekt.
2) Unterbrechen 'RISING' und 'FALLING' Empfindlichkeiten waren gewesen Gegenteil auf die tatsächliche
Auslösekantenpolarität.

V1.5 - Mai 2016


1) Ein in V1.4.1 eingeführter fehler verhinderte das Weiterleiten von bloßen String-Literalen an Mitglied
funktionsmodule, das a erwartet hat 'String' objekt wie in '[Link]("Hey")' .
2) Ein fehler im Original SD Die Implementierung von UnoArduSim ist nur zulässig SD Zugriff über Anrufe an
'read()' und 'write()' (Zugang über 'Stream' funktionsmodule wurde verhindert).
3) 'R=1K' Schiebeschalter wurden beim Verschieben des Schiebereglers nicht ordnungsgemäß neu gezeichnet.
4) Stornieren Im Confirm-Speichern datei-Dialog sollte das Beenden der Anwendung verhindert werden.
5) Ein fehlendes Abschlussangebot oder das Schließen von '>' -runde-klammer für einen Benutzer datei
'#include' würde einen Hang verursachen.
6) Ein fehler in Syntax-Hervorhebung von behoben 'String' und Benutzer 'class' oder 'struct'und
erweiterte Hervorhebung zum Einschließen Konstruktor funktionsmodul ruft auf.
7) Kleinere Probleme in behoben Editieren/Ansehen mit Textänderungen / Hervorhebung und der
Zurücknehmen Taste.

V1.4.3 - April 2016


1) Verwenden Konfigurieren | 'I/O' Geräte Wenn Sie ein neues geräte hinzufügen und anschließend eines der
neu hinzugefügten geräte entfernen, kann es beim Zurücksetzen zu einem Absturz kommen oder ein anderer gerät
funktioniert nicht mehr.
2) A ändern 'String' variable durch Doppelklick in die VariablenBereich fehlgeschlagen (das neue 'String'
wurde falsch gelesen).
3) Änderungen an Pin an 'FUNCGEN' und 'PULSER' geräte wurden erst erkannt, nachdem ein Reset
durchgeführt wurde.
V1.4.2 - März 2016
1) V1.4.1 hatte eingeführt eine unglückliche Analysieren fehler, die Zuweisungen mit einbezieht 'class' objekte
(einschließlich 'String' ).
2) Es wurde ein unvollständiger fehler-Fix in V1.4.1 verursacht 'unsigned' Werte des Typs 'char' um als
ASCII-Zeichen und nicht als ganzzahlige Werte zu drucken.
3) Aufrufargumente für komplexe Elementausdrücke funktionsmodul wurden nicht immer als gültige
Übereinstimmungen mit funktionsmodul-Parametern erkannt.
4) Alles ganzzahlige Literale und Ausdrücke waren zu groß dimensioniert (bis 'long') und daher spiegelt
ausführung nicht die tatsächlich Überläufe (zu negativ), die in Arduino beim Hinzufügen / Multiplizieren von
Operationen auftreten können 'int' Größenwerte.
5) Ausdrücke, die eine Mischung aus 'signed' und 'unsigned' Ganzzahltypen wurden nicht immer korrekt
behandelt (der 'signed' Wert würde als falsch angesehen 'unsigned' ).
6) In Fällen von pin-konflikt können Fehlermeldungen mit dem Wert "value =" veraltete pin-Werte anzeigen, selbst
wenn ein Zurücksetzen von einem vorherigen konflikt stammt, das der Benutzer bereits gelöscht hat.

V1.4.1 - Januar 2016


1) Anrufe an 'print(char)' druckt jetzt korrekt als ASCII-Zeichen (anstelle von numerischen Werten).
2) Die Interrupt-Antwort ist jetzt standardmäßig aktiviert, wenn 'attachInterrupt()' heißt, so gibt es keine
mehr brauche in deiner 'setup()' Aufruf der Freigabe funktionsmodul 'interrupts()' .
3) mehrere '#include' Instanzen von Benutzer-dateien aus in einem datei werden nun korrekt behandelt.

V1.4 - Dezember 2015


1) EIN langjährig fehler hat falsch gekennzeichnet a geteilt durch Null Bedingung, wenn durch einen Bruchwert
kleiner als Eins dividiert wird.
2) Fest 'SoftwareSerial' (was unbeabsichtigt durch einen Zusatz unterbrochen wurde 'class'
-Mitgliederüberprüfung in V1.3 Veröffentlichungen).
3) funktionsmodul-Aufrufe am Ende der Zeile mit einem fehlenden Semikolon wurden nicht abgefangen und
veranlassten die Analysator, die nächste Zeile zu überspringen.
4) Ein schlecht formatiertes 'I/O' Geräte Text datei hat eine falsche Fehlermeldung angezeigt.
5) Analysieren Fehler in der Hervorhebung der falschen (benachbarten) Zeile in mehrzeiligen Ausdrücken und
Anweisungen wurde behoben
6) Logisches Testen von Zeigern mit der 'not' ( ! ) Operator wurde invertiert.

V1.3 - Oktober 2015


1) Unsachgemäßer Umgang mit dem Notizblock variablen verursacht gelegentlich " Die maximale
Schachtelungstiefe wurde überschritten "Analysieren-Fehler.
2) Klammern in einfachen Anführungszeichen, geschweifte klammern, Semikolons, parentheses Zeichenfolgen in
Anführungszeichen und Zeichen mit Escape-Zeichen wurden nicht ordnungsgemäß behandelt.
3) Ein Array mit einer leeren Dimension und keiner Initialisierungsliste führte zu einem RESET-Hang, und arrays
mit nur einem einzelnen Element wurde nicht verboten (und verursachte deren fehlerhafte Interpretation als
ungültig initialisierten Zeiger).
4) Analysieren-Fehler würden manchmal markieren die falsche (benachbarte) Zeile sein.
5) Übergabe eines Zeigers an ein Nicht-'const' zu einem funktionsmodul, der einen Zeiger auf a akzeptiert
'const' war abgelehnt worden (statt umgekehrt).
6) Initializer-Ausdrücke erben nicht ordnungsgemäß 'PROGMEM' Qualifier der variable werden initialisiert
7) 'PROGMEM' Für deklarierte variablen wurde ihre Byte-Größe falsch gezählt zweimal gegen ihre 'Flash'-
Speicherzuordnung während des Analysieren-Prozesses.
8) Eingabe in die 'Send' Editierfeld eines 'I2CSLV' würde manchmal einen Absturz verursachen 'sscanf' fehler.
9) Laden eines neuen programm mit einem neuen 'I/O' Geräte datei in seinem Verzeichnis könnte zu irrelevanten
pin steht konflikt mit führen alt pin Richtungen.
10) Die Verarbeitung der verstrichenen seriellen Zeichen wurde nicht ordnungsgemäß auf empfangene, sondern
nicht auf übertragene Zeichenfolgen in den (größeren) 'Serial Monitor'-Puffern fenster angewendet.
11) 'while()' und 'for()' Schleifen mit vollständig leeren Körpern, wie z 'while(true);' oder
'for(int k=1;k<=100;k++);' hat die Analysator (mit einer Warnmeldung) übergeben, ist aber zum Zeitpunkt
der ausführung fehlgeschlagen.

V1.2 - Juni 2015


1) Der einfachste Benutzer funktionsmodule, der entweder angerufen hat 'digitalRead()' oder zu
'analogRead()' oder 'bit()' Ihr (allererster) deklarierter lokaler variable (falls vorhanden) konnte beschädigt
werden, weil nicht genügend Speicherplatz für den funktionsmodul-Scratchpad vorhanden war (wenn nur zwei
Scratchpad-Bytes zu Beginn des funktionsmodul-Stacks zugewiesen wurden). Alle numerischen Ausdrücke in
einem funktionsmodul reichen aus, um eine 4-Byte-Zuweisung des Scratchpads zu veranlassen, und dieses
Problem wird somit vermieden. Dieses unglückliche fehler gibt es seit der ursprünglichen Version V1.0.
2) Funktionsmodule das sind 'void' mit einem frühen expliziten 'return' und nicht-'void' funktionsmodule mit
mehr als einem 'return' Aussage, würde ausführung bei der durchfallen Schließung von geschweifte
klammer (wenn es erreicht wurde).
3) Irgendein 'return' Aussagen im Inneren 'if()' Kontexte, bei denen geschweifte klammern fehlte, führten
zu einem fehlerhaften Ziel für die Rückkehr zum Anrufer.
4) 'PULSER' und 'FUNCGEN' Pulsbreiten oder Perioden mit dem Wert 0 können zum Absturz führen (0 ist jetzt
nicht zulässig).
5) Wo es keine geschweifte klammern gab, 'else' Fortsetzungen nach einem 'if()' funktionierte nicht, wenn
sie a folgten 'break' . 'continue' , oder 'return' .
6) Wann mehrere 'enum' Nutzer- Erklärungen wurden abgegeben Konstanten in allen außer dem
allerersten definiert 'enum' fehlerhaft erzeugt “ 'enum' Nichtübereinstimmung ” Analysieren-Fehler (dieser
fehler wurde in V1.1 eingeführt).
7) Ein NULL-Bezeichner für den allerletzten Parameter eines funktionsmodul prototyp hat einen Analysieren-Fehler
verursacht.
8) Ausführen Dort Auf komplexen Linien festgelegte Haltepunkte wurden nicht immer korrekt behandelt (und
könnten daher verfehlt werden).
9) 'HardwareSerial' und 'SoftwareSerial' hat einen TX-Puffer mit privater Implementierung verwendet,
der auf Zurücksetzen nicht bereinigt wurde (daher könnten letzte Zeichen übrig bleiben).
10) Das Analysator konnte nicht nach ungültigem Bit-Flipping von suchen 'float'und Zeigerarithmetik mit
illegalen Operatoren versucht.

V1.1 - März 2015

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

V1.0.2 - Aug. 2014


A0-A5 pins am Umfang des 'Uno' leiterplatte wurde korrigiert .

V1.0.1 - Jun. 2014


Es wurde ein Fehler behoben, bei dem ein fehler die Schnittpasten abgeschnitten hat, die länger als das Dreifache
der Anzahl der Bytes im ursprünglichen programm waren.

V1.0 - Erstveröffentlichung Mai 2014


Änderungen / Verbesserungen

V2.3 Dezember 2018


1) Das Tracking wurde jetzt auf der Seite aktiviert Werkzeugleiste 'I/O____S' Schieberegler für ununterbrochen
und glatt Skalierung von 'I/O'-gerät-Werten, die der Benutzer mit dem Buchstaben 'S' versehen hat.
2) Ein neuer 'LED4' 'I/O' gerät (Reihe von 4 LEDs an 4 aufeinander folgende pin-Nummern) wurde
hinzugefügt.
3) Ein neuer '7SEG' 'I/O' gerät (7-Segment-LED ziffer mit hexadezimalen-Code an 4 aufeinander folgende pin-
Nummern und mit Aktiv-Niedrig CS * Eingang auswählen) wurde hinzugefügt.
4) Ein neuer 'JUMP' 'I/O' gerät, der wie eine Drahtbrücke zwischen zwei 'Uno' pins wirkt, wurde hinzugefügt.
Dies ermöglicht eine 'OUTPUT' pin mit einem verdrahtet werden 'INPUT' pin (mögliche
Verwendungsmöglichkeiten dieser neuen Funktion finden Sie oben im gerät).
5) Ein neuer 'OWISLV' 'I/O' gerät wurde hinzugefügt und der Drittanbieter '<OneWire.h>' Bibliothek kann jetzt
mit verwendet werden '#include' So kann der Benutzer programme die Schnittstelle zu einem kleinen Teil des
'1-Wire'-Busses geräte testen.
6) Das Ausführen Speisekarte Zurücksetzen Befehl ist jetzt mit der verbunden Zurücksetzen Taste.
7) Für mehr Klarheit wann Künstliches 'loop()' verzögern wird unter ausgewählt Optionen Menü, ein Exploit
'delay(1)' Der Aufruf wird am unteren Ende der Schleife hinzugefügt 'main()' - Dies ist nun eine echte
Verzögerung, die durch angehängte Benutzerinterrupts unterbrochen werden kann 'Uno' pins 2 und 3.
8) Die elektrische pin steht konflikt mit Open-Drain oder CS-Auswahl, 'I/O' geräte (z. B. I2CLV oder SPISLV) ist
jetzt deklariert Nur wenn eine echte konflikt zum Zeitpunkt der ausführung auftritt, anstatt einen sofortigen
Fehler zu verursachen, wenn der gerät zum ersten Mal angeschlossen wird.
9) Funktionsmodul 'pulseInLong()' ist jetzt auf 4-8 Mikrosekunden genau, um mit Arduino übereinzustimmen
(die vorherige Genauigkeit betrug 250 Mikrosekunden).
10) Fehler, die bei der Initialisierung eines globalen variable jetzt markieren und des variable im angezeigt wurden
CodeBereich.

V2.2 Juni 2018


1) Auf Speichern entweder von der Präferenzen Dialog oder von Konfigurieren | 'I/O' Geräte, Die
"[Link]" datei wird nun im Verzeichnis der aktuell geladenen programm gespeichert - jedes weitere Datei
| Laden lädt dann automatisch die Datei "[Link]" datei zusammen mit den angegebenen IODevs datei
aus demselben Verzeichnis programm.
2) Funktionsmodul 'pulseInLong()' war fehlt, wurde aber jetzt hinzugefügt (es beruht auf 'micros()' für
seine Messungen).

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.

V2.1 März 2018


1) Angezeigt VariablenBereich Die Werte werden jetzt nur alle 30 Millisekunden aktualisiert (und die Option
"Minimal" kann diese Aktualisierungsrate dennoch weiter reduzieren), aber die VarAktualisieren Die Menüoption
zum Verbot der Update-Reduzierung wurde entfernt.
2) Operationen, die nur auf einen Teil der Bytes eines variable-Werts abzielen (z. B. solche, die über Zeiger
gemacht werden), bewirken jetzt, dass die Änderung des variable-Werts im Wert angezeigt wird VariablenBereich
Anzeige.

V2.0.1 Januar 2018


1) Undokumentiertes Arduino funktionsmodule 'exp()' und 'log()' sind jetzt hinzugefügt worden.
2) 'SERVO' geräte kann jetzt kontinuierlich gedreht werden (die Impulsbreite regelt also die Geschwindigkeit
anstelle des Winkels).

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.

V2.0 Sept. 2017


1) Die Implementierung wurde auf QtCreator portiert, so dass die grafische Benutzeroberfläche einige geringfügige
visuelle Unterschiede aufweist, jedoch keine funktionalen Unterschiede außer einigen Verbesserungen:
a) Die Statuszeile am unteren Rand des Main fenster und innerhalb des Editieren/Ansehen Dialog wurde
verbessert und eine markieren-Farbkodierung hinzugefügt.
b) Der vertikale Abstand zwischen CodeBereich und VariablenBereich ist jetzt durch eine ziehbare (aber nicht
sichtbare) Trennleiste an ihrem gemeinsamen Rand einstellbar.
c) 'I/O' gerät Edit-Box-Werte werden nur dann validiert, wenn der Benutzer den Mauszeiger außerhalb des
gerät bewegt hat. Dadurch werden unangenehme automatische Änderungen zur Erzwingung gesetzlicher
Werte während der Eingabe durch den Benutzer vermieden.
2) UnoArduSim unterstützt jetzt mehrere Sprachen über Konfigurieren | Präferenzen. Neben der Sprache für das
Benutzergebietsschema kann immer Englisch ausgewählt werden (sofern eine benutzerdefinierte * .qm-
Übersetzung datei für diese Sprache im UnoArduSim 'translations'-Ordner vorhanden ist).
3) Der Sound wurde jetzt für die Verwendung der Qt-Audio-API modifiziert. Dies erfordert unter bestimmten
Umständen ein Muting Vermeiden Sie lästige Tonausfälle und Klicks während längerer Windows-Betriebssysteme
Betriebsverzögerungen, die durch normale Mausklicks der Benutzer verursacht werden - siehe Abschnitt -Sounds
für weitere Details auf diesem.
4) Aus Gründen der Benutzerfreundlichkeit werden jetzt Leerzeichen verwendet, um einen 0-Wert in den gerät-
Bearbeitungsfeldern in darzustellen Konfigurieren | 'I/O' Geräte (Sie können jetzt die Leertaste verwenden, um
geräte zu entfernen).
5) Die nicht skaliert (U) Qualifier ist jetzt optional für 'PULSER', 'FUNCGEN' und '1SHOT' geräte (es ist der
angenommene Standard).
6) UnoArduSim erlaubt jetzt (zusätzlich zu literal numerischen Werten) 'const' ganzzahliger variablen und
'enum' Member, die als Dimensionen in array-Deklarationen verwendet werden sollen, sofern diese Quellen explizit
mit ganzzahligen Literalkonstanten initialisiert werden.
7) Nachdem die Maus das erste Mal in sie eingedrungen ist, erzeugt ein 'PUSH' gerät jetzt auf jeder
Kontaktsprung (für 1 Millisekunde) anschließend Drücken Sie die Leertaste (aber nicht für Mausklicks noch für
einen anderen Tastendruck).
8) Zusätzliche Klicks von Finden | Set-Suche-Text Wählen Sie jetzt das Nächster Wort aus dem Text von die
markierte Zeile in der aktiven Bereich ( das CodeBereich oder der VariablenBereich).
9) Funktionsmodule max () und pow () wurden jetzt in die Bequemlichkeitsliste der eingebaut-Elemente
aufgenommen, die sich auf der rechten Seite des Editieren/Ansehen befinden Dialog.
10) Das 'goto' Der Arduino-Befehl ist jetzt ein Fehler, der in UnoArduSim als „nicht unterstützt“
gekennzeichnet ist.

V1.7.2– Februar 2017


1) Die Farbauswahl Blau (B) wurde für LED geräte hinzugefügt.

V1.7.1– Februar 2017


1) Suffixe 'L' und / oder 'U' werden jetzt am Ende von numerischen Literalkonstanten akzeptiert (um sie als zu
definieren 'long' und / oder 'unsigned' ), und ('0b' oder '0B' Präfix) binären-Konstanten werden jetzt
ebenfalls akzeptiert. Jede numerische Konstante mit allen Dezimalzahlen beginnend mit a '0' gilt jetzt als ein
oktal Wert. (um Arduino zuzustimmen).
2) Bei der Ausführung in einer engen Schleife, aus der kein Fluchtweg besteht (z. B. 'while(x); x++;' woher
x ist immer wahr), klicken Sie auf Halt ein zweites Mal stellt nun sicher, dass programm ausführung tatsächlich
stoppt (und auf dieser fehlerhaften programm-Leitung).

V1.7.0– Dez. 2016


1) Ein neuer Werkzeugleiste Es wurde ein Feature hinzugefügt, das frei-RAM-Bytes während programm
ausführung zeigt (berücksichtigt die Gesamtbytes, die von globalem variablen, Heap-Zuordnungen und dem
lokalen Stapel variablen verwendet werden).

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).

3) Benutzerunterbrechungen werden während blockierter Stream-Lesevorgänge nicht mehr deaktiviert. Das


Verhalten entspricht jetzt dem tatsächlichen Arduino-Stream-Lesevorgang.

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.

13) Umfangreichere Überprüfungen (und zugehörige Fehlermeldungen) wurden für Benutzer-programm-Out-of-


Bounds-Adresszugriffe hinzugefügt (dh außerhalb des 'Uno'-RAMs oder außerhalb des 'Flash'-RAMs) 'PROGMEM'
Zugriffe).

14) Zeigerwerte in der VariablenBereich ähneln nun den tatsächlichen Arduino-Zeigerwerten.

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.

18) Funktionsmodul 'availableForWrite()' wurde der Implementierung von hinzugefügt Seriennummer.

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.

21) Die maximal zulässige programm-Größe wurde erhöht.

V1.6.3 - Sept. 2016

1) Hinzugefügt ein Verbesserte analysieren Fehlermeldung beim 'attachInterrupt()' bezieht sich auf ein
Interrupt-funktionsmodul, das nicht war früher prototypisiert .

2) Eine verbesserte Analysieren-Fehlermeldung für mehrdimensionale array-Initialisierungslisten wurde


hinzugefügt.

V1.6.2 - Sept. 2016

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, .

V1.6 - Juni 2016


1) Es wurde ein neuer '1SHOT' (One-Shot) 'I/O' Gerät hinzugefügt, der nach einer gewählten Verzögerung einen
Impuls aus einer Triggersignalflanke der ausgewählten Polarität erzeugt.

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).

V1.5.1 - Juni 2016


1) Die EEPROM-Bibliothek funktionsmodule wurde jetzt unterstützt 'update()' . 'put()' und 'get()' . und
für den Byte-Zugriff über die array-Notation, z 'EEPROM[k]' .

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]' .

V1.5 - Mai 2016


1) Editieren/Ansehen hat jetzt die Tastenkombination Strg-E und eine neue Schaltfläche für Kompilieren (Strg-R)
sowie ein eingebaut-Analysieren-Fehlerfeld, um das Testen von Bearbeitungen zu ermöglichen, ohne dass sie
geschlossen werden müssen der fenster.

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).

5) Arduino vordefinierte binären-Literalwerte (wie 'B01011011') sind jetzt erlaubt.

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).

V1.4.2 - März 2016

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.

V1.4 - Dezember 2015


1) 'Stepper.h' Bibliotheksfunktionalität und zugehörige 'I/O' geräte wurden hinzugefügt.

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.

4) Variable-Deklarationsinitialisierer können jetzt mehrere Zeilen umfassen.

5) Array-Indizes dürfen nun selbst array-Elemente sein.

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.

7) „Show Programm Herunterladen“ wurde verschoben Konfigurieren | Präferenzen

V1.3 - Oktober 2015

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 ..

4) UnoArduSim erlaubt jetzt 'bool' als Synonym für 'boolean' .

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).

V1.2 Juni 2015

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.

4) Altbacken VariablenBereich Zeilenhighlights werden jetzt beim funktionsmodul-Aufruf / Return entfernt.

V1.1 - März 2015

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.

V1.0.1 - Jun. 2014


Wellenform fenster kennzeichnet jetzt analoge pins als A0-A5 anstelle von 14-19.

V1.0 - Erstveröffentlichung Mai 2014

Das könnte Ihnen auch gefallen