Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert sind; Die von diesem Forum gesetzten Cookies düfen nur auf dieser Website verwendet werden und stellen kein Sicherheitsrisiko dar. Cookies auf diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Hallo, Gast
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.

Benutzername
  

Passwort
  





Durchsuche Foren

(Erweiterte Suche)

Foren-Statistiken
» Mitglieder: 55
» Neuestes Mitglied: b7acky
» Foren-Themen: 52
» Foren-Beiträge: 69

Komplettstatistiken

Aktive Themen
NeoPixelClock
Forum: Projekte
Letzter Beitrag: Gorathan
08.02.2020, 16:01
» Antworten: 0
» Ansichten: 313
_GDIPlus_GraphicsDrawStri...
Forum: Scripte
Letzter Beitrag: Gorathan
04.02.2020, 19:31
» Antworten: 0
» Ansichten: 351
LED-Tester
Forum: Projekte
Letzter Beitrag: Gorathan
31.01.2020, 08:00
» Antworten: 0
» Ansichten: 335
Countdown-Timer mit I2C-L...
Forum: Projekte
Letzter Beitrag: Gorathan
15.01.2020, 15:46
» Antworten: 0
» Ansichten: 377
Wemos D1 mini mit WPS-Pus...
Forum: Nützliche Funktionen
Letzter Beitrag: Gorathan
15.01.2020, 15:15
» Antworten: 0
» Ansichten: 369
LED-Lauflicht
Forum: Projekte
Letzter Beitrag: Gorathan
30.05.2019, 19:08
» Antworten: 1
» Ansichten: 1.410
DS18B20-Tester
Forum: Projekte
Letzter Beitrag: Gorathan
09.05.2019, 10:58
» Antworten: 0
» Ansichten: 816
Backofen-Thermometer
Forum: Projekte
Letzter Beitrag: Gorathan
05.05.2019, 18:42
» Antworten: 0
» Ansichten: 848
Taster entprellen
Forum: Nützliche Funktionen
Letzter Beitrag: Gorathan
26.04.2019, 18:08
» Antworten: 0
» Ansichten: 865
Anfang der Jahreszeiten b...
Forum: Nützliche Funktionen
Letzter Beitrag: Gorathan
22.04.2019, 17:39
» Antworten: 0
» Ansichten: 839

 
Information Listview-Datenbank
Geschrieben von: Gorathan - 30.05.2017, 11:24 - Forum: Scripte - Keine Antworten

Früher (mit weniger Erfahrung) hielt ich es für eine gute Idee, eine Datenbank ausschließlich mit einem Listview zu verwalten.
Also die Daten direkt in das Listview eintragen, dort sortieren und dort suchen. Von dort aus speichern und auch dahin von der Festplatte laden.
Mit wenigen Datensätzen ist das machbar und auch schnell genug, deshalb ist mir das erst nicht bewusst geworden.
Erst als ich so eine "Datenbank" im praktischen Einsatz hatte und die Datensätze immer mehr wurden, wurde mir klar, dass das keine so gute Idee war.

Lange Rede, kurzer Sinn! Ich handhabe das mittlerweile anders: alle Daten werden in ein Array geladen, eingegeben, sortiert, dort gesucht und von dort gespeichert.
Das Listview dient im Wesentlichen nur der Anzeige. Auf diese Weise ist das Ganze sehr viel schneller und man kann auch umfangreichere Datensätze verwalten.


Ich wurde nach einem Beispiel-Script gefragt und so habe ich mich mal hingesetzt und solch ein Beispiel-Script geschrieben.
Das Script ist ganz schön umfangreich geworden (ca. 47kB), aber rund die Hälfte davon sind Kommentare.
Dabei habe ich auch an die AutoIt-Anfänger gedacht und jede Zeile kommentiert, mit der Hoffnung, dass das damit verständlich wird.

