Zykluszeit mit Kapazitiven Sensoren liegt bei 4-5 Sekunden

Hallo Zusammen,

ich habe mein erstes Arduino Projekt gestartet und habe das Problem, dass die Zykluszeit rund 4-5 Sekunden ist.

Die Aufgabe vom Arduino Nano besteht darin, einen Würfel unterschiedlich zu beleuchten.
Die verschiedenen Szenarien werden über 3 "Sensoren" eingelesen. Die Ansteuerung des LED Strips erfolgt über den PIN 2.

Der Code funktioniert grundsätzlich so, wie ich das haben möchte, jedoch reagiert das ganze sehr träge, da die Zykluszeit zu gross ist. Ich habe bereits versucht meinen Code in Funktionen zu packen und diese aufzurufen. Leider weiss ich nicht mehr weiter, wo ich meinen Code optimieren muss oder was ich falsch gemacht habe. Kann mir da jemand helfen die Zykluszeit unter 1 Sekunde zu bringen?

Ich bedanke mich bereits im Voraus für die Antworten.


//*********************************************************************************
#include <CapacitiveSensor.h>
#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
CapacitiveSensor SensorAmbiente = CapacitiveSensor(4, 6);
CapacitiveSensor SensorService = CapacitiveSensor(5, 7);
CapacitiveSensor SensorZahlen = CapacitiveSensor(8, 10);

#define PIN 2
#define NUMPIXELS 16
#define led 13
#define FWZ 15 //Farbwechsel Zeit
#define TVZ 500 // Verzögerungszeit für die Berührung

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

bool AnforderungService;
bool AnforderungZahlen;
bool AnforderungAmbiente;
bool AnforderungOnOff;
bool FreigabeOnOff;
bool FaderichtungRed;
bool FaderichtungBlue;
int pos;
int r;
int g;
int b;
int w;
int x;
int GWBeruehrung; // Grenzwert für die Berührung
int incoming = 0;
long ValueAmbiente;
long ValueService;
long ValueZahlen;
long int SoftwareVersion; // Software Version
unsigned long lastMillis;
unsigned long myTimeout = 30000;
unsigned long lastMillisOnOff;
unsigned long myTimeoutOnOff = 10000;
//*********************************************************************************

//*********************************************************************************
void setup() {
  Serial.begin(230400);
  pinMode(led, OUTPUT);
  pixels.begin();
  FaderichtungRed = HIGH;
  FaderichtungBlue = HIGH;
  AnforderungOnOff = LOW;
  FreigabeOnOff = LOW;
  pos = 0;
  lastMillis = 0;
  lastMillisOnOff = 0;
  GWBeruehrung = 200;
  incoming = 0;
  x = 0;
  SoftwareVersion = 20220915;
}
//*********************************************************************************

//*********************************************************************************
void loop() {
  Sensoren(); // Funktion Sensoren auslesen
  Eingaenge(); // Funktion Eingänge verarbeiten zu Zustände
  Auswahl(); // Funktion Auswahl für Pos tätigen
  Ausgaenge (); // Funktion Ausgänge schreiben
  incoming = EingabeSeriell(incoming); // Funktion Eingabe Seriell
  if (incoming >= 1) { // Funktion Ausgabe Seriell
    AusgabeSeriell();
  }
  else {
    Serial.println("B&G: Eingabge tätigen");
  }
}
//*********************************************************************************

//*********************************************************************************
void  Sensoren () {
  ValueAmbiente = SensorAmbiente.capacitiveSensor(30);
  ValueService = SensorService.capacitiveSensor(30);
  ValueZahlen = SensorZahlen.capacitiveSensor(30);
}
//*********************************************************************************

