Hallo zusammen, ich versuche mich gerade an der Programmierung eines Arduino Uno´s der einfach nicht machen will was ich ihm (falsch) sage :) Was ich machen möchte: An den Controller wird ein 3-Achsen-Beschleunigungssensor angeschlossen. Ich möchte damit die Geschwindigkeit einer Pressen Kolbenstange bestimmen. http://www.mikroe.com/add-on-boards/measurement/three-axis-accelerometer/ Die Schleife wird aktuell nur einmal durchlaufen. Später möchte ich diese mit zwei Endlagenschaltern im kompletten Hubzeitraum auswerten. Die Werte werden dann in den EEPROM abgespeichert und bei Gelegenheit mit dem Laptop ausgelesen Nun zu meinem Problem: Die Werte die aus dem EEPROM an die serielle geschickt werden unterscheiden sich stark zu den eingelesenen. Wieso ist das so? Außerdem habe ich das Problem das ich manchmal den Befehl "start" zum einlesen der Sensorwerte drei oder vier mal senden muss bis der Controller mit antwortet, obwohl dieser aber bei der LED Rx jedes mal aufblinkt.... Das gleiche auch beim Befehl zur Datenausgabe.... Da ich leider keine Ahnung habe wie ich hier einen Quellcode anfügen kann, habe ich den Sketch und ein Bild der Ausgabe des Controllers in den Anhang eingefügt. Ich hoffe ihr könnt mir helfen.
Quellcode einfügen über (c)code(/c), allerdings mit eckigen Klammern. Dein Problem mit dem vier mal Senden/Schreiben liegt sicher am FIFO Buffer. Informiere dich mal darüber, <bel. Suchmaschine> zeigt dir sicher wie du den ausschalten kannst. Der Königsweg wäre natürlich, einen Buffer zu Implementieren, der einen Timeout besitzt, nach dem er sich leert, vielleicht lässt sich das auch konfigurieren? Ansonsten musst du Spezifizieren: Was bedeutet "weicht stark ab" (Der Schlüssel bei solchen Problemen ist es, den Zusammenhang der Daten zu finden). Ob das mit dem EEPROM Sinn ergibt, solltest du auch im Rahmen deines Projektes klären. Die Frage hierbei ist: Warum keine SD Karte bzw. warum kein Live-Serial-Laptop-Logging? Was ich meine ist: Eigentlich will man bei solchen Messungen hohe Auflösungen. So gibt zB das SenseHat(?) für den Raspberry Pi 2 über 200Hz an Daten aus. 100 Hz wären alle 10ms, das könnte man sich je nachdem schon antun. Damit hast du aber 100 * 3 = 300 Byte/s, die den EEPROM füllen, bei 32bit sogar 1.2 kByte/s Zurück zu den Zahlen nochmal: Was für Datentypen verwendest du? Schreibst/Liest du zufällig nur uint's aber dein Sensor hat offensichtlich Ints? Du nutzt > 255, ergo mindestens int16_t. Bedenkst du beim lesen, dass du beide Bytes lesen musst? Und achtest du auf die Reihenfolge (Endianess)? Lässt sich leicht mit dem Taschenrechner nachprüfen
Polsterreiniger schrieb: > Die Werte die aus dem EEPROM an die serielle geschickt werden > unterscheiden sich stark zu den eingelesenen. Wieso ist das so?
1 | EEPROM.write(address, SensorValueX - SensorXmax / 4); |
2 | Serial.println(SensorValueX - SensorXmax); |
Wolltest du genau das ? SensorValueX - (SensorXmax / 4) Sende die SensorValues zu serial, nicht nur die berechneten Werte.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