Das Script ist nicht nur einfach ein Datenbank-Beispiel geworden. Ich habe auch andere Erfahrungen, speziell mit der GUI-Verwaltung, mit einfliessen lassen:

  • Für AutoIt-Anfänger ist wohl der OnEvent-Modus ein Beispiel dafür.
  • Andere haben mit Arrays so ihre Probleme.
  • Ein größenveränderbares Hauptfenster wird hier ebenso benutzt, wie das abspeichern der Größe und Position des Fensters in einer Inidatei.
  • Auch das abwechselnde benutzen des OnEvent- wie auch des MessageLoop-Modus (z.B. für das Infofenster) wird in dem Beispiel gezeigt.
  • Verwenden einer Menüleiste und einer Statuszeile.
  • Doppelkliick-Auswertung auf ein Listview
  • usw.
Screenshot:
   

Bedienung des Programms:
Es gibt sieben Buttons auf dem Hauptfenster:
  • Neue Datenbank erstellen -> Wenn bereits eine Datenbank geladen ist, wird vorher nachgefragt, ob das wirklich passieren soll.
  • Datenbank laden -> Es öffnet sich ein Dialogfenster, indem man eine Datenbankdatei auswählen kann, die dann geladen wird.
  • Datenbank speichern -> Es öffnet sich ein Dialogfenster, indem man eine Datei angeben kann, unter der die Datenbank gespeichert wird (".lvdb" wird hinzugefügt).
  • Neuen Eintrag erstellen -> öffnet ein Fenster, zur Eingabe eines neuen Datensatzes.
  • Eintrag bearbeiten -> öffnet ein Fenster, in dem man den ersten markierten (bzw. den mit Doppelklick ausgewählten) Eintrag bearbeiten kann.
  • Markierte Einträge löschen -> alle markierten Einträge werden, nach Rückfrage, aus der Datenbank gelöscht.
  • Programm-Informationen -> öffnet ein Fenster mit den Programm-Informationen.
Außerdem gibt es die Suche, mit dem Suchbegriff-Eingabefeld und dem Lupen-Button.
Wobei es zwei Arten der Suche gibt:
  • Einmal die "Einzelsuche" (Aufruf ohne gedrückte Shift-Taste), hier wird der Suchbegriff im Listview einzeln angesteuert und der Suchtreffer markiert.
  • Und zum Anderen die "Treffersuche" (Aufruf mit gedrückter Shift-Taste), hier wird ein extra Suche-Listview angezeigt, indem alle Suchtreffer aufgelistet sind (und nur diese).
Zurück zum normalen Daten-Listview kommt man, wenn man die Suche mit leerem Eingabefeld startet.


Im ZIP-Archiv (Anhang) findet ihr das komplette Script, sowie eine Beispiel-Datenbankdatei mit über 16.000 Datensätzen  (die habe ich mit Zufallsdaten erstellt).
Die Datenbankdateien bekommen von dem Programm die Endung ".lvdb". Es handelt sich aber um reine Textdateien. Man kann sie also auch mit einem Editor öffnen.

Lizenz:
Freeware! Das heißt, ich stelle euch das Script zur freien Verfügung. Ihr dürft es verwenden und verändern, wie ihr wollt. Auch das Infofenster dürft ihr beliebig anpassen.
Ein Hinweis auf mich als Autor der Vorlage wäre zwar schön, ist aber keine Bedingung.

Update 31.05.2017 Version3.1:
  • Fehler beim schliessen der Gruppe behoben.
  • Beim aendern der Spaltenbreite des Listview wurde die neue Spaltenbreite erst beim beenden des Programms gespeichert.
  • Beim beenden des Programms wurde für die Nachfrage noch eine MsgBox benutzt. Ich habe nun die Funktion "_ConfirmDelete" in "_Confirm" umbenannt und verwende sie für beide Nachfragen.
  • Einige Kommentare hizugefügt/korrigiert.
