Drucksensoren falsche Ausgabe

Guten Abend an alle,

ich habe eine Einrichtung mit [Drucksensoren], die nicht richtig funktionieren.

Die Idee an sich ist, dass ich Mdf-Platten habe. Der Sensor soll unter die Platte angebracht werden und somit ausgelöst werden, wenn jemand drauf steigt. Stellt sich eine Person auf die Platte soll Ton abgespielt werden. Geht die Person wieder runter, soll der Ton stoppen.

Solang ich den Sensor gedrückt halte , sollte er 'c' ausgeben und wenn ich den Sensor wieder loslasse, sollte er 'd' ausgeben.

Wenn ich aber den Sensor drücke, gibt er einfach abwechselnd 'c' und 'd' aus.

Ich bin ein absoluter Anfänger, daher sorry für die etwas unpräzise Erklärung. Das Seltsame ist, dass es vor ein paar Tagen noch funktioniert hat, also bin ich mir nicht sicher, ob die Sensoren das Problem sind oder ob ich den Code durcheinander gebracht habe, weil ich paar Anpassungen am Schwellenwert vorgenommen habe.

Vielen Dank schon mal im Voraus!

#include <Keyboard.h>

long lastInteraction = -999999;
boolean stat[] = {false, false, false, false};

char keyOn[] = {'a', 'c', 'e', 'g'};
char keyOff[] = {'b', 'd', 'f', 'h'};





int schwellenwert[] = {800, 800, 800, 800};

void setup() {
  Serial.begin(9600);
}

void loop() {

  for(int i = 0; i< 4; i++){
    int druck = analogRead(i);
    //int druck2 = analogRead(A0);
  
    Serial.print("druck");
    Serial.print(i);
    Serial.print(": ");
    Serial.print(druck);
    Serial.println();
  
    if (millis() - lastInteraction > 300) {
      if (!stat[i] && druck > schwellenwert[i]) {
        stat[i] = true;
        lastInteraction = millis();
        Keyboard.print(keyOn[i]);
      } else if(stat[i] && druck < schwellenwert[i]) {
        stat[i] = false;
        lastInteraction = millis();
        Keyboard.print(keyOff[i]);
      }
    }
  }
}

Vielleicht hat sich ein Erde gelöst? Legen Sie auch eine Masse auf das Gewicht. Dadurch werden Unvollkommenheiten des menschlichen Bewegungsapparates vermieden. (weil es ein ">" und ein "<" in der Schleife gibt und der Druck leicht mehr oder weniger als der vorherige Druck sein könnte)

Was gibt Dir denn der serielle Monitor aus?

Was meinen Sie mit Erde?

groud

So sieht das Ganze aus wenn ich den Sensor drücke.

Welche Masse würde sich da am besten eignen um das zu vermeiden?

Das nutzt mir nichts, das ist eine externe Seite, an die ich nicht komme.
Wenn Du

hier eine Ausgabe auf dem SerMon bekommst, dann kannst die komplett kopieren und hier in Codetags einfügen.
Notfalls erklär, was passiert - aber ich vermute, das das nicht wirklich weiterhilft ;(

Jede stabile Masse unter dem Maximum (Amazon sagt 30 kg).

Ihr Monitor zeigt, 0, 1 und 2 lesen Null, und nur 3 liest einen Wert. Ich gehe davon aus, dass 0 bis 3 die Ecken der Trittplatte sind und 0, 1 und 2 nicht verbunden sind.

Versuch mal den:

#include <Keyboard.h>
long lastInteraction = -999999;
boolean stat[] = {false, false, false, false};

char keyOn[] = {'a', 'c', 'e', 'g'};
char keyOff[] = {'b', 'd', 'f', 'h'};

int schwellenwert[] = {800, 800, 800, 800};

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  for (int i = 0; i < 4; i++)
  {
    int druck = analogRead(i);
    //int druck2 = analogRead(A0);
    Serial.print("druck");
    Serial.print(i);
    Serial.print(": ");
    Serial.print(druck);
    Serial.println();
  }
  if (millis() - lastInteraction > 300)
  {
    lastInteraction = millis();
    if (druck > schwellenwert[i])
    {
      if (!stat[i])
      {
        Keyboard.print(keyOn[i]);
        stat[i] = true;
      }
    }
    else
    {
      if (stat[i])
      {
        Keyboard.print(keyOff[i]);
        stat[i] = false;
      }
    }
  }
}

Was passiert?

Da kommt die Meldung "exit status 1
'druck' was not declared in this scope"

Ich konnte das Problem nun endlich lösen, danke für eure Hilfe!

#include <Keyboard.h>
long lastInteraction = -999999;
boolean stat[] = {false, false, false, false};

char keyOn[] = {'a', 'c', 'e', 'g'};
char keyOff[] = {'b', 'd', 'f', 'h'};



int schwellenwert[] = {50, 50, 50, 50};

void setup() {
  Serial.begin(9600);
}

void loop() {

  for(int i = 0; i< 4; i++){
    int druck = analogRead(i);
    //int druck2 = analogRead(A0);
  
    Serial.print("druck");
    Serial.print(i);
    Serial.print(": ");
    Serial.print(druck);
    Serial.println();

    Serial.print(stat[i]);
    
  
    if (millis() - lastInteraction > 100) {
      if (!stat[i] && druck > schwellenwert[i]) {
        stat[i] = true;
        lastInteraction = millis();
        Keyboard.print(keyOn[i]);
      } else if(stat[i] && druck < schwellenwert[i]) {
        stat[i] = false;
        lastInteraction = millis();
        Keyboard.print(keyOff[i]);
      }
    }
  }

}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.