//*********************************************************************************
void Eingaenge () {

  while ((ValueService >= GWBeruehrung && ValueZahlen >= GWBeruehrung)  || incoming == 5 && !FreigabeOnOff) {
    if (!AnforderungOnOff) {
      lastMillisOnOff = millis();
      AnforderungOnOff = !AnforderungOnOff;
    }
    else if ((millis() - lastMillisOnOff) >= myTimeoutOnOff) {
      FreigabeOnOff = HIGH;
      AnforderungOnOff = !AnforderungOnOff;
      break;
    }
  }
  Sensoren();
  incoming = EingabeSeriell(incoming); // Funktion Eingabe Seriell
  if (incoming >= 1) { // Funktion Ausgabe Seriell
    AusgabeSeriell();
  }
  else {
    Serial.println("B&G: Eingabge tätigen");
  }

  if ((ValueService >= GWBeruehrung || incoming == 2) && pos > 0) {
    AnforderungService = HIGH;
    AnforderungZahlen = LOW;
    AnforderungAmbiente = LOW;
  }
  else if ((ValueZahlen >= GWBeruehrung || incoming == 4) && pos > 0) {
    AnforderungZahlen = HIGH;
    AnforderungService = LOW;
    AnforderungAmbiente = LOW;
  }
  else if ((ValueAmbiente >= GWBeruehrung || incoming == 1) &&  pos > 0) {
    AnforderungAmbiente = HIGH;
    AnforderungService = LOW;
    AnforderungZahlen = LOW;
  }
}
//*********************************************************************************


//*********************************************************************************
void Auswahl() {
  //--Pos 1 auswahl Ambiente--------------------------------------------------------------
  if (AnforderungAmbiente) {
    pos = 1;
    AnforderungAmbiente = !AnforderungAmbiente;
  }
  //--Pos 2 auswahl Service---------------------------------------------------------------
  else if (AnforderungService && !(pos == 2) && !(pos == 3)) {
    lastMillis = millis();
    pos = 2;
    AnforderungService = !AnforderungService;
  }
  //--Pos 3 auswahl Service Faden ---------------------------------------------------------
  else if (pos == 2 && (millis() - lastMillis) >= myTimeout && !(pos == 3)) {
    pos = 3;
  }
  //--Pos 4 auswahl Zahlen-----------------------------------------------------------------
  else if (AnforderungZahlen && !(pos == 4) && !(pos == 5)) {
    lastMillis = millis();
    pos = 4;
    AnforderungZahlen = !AnforderungZahlen;
  }
  //--Pos 5 auswahl Zahlen Faden ---------------------------------------------------------
  else if (pos == 4 && (millis() - lastMillis) >= myTimeout && !(pos == 5)) {
    pos = 5;
  }

  if (FreigabeOnOff && (pos > 0)) {
    pos = 0;
    FreigabeOnOff = !FreigabeOnOff;
  }
  else if (FreigabeOnOff && (pos == 0)) {
    pos = 1;
    FreigabeOnOff = !FreigabeOnOff;
  }


  //--CASE definition---------------------------------------------------------
  //Case 0 = Lampen aus (Standbay)
  //Case 1 = Ambiente Beleuchtung
  //Case 2 = Service Beleuchtung
  //Case 3 = Service Beleuchtung Einschaltverzögerung (Faden)
  //Case 4 = Zahlen Beleuchtung
  //Case 5 = Zahlen Beleuchtung Einschaltverzögerung (Faden)

  switch (pos) {
    //(POS == 1 ) ---- Ambiente Beleuchtung ------------------------------------------------------------
    case 1:
      r = 255;
      g = 255;
      b = 255;
      w = 0;
      break;
    //(POS == 2 ) ---- Service Beleuchtung ------------------------------------------------------------
    case 2:
      r = 255;
      g = 0;
      b = 0;
      w = 0;
      break;
    //(POS == 3 ) ---- Service Beleuchtung Faden ------------------------------------------------------
    case 3:
      r = FadenRed (r);
      g = 0;
      b = 0;
      w = 0;
      break;
    //(Pos == 4) ---- Zahlen Beleuchtung --------------------------------------------------------------
    case 4:
      r = 0;
      g = 0;
      b = 255;
      w = 0;
      break;
    //(Pos == 5) ---- Zahlen Beleuchtung Faden ---------------------------------------------------------
    case 5:
      r = 0;
      g = 0;
      b = FadenBlue (b);
      w = 0;
      break;
    // (Pos < 1) ----Beleuchtung Ausschalten -----------------------------------------------------------
    default:
      r = 0;
      g = 0;
      b = 0;
      w = 0;
  } // Switch abschluss
}
//*********************************************************************************