Update 01.06.2017 Version3.2:
  • Beim Listview $LVS_EX_DOUBLEBUFFER hinzugefügt. Damit reduziert sich das flackern beim Resizing.
  • Bei dem Eingabefenster ist das erste Element nun ein Date-Control, so braucht man das eingegebene Datum nicht auf Gültigkeit überprüfen und es erleichert die Eingabe.
  • Das zweite und dritte Input-Control habe ich mit $ES_NUMBER erweitert, weil man dort ja nur Zahlen eingeben soll.
  • Beim begrenzen des Fensters auf ein Minimum werden nun die Systemwerte für den Fensterrahmen ausgelesen. Die sind ja bei den Windowsversionen unterschiedlich.
  • Beim resize "_WM_SIZE" wird nun die Aufteilung der Statuszeile mehr zugunsten der linken Seite berücksichtigt.
  • Die Funktion "_Confirm" wird nun auch beim neu erstellen der Datenbank benutzt.



Angehängte Dateien
.zip   Listview-Datenbank-Beispiel.zip (Größe: 335,04 KB / Downloads: 8)
Drucke diesen Beitrag

Information Berechnung der Wochennummer
Geschrieben von: Gorathan - 09.05.2017, 14:22 - Forum: Nützliche Funktionen - Keine Antworten

Um die Wochennummer zu berechnen, sind einige Funktionen nötig.
Im Internet findet man zahlreiche Berechnungen, aber viele von denen liefern fehlerhafte Daten zurück und/oder berücksichtigen nicht die deutschen/europäischen Regeln zur Berechnung.
Ich habe mal eine Berechnung auf Grundlage der ISO 8601 erstellt:

Show ContentArduino-Quellcode:
So funktioniert das auf dem Arduino problemlos.
Ich habe das Programm umfangreich kommentiert, sodass die Funktionen verständlich sind.

Drucke diesen Beitrag

Information Tresorschloss
Geschrieben von: Gorathan - 08.05.2017, 19:27 - Forum: Projekte - Keine Antworten

Noch ein kleines Arduino-Projekt.
Ein Passwort über eine Matrix-Tastatur einzugeben war mir zu einfach, deshalb habe ich mir gedacht, das geht auch mit einem Dreh-Enkoder (mit Buttonklick).
Das hat dann was von einem Tresorschloss, wo man die Zahlen "drehen" muss. Ich hatte hier noch eine 8stellige LED-Anzeige (mit MAX7219 IC). Das benötigt nur 5 Kabel zur Ansteuerung, also wurde das die Anzeige für das eingegebene Passwort. Dazu noch ein Arduino-Nano und ein Piezosummer.

Als Fritzing-Steckplatine sieht das dann so aus:
   

Die Bedienung ist recht simpel:

Mit dem Dreh-Enkoder dreht man nach links oder rechts, um die Zahl an der Eingabeposition von 0...9 einzustellen.
Mit einem Buttonklick (Dreh-Enkoder drücken) kommt man eine Stelle weiter.
Wenn man den Button längere Zeit gedrückt hält, dann wird die Eingabe zurückgesetzt (wenn man einen Fehler bei der Eingabe gemacht hat).
Sind alle 8 Ziffern eingegeben, so wird die Eingabe mit dem gespeicherten Passwort verglichen und es gibt eine Ausgabe (Passwort richtig/falsch).

Es werden zwei zusätzliche Libraries benötigt:
#include "LedControl.h"   -> https://github.com/wayoda/LedControl/releases
#include <ClickEncoder.h>  -> https://github.com/0xPIT/encoder/tree/arduino

Das Programm für den Arduino findet ihr im Anhang.
Es ist blockierungfrei (ohne delays) geschrieben, sodass auch Erweiterungen problemlos möglich sind.
Selbst die Pieptoene blockieren den Ablauf nicht, sondern werden in einer Interrupt-Funktion ein-/ausgeschaltet.



