Beiträge von KaiR

    Hauptsketch:




    messenAbstand.h

    C
    1. #ifndef messenAbstand_H
    2. #define messenAbstand_H
    3. #include <SoftwareSerial.h>
    4. void messenAbstand(SoftwareSerial &);
    5. #endif


    messenAbstand.cpp

    C
    1. #include "messenAbstand.h"
    2. void messenAbstand(SoftwareSerial &sSerial) {
    3. sSerial.print("Abstand = "); //per Bluetooth an PC
    4. sSerial.println(60);
    5. // im Original werden in einer Schleife 20
    6. // Messungen durchgeführt und verarbeitet
    7. }

    @Franz: Wenn man sich so manches Profil anschaut, sofern es denn Angaben enthält, gibt es hier durchaus den ein oder anderen, der sich mit MCs oder Elektrotechnik beschäftigt.


    Es gibt hier also Leute, die zumindest ihrer Profilbeschreibung nach, einen entsprechenden Background haben müssten. Aber von denen liest man nichts. Ich bin jetzt einige Jahre hier im Forum aktiv und finde es überaus bedauerlich, dass hier kein Austausch entsteht bzw. der, den es mal gegeben hat, total eingeschlafen ist, weil die ehemals Aktiven ebenfalls keinen Sinn mehr darin gesehen haben sich hier zu beteiligen. Die sind halt ruhiger abgegangen als ich ;).


    Im Prinzip aber kann man dieses Forum dicht machen. Es reicht eine Webseite auf der die Artikel von René verlinkt sind und gut ist es.


    Diese „Enttäuschung“ äußere ich hin und wieder mal. In letzter Zeit häufiger.

    Ja, das ist halt kein Arduino. Nur ein MC der mit der Arduino IDE programmiert werden kann. Da der ESP32 zwei Kerne hat, bringt RTOS ja vielleicht etwas. Allerdings frage ich mich, was Du gegen millis() hast. Wenn Du ein paar Schiftregister setzen / lesen willst, wirst Du einen Versatz von ein paar Mikrosekunden. wohl kaum merken.


    Und selbst wenn du mehrere Threads hättest, die Daten schreiben oder lesen sollen, wäre das nicht wirklich „gleichzeitig“.


    Ich kenne leider keine Bibliothek, die Shiftregister unter RTOS bedient. Ich bin mit millis() für nicht blockierende Aktionen bisher immer zurecht gekommen. Aber ich habe nach dem MC gefragt, weil die Info für eine vernünftige Antwort nicht irrelevant ist.


    Vielleicht kennt ja jemand anderes hier im Forum eine Antwort zu der Frage.

    Ich würde mir da aber an Deiner Stelle nicht allzu viel Hoffnungen machen, weil das Publikum hier, bist auf sehr wenige Ausnahmen, sehr schreibfaul ist. Es gibt zwar einige die hier lesen aber kaum jemanden, der sich am Forum beteiligt.


    Ich schau hier eigentlich auch nur noch aus Gewohnheit vorbei.

    Zitat

    Das Einzige das wir wissen ist, dass ein Reset die Schaltung wieder neu starten lässt.

    @Pius: wir wissen nicht mal das sicher. Eingangs hat der TO geschrieben, dass der Arduino einen Neustart braucht um wieder zu funktionieren.

    Das deutet für mich darauf hin, dass das durchaus auch ein Softwarefehler sein kann (Speicherüberlauf) -> wie Du sagtest, Software läuft in den Tod.


    Davon will der TO aber nichts wissen, weil er sich auf Störungen durch die Schleifmaschinen eingeschossen hat, ohne es aber selber genau zu wissen.


    Wir wissen ja nicht mal, wie Arduino und PWM Treiber/Servos miteinander verdrahtet sind. Evtl. liegt auch hier ein Fehler vor (Netzteil überlastet).


    Wie ich schon sagte... das ist orakeln hier. Aber "Hellseher" gibt es meines Wissens nur in Geschichten und Sagen..


    Danke für Eure Beiträge, auch an Hans64 ...

    Liegt es an der Speissung? Unterdimensioniert?

    Oder an den grossen Schleifmaschinen welche er ein- und ausschaltet?

    Oder sogar am mobilen Stromgenerator an welchem alle Maschinen ab und zu angeschlossen sind.


    Wie soll man hier fundiert antworten?


    Du gibst z.B. keinerlei Informationen zu der Speisung preis. Kein Schaltplan, keine Software, nichts….

    Demnach kann höchstens orakelt werden. Und das bringt im Allgemeinen wenig bis gar nichts.


    Da du Arduino schreibst, vermute ich mal, dass Du die Software in C++ erstellt hast. Wird evtl. die String Klasse verwendet?

    Na also… geht doch. Wen. Du auf den Link in Beitrag #6 klickst und mal hochscrollst, erscheint auf der rechten Seite eine Linkliste. In ungefähr Mitte rechts, ist ein Link U8g2 Fonts zu finden.


    Dort findest Du alles zu den verfügbaren Fonts. Es empfiehlt sich, die Informationen direkt beim Entwickler zu holen. Die sind i.d.R. auch aktuell. Oft sind zusammengegoogelte Informationen schon etwas älter und nicht mehr so aktuell. Das kann zu Verwirrung führen.


    Über die beschriebene Linkliste erfährst du alles, was es zu der Bibliothek zu wissen gibt.

    Die Belegung ist nie egal.


    Versuch es mal damit:


    U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 7, /* reset=*/ 8);


    Da in der Bezeichnung "HW" steht, sollten die Pins CLK (SCK) / DIN (MOSI) von der Software vorausgesetzt werden und müssen nicht gesondert angegeben werden. Du könntest auch D/C am Controller auf 9 umstecken und somit den Eintrag in Zeile 64, aus dem von mir in #4 verlinken Beispiel, ohne Änderung übernehmen.


    Hier sind alle Konstruktor-Varianten für die Einbindung eines Displays aufgeführt: https://github.com/olikraus/u8…cpp#ssd1306-128x64_noname

    Nun ... ich kann mich nur wiederholen. Ich habe ja nicht gesagt, dass Deine Verdrahtung falsch ist. Ich fragte, warum Du nicht die gleiche Bibliothek wie bei der Eieruhr nutzt?


    Dann schrieb ich etwas von "Einarbeiten". Wenn man das nämlich macht, wird man schnell erfahren, dass die u8g2 mit I2C, 3-Wire und auch 4-Wire SPI Geräten zu betreiben ist. Man muss sich das schon anschauen, wenn einem der Code, der mit dem Display mitgeliefert wird, nicht gefällt.

    Oder Du muss versuchen den mitgelieferten Code zu verstehen. Aus meiner Sicht und da wiederhole ich mich auch, ist es einfacher, sich möglichst nur mit einer Bibliothek zu befassen. Aber das muss man halt machen! Diese herumkopiererei ohne Sinn und Verstand bringt einen nicht weiter.


    https://github.com/olikraus/U8…ge_buffer/PrintHelloWorld


    Schau Dir das verlinkte Beispiel an, such Dir aus den #defines ein U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI heraus (4W_HW_SPI = 4Wire Hardware SPI) und passe die Übergabeparameter an. Das sollte eigentlich funktionieren. Ich habe solch ein Display nicht, darum kann ich das nicht ausprobieren. Da musst Du jetzt alleine durch :).


    In Deinem Code unten fehlt u8g.begin() in setup().

    Warum verwendest du nicht die u8g2 Bibliothek wie bei der Eieruhr... ? Die U8g Lib ist "veraltet". Das soll jetzt nicht heißen, dass es damit nicht funktioniert.

    Aber es wäre doch sinnvoll, für die gleiche "Geräteklasse", wenn möglich, auch immer die gleiche Bibliotheke zu verwenden.


    Dann muss man sich auch nicht in zig verschiedene Bibliotheken "einarbeiten". Ja genau. "Einarbeiten". Das ist notwendig, wenn man Werkzeuge nutzen will. Man muss sie verstehen.


    Oft werden Objekte in setup() mit der begin() Methode initialisiert. In Deinem Codeschnipsel sehe ich davon nichts.

    Naja, kannst Dir ja das mal angucken... https://randomnerdtutorials.co…eb-server-spiffs-nodemcu/

    oder besser diesen hier, weil hier littleFS verwendet wird: https://randomnerdtutorials.co…-motor-esp8266-websocket/. Spiffs ist veraltet und wird nicht mehr lange unterstützt.


    Das ist zwar kein Futterautomat, aber eine Basis für eine Steuerung des ESP8266 per Web. Dann bekommst Du ein Gefühl dafür, was Du dir vorgenommen hast. Wenn Du dann mal was am laufen hast, kann Dir vielleicht bei konkreten Problemstellungen geholfen werden.