//*********************************************************************************
int FadenRed (int FadeValueRed) {
  if (FadeValueRed < 30) {
    FaderichtungRed = !FaderichtungRed;
  }
  else if (FadeValueRed > 255) {
    FaderichtungRed = !FaderichtungRed;
  }
  if (FaderichtungRed == HIGH) {
    FadeValueRed = FadeValueRed - 10;
  }
  else if (FaderichtungRed == LOW) {
    FadeValueRed = FadeValueRed + 10;
  }
  return FadeValueRed;
}
//*********************************************************************************


//*********************************************************************************
int FadenBlue (int FadeValueBlue) {
  if (FadeValueBlue < 30) {
    FaderichtungBlue = !FaderichtungBlue;
  }
  else if (FadeValueBlue > 255) {
    FaderichtungBlue = !FaderichtungBlue;
  }
  if (FaderichtungBlue == HIGH) {
    FadeValueBlue = FadeValueBlue - 10;
  }
  else if (FaderichtungBlue == LOW) {
    FadeValueBlue = FadeValueBlue + 10;
  }
  return FadeValueBlue;
}
//*****************************************************************************************************************************************************************************************************************

//*********************************************************************************
void Ausgaenge () {
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(r, g, b)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
  }
}
//*********************************************************************************


//*********************************************************************************
int EingabeSeriell (int Wert)
{
  if (Serial.available() > 0) {
    x = Serial.read() - 48;
    if (x >= 0 && x <= 9) {
      Wert = x;
    }
    else {
      Wert == 0;
      Serial.println(" ");
      Serial.println("B&G: Eingabe Falsch Bitte eine Zahl von 0 bis 9 angeben");
      Serial.println(" ");
    }
    return Wert;
  }
}
//*********************************************************************************

//*********************************************************************************
void AusgabeSeriell ()
{
  Serial.println(" ");
  Serial.print("Aktuellwert_Sensor_Zahlen: ");
  Serial.println(ValueZahlen);
  Serial.print("Aktuellwert_Sensor_Service: ");
  Serial.println(ValueService);
  Serial.print("Aktuellwert_Sensor_Ambiente: ");
  Serial.println(ValueAmbiente);
  Serial.println(" ");
  Serial.print("Ausgang_rot: ");
  Serial.println(r);
  Serial.print("Ausgang_gelb: ");
  Serial.println(g);
  Serial.print("Ausgang_blau: ");
  Serial.println(b);
  Serial.print("Ausgang_weiss: ");
  Serial.println(w);
  Serial.println(" ");
  Serial.print("Software_Version: ");
  Serial.println(SoftwareVersion);
  Serial.println(" ");
  Serial.print("Eingabebefehl: ");
  Serial.println(incoming);

  switch (pos) {
    //(POS == 1 ) ---- Ambiente Beleuchtung ------------------------------------------------------------
    case 1:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Ambiente Beleuchtung");
      Serial.println(" ");
      break;
    //(POS == 2 ) ---- Service Beleuchtung ------------------------------------------------------------
    case 2:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Service Beleuchtung");
      Serial.println(" ");
      break;
    //(POS == 3 ) ---- Service Beleuchtung Faden ------------------------------------------------------
    case 3:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Service Beleuchtung Faden");
      Serial.println(" ");
      break;
    //(Pos == 4) ---- Zahlen Beleuchtung --------------------------------------------------------------
    case 4:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Zahlen Beleuchtung");
      Serial.println(" ");
      break;
    //(Pos == 5) ---- Zahlen Beleuchtung Faden ---------------------------------------------------------
    case 5:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Zahlen Beleuchtung Faden");
      Serial.println(" ");
      break;
    // (Pos < 1) ----Beleuchtung Ausschalten -----------------------------------------------------------
    default:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Ausgeschalten");
      Serial.println(" ");
  } // Switch abschluss
}
//*********************************************************************************