Angehängte Dateien
.ino   Tresorschloss.ino (Größe: 6,48 KB / Downloads: 3)
Drucke diesen Beitrag

Information DS18B20 Temperatursensor
Geschrieben von: Gorathan - 06.05.2017, 12:56 - Forum: Bauteile - Keine Antworten

Bei vielen Hobby-Projekten sucht man nach einer Möglichkeit die Temperatur zu messen.
Mein Favorit, zumindest im Temperaturbereich zwischen -55 und +125 Grad Celsius, ist der "DS18B20" Temperatursensor von "Maxim/Dallas Semiconductor".
Diesen Sensor gibt es einmal in einem TO-92 Gehäuse (gut für die Temperaturmessung in einem Gehäuse):
   
oder eingegossen in ein Edelstahlröhrchen (für die Messung draußen bzw. außerhalb des Gehäuses):
   

Die Unterstützung für den Arduino sieht auch sehr gut aus. Es gibt eine Library, die man einfach in sein Projekt integrieren kann.
Und alles was man an zusätzlicher Hardware benötigt, ist ein 4.7 kOhm Widerstand, den man zwischen dem Datenpin und VCC anschließt (PullUp).
Die A/D-Wandlung geschieht bereits im Sensor und die Übertragung zum MikroController erfolgt dann digital.
Die Genauigkeit liegt bei +/- 0.5 Grad Celsius (im Bereich von -10 bis +85 Grad Celsius) und bei +/- 2 Grad Celsuis (im Bereich von -55 bis +125 Grad Celsius).
Die Versorgungsspannung darf zwischen 3.0 und 5.5 Volt liegen.
Und das Beste ist eigentlich, dass dieser Sensor so preiswert ist. Im TO-92 Gehäuse ca. 1.70 € (Einzelpreis) und im externen Edelstahlgehäuse ca. 6,- € (Einzelpreis).
Die Preise sind Momentaufnahmen und liegen weitaus niedriger, wenn man gleich mehrere kauft.

Das alles zusammen macht diesen Sensor zu meinen Favoriten, den ich auch schon mehrfach eingesetzt habe und von dem ich auch mehrere auf Vorrat habe. Smile

Das Datenblatt zum DS18B20 befindet sich im Anhang.



Angehängte Dateien
.pdf   DS18B20Z-DAL.pdf (Größe: 186,49 KB / Downloads: 171)
Drucke diesen Beitrag

Information SerialComm.au3 (eine kleine UDF zum Datenaustausch mit dem Arduino)
Geschrieben von: Gorathan - 02.05.2017, 18:36 - Forum: Scripte - Keine Antworten

Es gibt zwar schon einige UDFs, die sich mit der seriellen Schnittstelle befassen, aber ich wollte eine kleine und vor allem einfache UDF für den Datenaustausch (AutoIt <-> Arduino).
Man kommt da schon mit wenigen Befehlen aus (Open, Close, Send, Receive). Da sind die anderen UDFs schon viel zu "overkill".  Smile
Im Anhang befindet sich die UDF, die man lediglich in sein Script includen muss.

Hier mal das Beispiel für den Arduino:

Show ContentArduino Quellcode:

Show ContentAutoIt-Quellcode:



Angehängte Dateien
.au3   SerialComm.au3 (Größe: 6,53 KB / Downloads: 6)
.au3   Beispiel.au3 (Größe: 4,07 KB / Downloads: 7)
Drucke diesen Beitrag

Information Galgenraten
Geschrieben von: Gorathan - 01.05.2017, 18:45 - Forum: Projekte - Keine Antworten

Das Spiel "Galgenraten" kennt wohl jeder, aber trotzdem kurz eine Erklärung:
In diesem Fall ist es ein Spiel gegen den Computer.
Das Programm gibt ein Wort vor, von dem es die einzelnen Buchstaben als Striche darstellt. Nun muss man das Wort erraten, indem man einzelne Buchstaben rät. Kommt der geratene Buchstabe in dem Wort vor, so werden die Buchstaben angezeigt. Kommt der Buchstabe nicht vor, so wird der Galgen aufgebaut.


