An der SD-Karte liegt es wohl nicht!
Ich habe heute die bestellte 2 GB SD-Karte bekommen und habe das Modul damit getestet, aber der Fehler tritt auch weiterhin auf.
Dann muss ich wohl auf den anderen SD-Cardreader warten, bis ich mit dem Projekt weitermachen kann. Schade!
Werde ich mich halt mal mit der Laser-Lichtschranke beschäftigen (der Foto-Transistor kam ja auch heute an).
Und wenn die ganze Elektronik-Schaltung erstmal läuft, dann kommt auch die Verbindung zu AutoIt. So ist das jedenfalls geplant...
Beiträge von Oscar
-
-
Dein gesamter Code ist total verwirrend!
Hier mal eine aufgeräumtere und übersichtlichere Variante:
AutoIt
Alles anzeigen#include <Array.au3> #include <File.au3> Global $sXML_Path = 'C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine\' Global $sCSV_Path = 'C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheindörns\' Global $aXML_Files = _FileListToArray($sXML_Path, '*.xml', $FLTA_FILES, False) ; alle XML-Dateinamen in ein Array holen If @error Then Exit MsgBox(0, 'Fehler', 'Fehlernr.: ' & @error) ; wenn ein Fehler aufgetreten ist, Prg beenden _ArrayDisplay($aXML_Files) Global $sXML_Data, $sPurchaseOrderNumber, $sTrackingID, $hFile For $i = 1 To $aXML_Files[0] ; alle XML-Dateien durchgehen $sXML_Data = FileRead($sXML_Path & $aXML_Files[$i]) ; Daten aus der XML-Datei lesen $sPurchaseOrderNumber = StringRegExpReplace($sXML_Data, '(?s).+<PurchaseOrderNumber>(.+)</PurchaseOrderNumber>.+', '$1') ; Bestellnummer extrahieren $sTrackingID = StringRegExpReplace($sXML_Data, '(?s).+<TrackingID>(.+)</TrackingID>.+', '$1') ; TrackingID extrahieren $hFile = FileOpen($sCSV_Path & $sPurchaseOrderNumber & '.csv', $FO_OVERWRITE + $FO_CREATEPATH) ; Datei zum schreiben öffnen If $hFile <> -1 Then ; wenn erfolgreich, dann... FileWriteLine($hFile, 'Bestellnummer;TrackingID') ; Überschrift in die Datei schreiben FileWriteLine($hFile, $sPurchaseOrderNumber & ';' & $sTrackingID) ; Daten in die Datei schreiben FileClose($hFile) ; Datei schließen EndIf Next -
Das mag ja sein, aber SD-Karten sind mittlerweile kaum noch mit so wenig Kapazität zu bekommen.
Tatsächlich ist die 4 GB Karte, die ich hier zum testen hatte, die mit der geringsten Kapazität in unserem Haushalt.
Ich hab' mir jetzt noch eine 2GB Karte bei Reichelt bestellt (hatte da sowieso noch etwas im Warenkorb).
Paradoxerweise bekommt man zum gleichen Preis (4,60€) bereits eine 8GB (Class 10, SDHC) Karte.
-
-
Ich habe mir den SD-Cardreader plus anderer RTC (http://www.amazon.de/dp/B00P9278HM/…8075861_TE_item) mal bestellt. Kann aber bis zu 3 Wochen dauern.
Kleinere SD-Card (2GB) muss ich mal suchen, ob ich sowas noch rumliegen habe.

-
-
Momentan habe ich Standard-SD-Karten, aber eigentlich ist Micro-SD(HC) auch ausreichend.
Wäre dann sowas zu empfehlen?
http://www.amazon.de/Reader-Speicher-Memory-Shield-Arduino/dp/B00QIKJP5W/ref=pd_sim_23_4?ie=UTF8&dpID=51RiFgGPWXL&dpSrc=sims&preST=_AC_UL160_SR160%2C160_&refRID=0MFSP0BBTK0PCQF0YMAK -
-
Die SD-Karten (32 GB und 4 GB) sind mit FAT32 formatiert. Habe sie auch schon mit dem SD-Formatter von Trendy formatiert.
Mit der Original-Library hat es nicht funktioniert und mit der von Adafruit auch nicht. ChipSelect soll wie bei der Adafruit auf Pin10 sein, das sieht vom Layout auch danach aus.
Das Shield hat einen 3.3V-Pegelwandler bereits Onboard.Gibt es unterschiedliche SD-Card-Reader? Also von der Ansteuerung her? Funktioniert bei denen dann die Original-Library?
-
-
Ich denke, dass ich das Steckbrett lediglich zum entwickeln der Projekte benutzen werde. Wenn fertig, dann wird gelötet.
Jedenfalls bei Projekten, die ich auch längere Zeit nutzen möchte.Andy: Den Link zum Attiny habe ich mir mal abgespeichert. Das ist bestimmt für einige Projekte hilfreich und ausreichend.

Das "Data-logging-shield" von "Deek-Robot" (ist ein Adafruit-Clone) bekomme ich nicht zum laufen.
Zumindest den SD-Card-Teil nicht. Die RTC funktioniert, aber beim Zugriff auf die SD-Card gibt's nur ein: "initialization failed".
Stundenlange Internetsuche und dort beschriebene "Problemlösungen" habe ich schon durch, aber das hilft hier alles nichts. Vielleicht ist das Shield hinüber!?
Das ist schon etwas frustrierend!
-
-
Es könnte sein, dass der Arduino intern bereits PullDown-Widerstände besitzt (soweit kenne ich mich da jetzt noch nicht aus) und es deshalb einwandfrei funktioniert.
BTW: Betreibst Du Deine Schaltungen so auf dem Steckbrett (dauerhaft) oder ist das nur zum entwickeln und danach wird gelötet?
-
-
@xOr: Danke! Aber der Schaltplan ist fehlerhaft! Die 10K-Widerstände sind PullDown-Widerstände für das Gate. Beim unteren FET (rot) ist es noch richtig verdrahtet. Bei den oberen beiden FETs liegt der Widerstand am Drain-Anschluss (falsch).
Als Schaltplan sollte das dann so aussehen:
RGB LED Strip_Schaltplan.png -
-
So, die ersten Experimente sind gemacht!
Das LCD-Modul funktioniert und auch die Taster darauf lassen sich auslesen (ganz clever gemacht = 5 Taster über verschiedene Widerstände an einem AnalogPort, so spart man Porteingänge).
Das klassische "Hello World" (LED blinken lassen) ist absolviert.
Die 4-fach 7-Segmentanzeige (mit I2C-Backpack) habe ich auch zum laufen bekommen.
Demnächst muss ich mich dann mit dem Datenlogger-Modul beschäftigen.Andy: Dein Beispiel konnte ich ebenfalls erfolgreich nachvollziehen. Dafür schonmal: Vielen Dank!
Raupi : Solch große 7-Segment-Anzeigen könnte ich auch noch gebrauchen. Muss ich mal nach googeln oder kennst Du da eine Quelle (günstig)?
Aber irgendwie brauche ich mehr Platz auf dem Schreibtisch. Ich muss wohl mal anbauen.

Jedenfalls hat der Arduino meine Elektronik-Bastelleidenschaft wieder geweckt, nachdem diese einige Jahre im Tiefschlaf lag.
Damals war das noch der C64, der die Ansteuerung der Elektronik übernehmen musste. Der Arduino ist dagegen schon ein paar Nummern kleiner.
-
-
Wow! Jetzt habe ich noch gar nicht richtig angefangen und werde schon mit Extras "bombadiert"! Klasse! Macht weiter so!

Raupi : Ich habe den ESP8266 mal gegoogelt und das könnte doch auch eine Verbindung zum PC darstellen (also per WLAN = Arduino + ESP8266 <-> PC), oder?
Hast Du da Erfahrung, wie man dann die Kommunikation mittels AutoIt hinbekommt?@xOr: Das Projekt mit dem LED-Strip würde mich auch noch interessieren. Kannst Du mir dazu mehr erzählen (Sketch, Aufbau, etc.)?
Das LCD soll auch zur Anzeige für die Wetterstation dienen, zusätzlich zu der Möglichkeit der Auswertung am PC. Was dort alles angezeigt werden wird, das wird sich noch zeigen.
Im Moment bin ich sozusagen noch bei Null.Andy: So ein Eventmodus interessiert mich ganz besonders, vor allem, weil ich in AutoIt meist auch den Eventmodus benutze. Ich denke aber auch, dass so eine unabhängige Kommunikation mit dem PC überhaupt die Bedingung dafür ist, dass der Arduino im Hintergrund weiter die Daten loggen kann. Er soll ja während der Übertragung nicht damit aufhören. Von daher wäre es schön, wenn Du den Code mit mir teilen würdest.
Heute sind übrigens die Teile gekommen (ich habe mir auch einen Original-Genuino gegönnt, um die OpenSource-Gemeinde zu unterstützen).
Für eine andere Projektidee (Geschwindigkeitsmessung beim Kegeln via Lichtschranke) habe ich mir noch ein kleines (5mW) Lasermodul gekauft.
Ich denke, damit dürfte ich für den Anfang erstmal ausgesorgt haben.
-
-
Ich wollte mal fragen, wer von euch sich zusätzlich mit dem Arduino beschäftigt?
Also speziell die Kommunikation zwischen Arduino und PC (AutoIt).Ich habe mir jetzt erstmal einen "Arduino Uno" und diverse Zusatz-Elektronik (LCD-Keypad-Shield, Data-Logging-Shield, diverse Sensoren, Steckbrett, etc.) bestellt.
Mir schwebt da als Projekt eine Wetterstation vor, die die Daten auf SD-Karte loggt und wenn ich dann den PC anmache, möchte ich die geloggten Daten mit AutoIt abholen und dann auswerten.Erstmal natürlich einige Grundlagen zur Arduino-Programmierung lernen.
Aber vielleicht hat ja jemand Lust zu einem Erfahrungsaustausch/Projektbeteiligung?Im Forum (forum.arduino.cc) lese ich schon die diversen Beiträge. Mir ist aber auch an der Verbindung zum PC (AutoIt) gelegen.
-
-
Mit Opt('WinTitleMatchMode', 2) am Anfang des Scripts.
-
Das kenne ich nur zu gut!
Man verrennt sich in eine "Lösung" und grübelt stundenlang über ein passendes RegExp-Pattern und dabei liegt die wirkliche Lösung gleich nebenan. Man kommt halt nur nicht drauf. -
Nicht unbedingt als RegExp-Pattern, aber so funktioniert es wenigstens:
AutoIt#include <Array.au3> $string = '<td>60311 Frankfurt am Main Frankfurt am Main</td>' & @CRLF & '<td>36251 Bad Hersfeld Bad Hersfeld</td>' & @CRLF & '<td>20099 Hamburg Hamburg</td>' & @CRLF $array = StringRegExp($string, '<td>\d{5}(.+)</td>', 3) ; HTML-Formatierung und PLZ abtrennen _ArrayDisplay($array, 'Vorher') For $i = 0 To UBound($array) - 1 $array[$i] = StringMid($array[$i], 2, StringLen($array[$i]) / 2 - 1) ; einzelne Strings durch 2 teilen Next _ArrayDisplay($array, 'Nachher') -
Falls Ihr für so ein ListView mit Doppelklick und Pfadübergabe ein Programmschnipsel habt, immer rein damit
Für die ersten beiden Punkte habe ich mal eben ein Script geschrieben:
AutoIt
Alles anzeigen#include <File.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <StructureConstants.au3> #include <WindowsConstants.au3> Opt('GUIOnEventMode', 1) Global $hGui = GUICreate('PDF-List DblClick', 480, 300) GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui') Global $idPath = GUICtrlCreateLabel('', 10, 12, 410, 22, Default, $WS_EX_STATICEDGE) GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma') Global $idPathSelect = GUICtrlCreateButton('...', 422, 10, 48, 25) GUICtrlSetFont(-1, 12, 600, 0, 'Tahoma') GUICtrlSetOnEvent(-1, '_SelectPath') Global $idListView = GUICtrlCreateListView('Dateiname|Größe (Bytes)', 10, 45, 460, 245) Global $hListView = GUICtrlGetHandle($idListView) _GUICtrlListView_JustifyColumn($hListView, 1, 1) _GUICtrlListView_SetColumnWidth($hListView, 1, 120) GUISetState(@SW_SHOW, $hGui) GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY') WinWaitClose($hGui) Exit Func _CloseGui() GUIDelete($hGui) EndFunc ;==>_CloseGui Func _SelectPath() Local $sPath = FileSelectFolder('Bitte Verzeichnis auswählen', '', 0, '', $hGui) If @error Or Not FileExists($sPath) Then Return If StringRight($sPath, 1) <> '\' Then $sPath &= '\' GUICtrlSetData($idPath, $sPath) Local $aPDFFiles = _FileListToArray($sPath, '*.pdf', $FLTA_FILES), $iFileSize If @error Then Return For $i = 1 To $aPDFFiles[0] $iFileSize = FileGetSize($sPath & $aPDFFiles[$i]) GUICtrlCreateListViewItem($aPDFFiles[$i] & '|' & $iFileSize, $idListView) Next _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE) EndFunc ;==>_SelectPath Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $tNMHDR, $hWndFrom, $iCode, $tInfo, $iIndex, $sPath, $sFile $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom')) $iCode = DllStructGetData($tNMHDR, 'Code') Switch $hWndFrom Case $hListView ; <- das Handle vom ListView Switch $iCode Case $NM_DBLCLK ; <- Doppelklick auf ein Item $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) $iIndex = DllStructGetData($tInfo, 'Index') ; <- der Index zu dem angeklickten Item If $iIndex > -1 Then $sPath = GUICtrlRead($idPath) $sFile = _GUICtrlListView_GetItemText($hListView, $iIndex, 0) ShellExecute($sPath & $sFile) EndIf EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFYDen dritten Punkt kriegst Du wohl alleine hin.
-
Das kommt darauf an, was die Dateiliste für einen Zweck erfüllen soll.
Meist reicht ja schon _FileListToArray, das Array bearbeiten und _GUICtrlListView_AddArray.
Sollen noch Benutzeraktionen mit der Liste möglich sein, dann muss man halt noch etwas drumherum programmieren.Auf gar keinen Fall benutze ich aber Koda.

-
-
Vergiss Assign und benutze direkt ein Array zum speichern der Ctrl-IDs.
Wenn Du außerdem den OnEventMode für die GUI verwendest, kannst Du einfach @GUI_CtrlId auswerten.Edit: Im OnEventMode brauchst Du die Ctrl-IDs noch nicht mal zu speichern:
AutoIt
Alles anzeigen#include <FontConstants.au3> #include <GUIConstantsEx.au3> Opt('GUIOnEventMode', 1) Global $b_Split[20], $sCheck = '' For $i = 0 To 19 $b_Split[$i] = $i Next $iCols = UBound($b_Split) $gui_name = GUICreate("Händlername", 500, 500, 100, 100) GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui') GUISetFont(10, $FW_BOLD) $yPos = 10 For $j = 2 To $iCols - 5 GUICtrlCreateRadio($b_Split[$j], 10, $yPos, 300, 20) GUICtrlSetOnEvent(-1, '_CheckRadio') $yPos = $yPos + 30 Next $yPos = $yPos + 30 $ok = GUICtrlCreateButton("ok", 50, $yPos, 50, 25) GUICtrlSetOnEvent(-1, '_Ok') GUISetState() WinWaitClose($gui_name) Exit Func _CloseGui() GUIDelete($gui_name) EndFunc Func _Ok() MsgBox(48, 1, $sCheck) EndFunc Func _CheckRadio() $sCheck = GUICtrlRead(@GUI_CtrlId, 1) EndFunc -
Wobei UEZ mit _FileReadToArray schon recht hatte. Das funktioniert auch mit dem letzten Parameter bei dem Befehl. Allerdings nur, wenn alle Spalten gleich groß sind.
Mein Script passt das 2D-Array automatisch der längsten Spalte an.Für Deine "Suche & Ersetzen"-Aktion musst Du schon konkreter werden und (Beispiel-) Daten zur Verfügung stellen.
Was heißt "Gleichheit" und womit sollen sie ersetzt werden?
Nur innerhalb einer Spalte oder im gesamten Array?