Mein Rat:
Mach die Schleife in void Eingaenge () weg.

Ich möchte darauf wetten, dass die viel Zeit frisst.
Das kannst du überprüfen!

Hallo Combie,

Vielen dank für die Rückmeldung. Habe deinen Rat umgesetzt und die Zykluszeit ist ein wenig besser geworden. Liegt nun bei 3 Sekunden.

Erwarte ich da vom Arduino Nano zu viel oder liegt es an meiner Software Struktur?


//*********************************************************************************
#include <CapacitiveSensor.h>
#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
CapacitiveSensor SensorAmbiente = CapacitiveSensor(4, 6);
CapacitiveSensor SensorService = CapacitiveSensor(5, 7);
CapacitiveSensor SensorZahlen = CapacitiveSensor(8, 10);

#define PIN 2
#define NUMPIXELS 16
#define led 13
#define FWZ 15 //Farbwechsel Zeit
#define TVZ 500 // Verzögerungszeit für die Berührung

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

bool AnforderungService;
bool AnforderungZahlen;
bool AnforderungAmbiente;
bool AnforderungOnOff;
bool FreigabeOnOff;
bool FaderichtungRed;
bool FaderichtungBlue;
int pos;
int r;
int g;
int b;
int w;
int x;
int GWBeruehrung; // Grenzwert für die Berührung
int incoming = 0;
long ValueAmbiente;
long ValueService;
long ValueZahlen;
long int SoftwareVersion; // Software Version
unsigned long lastMillis;
unsigned long myTimeout = 30000;
unsigned long lastMillisOnOff;
unsigned long myTimeoutOnOff = 10000;
//*****************************************************************************************************************************************************************************************************************

//*****************************************************************************************************************************************************************************************************************
void setup() {
  Serial.begin(230400);
  pinMode(led, OUTPUT);
  pixels.begin();
  FaderichtungRed = HIGH;
  FaderichtungBlue = HIGH;
  AnforderungOnOff = LOW;
  FreigabeOnOff = LOW;
  pos = 0;
  lastMillis = 0;
  lastMillisOnOff = 0;
  GWBeruehrung = 200;
  incoming = 0;
  x = 0;
  SoftwareVersion = 20220915;
}
//*********************************************************************************
//*********************************************************************************
void loop() {
  Sensoren(); // Funktion Sensoren auslesen
  Eingaenge(); // Funktion Eingänge verarbeiten zu Zustände
  Auswahl(); // Funktion Auswahl für Pos tätigen
  Ausgaenge (); // Funktion Ausgänge schreiben
  incoming = EingabeSeriell(incoming); // Funktion Eingabe Seriell
  if (incoming >= 1) { // Funktion Ausgabe Seriell
    AusgabeSeriell();
  }
  else {
    Serial.println("B&G: Eingabge tätigen");
  }
}
//*********************************************************************************

//*********************************************************************************
void  Sensoren () {
  ValueAmbiente = SensorAmbiente.capacitiveSensor(30);
  ValueService = SensorService.capacitiveSensor(30);
  ValueZahlen = SensorZahlen.capacitiveSensor(30);
}
//*********************************************************************************

//*********************************************************************************
void Eingaenge () {

  if ((ValueService >= GWBeruehrung && ValueZahlen >= GWBeruehrung)  || incoming == 5 && !FreigabeOnOff) {
    if (!AnforderungOnOff) {
      lastMillisOnOff = millis();
      AnforderungOnOff = !AnforderungOnOff;
    }
    else if ((millis() - lastMillisOnOff) >= myTimeoutOnOff) {
      FreigabeOnOff = HIGH;
      AnforderungOnOff = !AnforderungOnOff;
    }
  }
 else if ((ValueService >= GWBeruehrung || incoming == 2) && pos > 0) {
    AnforderungService = HIGH;
    AnforderungZahlen = LOW;
    AnforderungAmbiente = LOW;
  }
  else if ((ValueZahlen >= GWBeruehrung || incoming == 4) && pos > 0) {
    AnforderungZahlen = HIGH;
    AnforderungService = LOW;
    AnforderungAmbiente = LOW;
  }
  else if ((ValueAmbiente >= GWBeruehrung || incoming == 1) &&  pos > 0) {
    AnforderungAmbiente = HIGH;
    AnforderungService = LOW;
    AnforderungZahlen = LOW;
  }
}
//*****************************************************************************************************************************************************************************************************************