Das Programm ist komplett in AutoIt geschrieben. Der Quellcode inkl. der verwendeten Grafiken, des Fonts und der Icons befinden sich im ZIP-Archiv im Anhang.
Wenn man das Script "Galgenraten.au3" compiliert, werden alle Resourcen mit eingebunden, sodass man zum spielen nur noch die Exe-Datei benötigt.

Wichtig: Es muss ein Monitor mit FullHD-Auflösung (1920 x 1080) vorhanden sein, sonst startet das Programm nicht!

Screenshot:
   

Rechtliches:

  • Dieses Programm darf, zeitlich unbegrenzt, kostenlos genutzt werden!
  • Eine evtl. Weitergabe muss kostenlos, vollständig und unverändert erfolgen!
  • Änderungen am Programm dürfen nur durch den Autor vorgenommen werden!



Angehängte Dateien
.zip   Galgenraten_HD.zip (Größe: 1,03 MB / Downloads: 5)
Drucke diesen Beitrag

Information Der heiße Draht
Geschrieben von: Gorathan - 28.04.2017, 16:59 - Forum: Projekte - Keine Antworten

Die meisten kennen wohl das Spiel mit dem "heißen Draht".

Wer es noch nicht kennt:
Man muss eine Drahtschlinge einen gewundenen Draht entlang bewegen, ohne diesen zu berühren. Für jede Berührung bekommt man eine Strafzeit (15 sek.) aufgebrummt. Hat man das Ende erreicht, so wird die Anzahl der Drahtberührungen sowie die benötigte Zeit angezeigt.

Ein perfektes Projekt für den Arduino. Dafür kann man das "I2C LCD-Uhr"-Projekt benutzen. Zusätzlich kommt noch ein Piezosummer dazu und die "Hardware" für den Draht.
Alles andere erledigt die Software. Smile 

Die Schaltung sieht dann so aus:
   

In der Realität könnte das dann so aussehen:
   

Ich habe hier einen alten Lötkolben "ausgeschlachtet". Vorne eine Drahtschlinge befestigt und hinten mit einem Spiralkabel zum GND-Anschluß des Arduino geführt.
Der gewundene Draht ist ein übriggebliebenes Stück Erdungskabel, von dem ich die Isolierung entfernt habe. Zusätzlich habe ich im Start- und Endbereich ein Stück des Drahtes mit Hilfe von Schrumpfschlauch wieder isoliert. Da hätte ich eigentlich auch beim entfernen der Kabelisolierung dran denken können und die Enden nicht abisolieren sollen. Aber da war's schon zu spät. Rolleyes
Start und Ende sind zwei große Unterlegscheiben, die so befestigt sind, dass sie den gewundenen Draht nicht berühren.

Das Arduino-Programm sowie das Fritzing-Projekt befinden sich im Anhang.
Wobei hier das Uhrenprogramm weiter im Hintergrund läuft und die Anzeige auf dem LCD nur dann auf das Spiel umgeschaltet wird, wenn die Drahtschlinge vom Startpunkt weggenommen wird, das Spiel also beginnt. Wird die Drahtschlinge wieder auf den Startpunkt gelegt, wird wieder Datum und Uhrzeit angezeigt.



Angehängte Dateien
.fzz   HeisserDraht.fzz (Größe: 23,88 KB / Downloads: 0)
.ino   DerHeisseDraht.ino (Größe: 12,9 KB / Downloads: 0)
Drucke diesen Beitrag

Information AutoIt Syntax-Highlighting
Geschrieben von: Gorathan - 28.04.2017, 13:53 - Forum: Hilfe und Unterstützung - Keine Antworten

Um hier im Forum AutoIt-Scripte mit Syntax-Highlighting anzuzeigen, muss der "Einfügen"-Button angeklickt werden.
Dort dann "Programmcode" auswählen und als Beschreibung "autoit" eingeben.

