Messwert mit Tabelle an div Output schreiben

Hallo Zusammen,

ich hab da ein kleines Problem, ich will diverse (8) Ausgänge in Abhängigkeit eines Sensorwert den ich von einem Laser Entfernungsmesser bekomme ausgeben. Jeder mm (Sensorwert) hat ein eigenes Byte das ich idealerweise in Hex in eine Tabelle schreibe. Leider hab ich keine Idee wie ich das mache.
Wenn jemand so was schon hat oder gemacht hat könnte er mir vielleicht über den Baum helfen :slight_smile:

Danke schon mal

Was bedeutet das:

Jeder mm (Sensorwert) hat ein eigenes Byte

?
Grüße Uwe

Hi

Ausgänge (8 Stück) oder 2 Werte, Die aufgrund des Laser-Messwert benutzt werden, irgendwo eintragen?
Der 'Tabelle' ist's wahrlich egal, ob Du in HEX, BIN, OCT, DEZ oder was ganz Wildem schreibst, wobei mit dem Wildem könntest Du Probleme bekommen - den Rest kann der Arduino schon 'von Haus aus'.
Soll heißen: HEX,DEZ,OCT,BIN ist NUR für Dich als Mensch da - für den µC sind Das Alles Einsen und Nullen (... Binär).

MfG

Hallo,

willst eventuell einen LED Balken bauen bei dem abhänhig vom Messwert unterschiedliche Ausgänge angesteuert werden ??

Heinz

Sorry ich war anscheinend zu Ungenau in meiner Beschreibung... blöd von mir.

Ich bekomme von einem Laserentfernungsmesser einen Wert in Millimeter. Den will ich mit einer Tabelle vergleichen und mit 8 Output verschiedene Schaltzustände ausgeben. Es geht hier um einen Simulator von einem Aufzug, der Sensor mit den Ausgängen soll die Schaltzustände der Positionssensoren simulieren. Da ich über mehrere original Aufzugsteuerungen verfüge möchte ich das Teil ein bisschen variabel gestalten um die verschiedenen Anforderungen der Steuerungen abbilden zu können.
@Uwefed mm soll Millimeter sein.
@Rentner Ja man kann das vielleicht mit einem LED Balken vergleichen.
@postmaster-ino Das ich hier in den verschiedenen code Varianten den wert eingeben kann ist schon klar aber wie schaut das als code aus?
Da sehe ich wohl den Wald vor lauter Bäumen nicht...
Danke schon mal :slight_smile:

Hi

8 Ausgänge entsprächen einem 8Bit-Wert, also Zahl 0...255.
Wenn bei Abstand 0...1021 der Wert 121 binär auf die Ausgänge gelegt werden soll - kein Problem.
Entweder einzeln, also die 121 zerlegt und bitweise 'geschaut', ob Da eine 1 steht und dann den Ausgang entsprechend setzen, mit externem Port-Expander (Dem kann man die Zahl quasi vor die Füße werfen, die 8 Ausgänge setzen sich dann fast automatisch), oder, wenn Du gut planst und ein komplettes Port als diese 8 Ausgänge benutzt - geht auf dem Uno/Nano nicht, da PB0/1 von der Seriellen benutzt werden - auf dem Mega hättest Du aber per
PORTA=121;
PORTC=121;
PORTE=121;
...
( https://www.arduino.cc/en/Hacking/PinMapping2560 )
mit einer Zuweisung 8 Ausgänge geschaltet.

Meinst Du Das?

MfG

Hallo,

Du konntest die 8 Ausgänge über ein Array deffinieren und über einen Index ansteuern.

in einer Schleife 0-7 und einer If abfrage bei der der Vergleichswert abhängig von der Scheifenvariablen berechnet wird steuerst Du den Ausgang mit dem Index der Schleife an.

ich hoffe das war verständlich

Heinz

Hallo

Hab da noch mal über Dein Problem nachgedach.

so wie ich das jetzt verstehe benötigst Du 8 Ausgänge die Abghängig von einem Messwert 0-1000mm
an unterschiedlichen Stellen ein und ausgeschaltet werden. So als wären 8 Näherungsinitiatoren auf dem Messweg verteilt. Ausgang 1 bei 100mm ein und bei 120mm wieder aus usw. Damit hättest Du dann die Positionen der Etagen für den Aufzug nachgebildet.

Die Schaltpunkte sind in einem Array abgelegt , das entspricht Deinem Wunsch nach einer "Tabelle".

ich hab da mal mit 5 Schaltpunkten gebaut und einem Messwert der für mich zur Simulation auf und ab läuft.

Heinz

byte led[5] = {8, 9, 10, 11, 12}; // Ausgänge Pins festlegen 
int schaltpunkt[5] = {200, 400, 500, 600, 800}; // Schaltpunlte
int wert;     // messwert
int hyst=20;  // schalthysterese
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  for (byte i = 0; i < 5; i++) {
    pinMode(led[i], OUTPUT);
  }
}

void loop() {
  
// Messwert hochlaufen lassen zur simulation
  for ( wert = 0; wert <= 1000; wert++) {
    ausgaenge();
    Serial.println(wert);
    delay(10);
  }
// Messwerte runter laufen lassen zu Simulation
  for (wert = 1000; wert >= 0; wert--) {
    ausgaenge();
    Serial.println(wert);
    delay(10);
  }
}
// Ansteuerung der Ausgänge
void ausgaenge() {
  for (byte i = 0; i < 5; i++) {
    int s = schaltpunkt[i] + hyst;
    if (wert > schaltpunkt[i] && wert < s) {
      digitalWrite(led[i], HIGH);
    }
    else digitalWrite(led[i], LOW);
  }
}

Danke für die super Anregung...
Wenn ich durch habe melde ich mich nochmal