//*********************************************************************************
void Auswahl() {
  //--Pos 1 auswahl Ambiente--------------------------------------------------------------
  if (AnforderungAmbiente) {
    pos = 1;
    AnforderungAmbiente = !AnforderungAmbiente;
  }
  //--Pos 2 auswahl Service---------------------------------------------------------------
  else if (AnforderungService && !(pos == 2) && !(pos == 3)) {
    lastMillis = millis();
    pos = 2;
    AnforderungService = !AnforderungService;
  }
  //--Pos 3 auswahl Service Faden ---------------------------------------------------------
  else if (pos == 2 && (millis() - lastMillis) >= myTimeout && !(pos == 3)) {
    pos = 3;
  }
  //--Pos 4 auswahl Zahlen-----------------------------------------------------------------
  else if (AnforderungZahlen && !(pos == 4) && !(pos == 5)) {
    lastMillis = millis();
    pos = 4;
    AnforderungZahlen = !AnforderungZahlen;
  }
  //--Pos 5 auswahl Zahlen Faden ---------------------------------------------------------
  else if (pos == 4 && (millis() - lastMillis) >= myTimeout && !(pos == 5)) {
    pos = 5;
  }

  if (FreigabeOnOff && (pos > 0)) {
    pos = 0;
    FreigabeOnOff = !FreigabeOnOff;
  }
  else if (FreigabeOnOff && (pos == 0)) {
    pos = 1;
    FreigabeOnOff = !FreigabeOnOff;
  }


  //--CASE definition---------------------------------------------------------
  //Case 0 = Lampen aus (Standbay)
  //Case 1 = Ambiente Beleuchtung
  //Case 2 = Service Beleuchtung
  //Case 3 = Service Beleuchtung Einschaltverzögerung (Faden)
  //Case 4 = Zahlen Beleuchtung
  //Case 5 = Zahlen Beleuchtung Einschaltverzögerung (Faden)

  switch (pos) {
    //(POS == 1 ) ---- Ambiente Beleuchtung ------------------------------------------------------------
    case 1:
      r = 255;
      g = 255;
      b = 255;
      w = 0;
      break;
    //(POS == 2 ) ---- Service Beleuchtung ------------------------------------------------------------
    case 2:
      r = 255;
      g = 0;
      b = 0;
      w = 0;
      break;
    //(POS == 3 ) ---- Service Beleuchtung Faden ------------------------------------------------------
    case 3:
      r = FadenRed (r);
      g = 0;
      b = 0;
      w = 0;
      break;
    //(Pos == 4) ---- Zahlen Beleuchtung --------------------------------------------------------------
    case 4:
      r = 0;
      g = 0;
      b = 255;
      w = 0;
      break;
    //(Pos == 5) ---- Zahlen Beleuchtung Faden ---------------------------------------------------------
    case 5:
      r = 0;
      g = 0;
      b = FadenBlue (b);
      w = 0;
      break;
    // (Pos < 1) ----Beleuchtung Ausschalten -----------------------------------------------------------
    default:
      r = 0;
      g = 0;
      b = 0;
      w = 0;
  } // Switch abschluss
}
//*********************************************************************************


//*********************************************************************************
int FadenRed (int FadeValueRed) {
  if (FadeValueRed < 30) {
    FaderichtungRed = !FaderichtungRed;
  }
  else if (FadeValueRed > 255) {
    FaderichtungRed = !FaderichtungRed;
  }
  if (FaderichtungRed == HIGH) {
    FadeValueRed = FadeValueRed - 10;
  }
  else if (FaderichtungRed == LOW) {
    FadeValueRed = FadeValueRed + 10;
  }
  return FadeValueRed;
}
//*****************************************************************************************************************************************************************************************************************