Das Ganze sieht dann so aus:


#include <GUIConstantsEx.au3>

Example()

Func Example()
    ; Create a GUI with various controls.
    Local $hGUI = GUICreate("Example")
    Local $idOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)

    ; Display the GUI.
    GUISetState(@SW_SHOW, $hGUI)

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idOK
                ExitLoop

        EndSwitch
    WEnd

    ; Delete the previous GUI and all controls.
    GUIDelete($hGUI)
EndFunc   ;==>Example

Bei längeren Quelltexten bitte zusätzlich noch den "Spoiler tag" benutzen. Der findet sich ebenfalls beim "Einfügen"-Button.
Hier ist die Beschreibung optional. In der Quelltext-Ansicht kann man die TAGs sehen!

Das sieht dann so aus:
Show ContentAutoIt-Programm:

Drucke diesen Beitrag

Information I2C LCD-Uhr
Geschrieben von: Gorathan - 28.04.2017, 10:02 - Forum: Projekte - Keine Antworten

Ein kleines Arduino-Projekt, um einen Nano, ein I2C-LCD und ein DS3231-RTC-Modul zu einer Uhr zu verbinden.
Der Aufbau sieht so aus:
   

Wobei das "ZS-042" mit dem "DS3231" baugleich ist.
Achtung!
Man sollte sich bei diesem RTC-Modul vergewissern, dass auch wirklich ein Akku ("LIR2032") in der Halterung steckt.
Eine baugleiche Batterie ("CR2032") würde durch das laden beschädigt werden und könnte explodieren!

Außerdem ist die interne Lade-Elektronik nicht optimal ausgelegt. Sie würde den Akku über die Ladeschlußspannung laden, weshalb ich den VCC-Anschluß über 2 Dioden an +5V angeschlossen habe. Damit bekommt das Modul nur ca. 3.6V, was eine Überladung des Akkus verhindert.

Diese RTC-Module besitzen einen Temperatur-Sensor, den man per Software auslesen kann. Das habe ich bei dem Programm mit eingebaut.
Auf dem 2-zeiligen Display wird in der oberen Zeile der Wochentag (2stellig), das Datum, sowie die Wochennummer angezeigt.
Auf der unteren Zeile wird die Uhrzeit (HH:MM:SS) sowie die Temperatur angezeigt. Als Besonderheit  wird die Sommerzeit (MESZ) ermittelt und die eine Stunde automatisch addiert.

Es werden zusätzlich zwei Libraries benötigt:
"RtcDS3231" -> https://github.com/Makuna/Rtc/wiki
"LiquidCrystal_I2C.h" -> https://github.com/marcoschwartz/LiquidCrystal_I2C

Das Programm sowie das Fritzing-Projekt befindet sich im Anhang.



Angehängte Dateien
.ino   i2c_LCD_Uhr.ino (Größe: 7,89 KB / Downloads: 11)
.fzz   i2c_LCD_Uhr.fzz (Größe: 23,03 KB / Downloads: 3)
Drucke diesen Beitrag

Information Datumsanzeige - Kalenderblatt
Geschrieben von: Gorathan - 28.04.2017, 09:19 - Forum: Scripte - Keine Antworten

Mit der Funktion aus dem Anhang kann man ein Datum auf einem Kalenderblatt anzeigen lassen. Die Schriftfarbe ist frei wählbar.
Das Kalenderblatt wird als ein AutoIt-Pic-Control (GUICtrlCreatePic) erstellt und kann somit auch auf der Gui verschoben werden (mit GUICtrlSetPos).

Screenshot:
   



Angehängte Dateien
.au3   _DateImage.au3 (Größe: 8,22 KB / Downloads: 5)
.au3   _Example.au3 (Größe: 3,59 KB / Downloads: 3)
Drucke diesen Beitrag