//*****************************************************************************************************************************************************************************************************************
int FadenBlue (int FadeValueBlue) {
  if (FadeValueBlue < 30) {
    FaderichtungBlue = !FaderichtungBlue;
  }
  else if (FadeValueBlue > 255) {
    FaderichtungBlue = !FaderichtungBlue;
  }
  if (FaderichtungBlue == HIGH) {
    FadeValueBlue = FadeValueBlue - 10;
  }
  else if (FaderichtungBlue == LOW) {
    FadeValueBlue = FadeValueBlue + 10;
  }
  return FadeValueBlue;
}
//*********************************************************************************

//*********************************************************************************
void Ausgaenge () {
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(r, g, b)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
  }
}
//*********************************************************************************


//*********************************************************************************
int EingabeSeriell (int Wert)
{
  if (Serial.available() > 0) {
    x = Serial.read() - 48;
    if (x >= 0 && x <= 9) {
      Wert = x;
    }
    else {
      Wert == 0;
      Serial.println(" ");
      Serial.println("B&G: Eingabe Falsch Bitte eine Zahl von 0 bis 9 angeben");
      Serial.println(" ");
    }
    return Wert;
  }
}
//*********************************************************************************


//*********************************************************************************
void AusgabeSeriell ()
{
  Serial.println(" ");
  Serial.print("Aktuellwert_Sensor_Zahlen: ");
  Serial.println(ValueZahlen);
  Serial.print("Aktuellwert_Sensor_Service: ");
  Serial.println(ValueService);
  Serial.print("Aktuellwert_Sensor_Ambiente: ");
  Serial.println(ValueAmbiente);
  Serial.println(" ");
  Serial.print("Ausgang_rot: ");
  Serial.println(r);
  Serial.print("Ausgang_gelb: ");
  Serial.println(g);
  Serial.print("Ausgang_blau: ");
  Serial.println(b);
  Serial.print("Ausgang_weiss: ");
  Serial.println(w);
  Serial.println(" ");
  Serial.print("Software_Version: ");
  Serial.println(SoftwareVersion);
  Serial.println(" ");
  Serial.print("Eingabebefehl: ");
  Serial.println(incoming);

  switch (pos) {
    //(POS == 1 ) ---- Ambiente Beleuchtung ------------------------------------------------------------
    case 1:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Ambiente Beleuchtung");
      Serial.println(" ");
      break;
    //(POS == 2 ) ---- Service Beleuchtung ------------------------------------------------------------
    case 2:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Service Beleuchtung");
      Serial.println(" ");
      break;
    //(POS == 3 ) ---- Service Beleuchtung Faden ------------------------------------------------------
    case 3:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Service Beleuchtung Faden");
      Serial.println(" ");
      break;
    //(Pos == 4) ---- Zahlen Beleuchtung --------------------------------------------------------------
    case 4:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Zahlen Beleuchtung");
      Serial.println(" ");
      break;
    //(Pos == 5) ---- Zahlen Beleuchtung Faden ---------------------------------------------------------
    case 5:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Zahlen Beleuchtung Faden");
      Serial.println(" ");
      break;
    // (Pos < 1) ----Beleuchtung Ausschalten -----------------------------------------------------------
    default:
      Serial.println(" ");
      Serial.print("Anlagestatus: ");
      Serial.print("Ausgeschalten");
      Serial.println(" ");
  } // Switch abschluss
}
//*********************************************************************************

Hallo ,
mach erst mal das pixel.show() hinter die for Schleife
Heinz

Hallo Rentner,

vielen dank für deine Rückmeldung.
Ich habe das pixels.show(); hinter die For Schleife gesetzt.
Dies hat ebenfalls einen minimalen Beitrag geleistet zur Verbesserung der Zykluszeit.

void Ausgaenge () {
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(r, g, b)); // Moderately bright green color.
  }
      pixels.show(); // This sends the updated pixel color to the hardware.
}

Dein Problem ist die SensorFunktion:

void  Sensoren ()
{
  static byte umlauf = 0;
  if (umlauf > 2)
  {
    umlauf = 0;
  }
  switch (umlauf)
  {
    case 0: ValueAmbiente = SensorAmbiente.capacitiveSensor(30); break;
    case 1: ValueService = SensorService.capacitiveSensor(30); break;
    case 2: ValueZahlen = SensorZahlen.capacitiveSensor(30); break;
  }
  umlauf++;
}

Hallo,
dann hinter jeden Funktionsaufruf eine Serielle ausgabe. z.B

Sensoren(); // Funktion Sensoren auslesen
Serial.println("sensor beendet");

sowas damit Du herausbekommst was so lange dauert.
Heinz

Hallo my_xy_projekt,

das sieht nun wirklich gut aus :slight_smile: - Vielen dank für die tolle Rückmeldung.
Mit der Anpassung, welche du mir angegeben hast zwinge ich nun die Software dazu die einzelnen Sensoren nur einmal pro Zyklus auszulesen. Verstehe ich das richtig?

Für mich stellt sich hier die Frage, warum hat mir das Probleme gemacht? Habe ich die Sensor Werte zu lange / zu viel ausgelesen?

Hallo Rentner,

vielen dank für deinen Tipp habe ich gemacht :slight_smile: . Werde nun mal schauen, wo ich noch etwas optimieren kann / muss. :smiley:

Du liest jetzt mit jedem Durchlauf nur einen Sensor.
Beim nächsten Umlauf den nächsten Sensor .... und dann wieder von vorn.
Nimm mal DATEI - BEISPIELE - CapacitiverSensor - CapacitiveSensorSketch.

Da bekommst Du raus, was das auslesen aller drei an Zeit kostet und mit welchem Ergebnis.
Wenn das TimeOut zuschlägt, steht da -2 hinter jedem Sensor.

Hallo,
ich kenne die Lib nicht
d.h die lib blokiert ??? gibt´s da keine andere Möglichkeit ?
Gruß Heinz

Lib GitHub - PaulStoffregen/CapacitiveSensor: Detect touch or proximity by capacitve sensing

Ja, wenn irgendwas mit den Anschlüssen nicht richtig ist.
In der Lib gibt es auch debugausgaben, aber wenn der Sensor -2 aus dem example zurück gibt, dann haben wir es schon.

Dann sind mir Taster lieber :wink:

Hallo my_xy_projekt,

du hattest recht - ich habe nur einen Sensor zur Zeit am Arduino Nano. Die anderen zwei Sensoren haben mir einen Wert von -2 zurück gegeben. Als ich die zwei Sensoren deaktiviert habe, war die Zykluszeit wieder im ms Sekunden Bereich

Bildschirmfoto 2022-09-16 um 15.06.00

Herzlichen Dank. das hätte ich nicht so schnell realisiert :smiley:

Aehm.. das hätte Dir aber auffallen müssen, denn nach #8 hast Du jeden Sensor einzeln gelesen. Da hätte dann ein Umlauf im ms-Bereich sein müssen und 2 Umläufe im Sekundenberech....

Aber Schick, wenns funktioniert.
Dann darfst Du gerne auch wieder Deine originale Sensorroutine nehmen, wenn alle Sensoren dran sind :wink:

Wenn Du im ersten Beitrag die Überschrift von Arduino Nano auf Kapazitiver Sensor änderst und dann die Lösung anhakst, findet es auch ggfls. die Nachwelt mit der Suchfunktion des Forum. :wink:

aber ich hatte nie einen schnellen Zyklus und zwei langsame Zyklen... :face_with_diagonal_mouth:

Und die Änderungen werde ich selbstverständlich anpassen, damit alle davon profitieren. :smiley:

Benutze das F() Makro:
Serial.print(F("Aktuellwert_Sensor_Zahlen: "));
bei allen ausgaben von Text.
So sparst Du RAM da so der Text nicht im RAm zwischengespeichert wird.

Grüße Uwe

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