True / false Auswertung..

Hallo Leute...

Ich steh gerade auf dem Schlauch...

Ich möchte einen Endschalter (INPUT_PULLUP) auswerten & diesen via Software ggf invertieren

hierzu hab ich ne Variable angelegt

#define invert_end_switch true // true or false

jetzt hab ich gerade nen blackout wie ich das ganze auswerte und ggf invertiere...

Wenn "invert_end_switch == true" dann soll "HIGH" = "LOW" sein & "LOW" = "HIGH".
Wenn "invert_end_switch == false" dann soll "HIGH" = "HIGH" sein & "LOW" = "LOW"

Ich komm jetzt nur nicht darauf wie ich das im Code umsetzen sollte...

:roll_eyes:

Gruß

#define ist eine Textersetzung, dies eine Variable:

bool invert_end_switch = true // true or false
...
invert_end_switch = !digitalRead(tasterPin);

Beachte das invertierende Ausrufezeichen!

Sollte aber dennoch funktionieren.. :wink:

über #define invert_end_switch true / false sag ich dem sketch ja nur ob der Endschalter invertiert werden soll, oder eben nicht...

Die Auswertung von true oder false bis hin zum entsprechenden Signal in die Software ist gerade das problem...

#define hat den Vorteil, das es wohl keinen Speicher "fressen" soll...

#define hat den Vorteil, das es wohl keinen Speicher “fressen” soll…

Ja und?
Da gibts auch noch andere, vermutlich bessere, Möglichkeiten!

Tipp:
Grundlagen lernen und dann erst optimieren, wenn es nötig ist.

Ansonsten verstehe ich nichts von dem was du da redest, oder was du willst.

Ich kann nur sagen:
Wenn du invertieren willst, dann tu das.

Generell die HIGH und LOW redefinen würd' ich nicht ...
Aber wenns sein muss, sowas:

#define INVERT_END_SWITCH true       // hier einstellen

#if INVERT_END_SWITCH 
#define EIN LOW
#define AUS HIGH
#else
#define EIN HIGH
#define AUS LOW
#endif

und im Code an den fraglichen Stellen nur EIN/AUS verwenden.

Hi

So (allerdings mit const boolean) definiere ich den Soll-Zustand des Pin bei gewünschtem aktivem Relais.
Damit ich nur den AKTIV-Zustand angeben brauch (und sich der AUS-Zustand eh davon unterscheidet und der User Da durchaus was falsch machen kann), wird der gegen-Part per NOT eingestellt.
const boolean relaisAN=LOW; //User-Eingabe
const boolean relaisAUS=!relaisAN;
Die Relais-Platinen (Klappertechnik und 2A-SSR) sind bei mir Beide Low-Aktiv.
Die Einzel-SSR (Bezeichnung 25DA,DC anzusteuern, AC schaltend, 25A maximaler Strom) akut HIGH-Aktiv.
(beim nächsten Entwurf werden hier ebenfalls die PLUS auf Vdd gelegt und die MINUS der Ansteuerung geschaltet - dann ist's Alles gleich und man muß nicht immer überlegen ...)
So kann ich aber, egal was ich verwende und wie Das intern tickt, eine Zeile im Sketch ändern und die Logik an den Pins dreht sich um.

MfG

Hallo,

hab meine Glaskugel poliert. Skipper meint vielleicht folgendes.

struct 
{
  const byte pin = 2;
  bool state;
  bool invert = !state;
} endschalter;


void setup(void)
{
  Serial.begin(9600);
  pinMode(endschalter.pin, INPUT_PULLUP);
}

void loop(void)
{ 

  endschalter.state = digitalRead(endschalter.pin);

  endschalter.invert = !endschalter.state;

  Serial.print(endschalter.state);
  Serial.print('\t');
  Serial.print(endschalter.invert);
  Serial.println();
}

Wenn du wirklich nur das negierte Tastersignal benötigst, also das orignale Tastersignal nicht benötigst, dann gehts noch kürzer.

struct 
{
  const byte pin = 2;
  bool state = true;
} endschalter;


void setup(void)
{
  Serial.begin(9600);
  pinMode(endschalter.pin, INPUT_PULLUP);
}

void loop(void)
{ 

  endschalter.state = !digitalRead(endschalter.pin);

  Serial.println(endschalter.state);
}

Hallo,

noch eine Variante

mit einer Function und parameter.

Gruß Heinz

#define switchinvert false // false oder true

const byte schalterPin = 2;
const byte led = 13;

void setup() {
  // put your setup code here, to run once:

  pinMode(schalterPin, INPUT_PULLUP);
  pinMode(led, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(led, leseEingang(schalterPin, switchinvert));
}

bool leseEingang(byte in, bool invert) {
  
  bool pin;
  if (invert)pin = !digitalRead(in);
  else pin = digitalRead(in);
  return pin;
}

Hi

Hätte das digitalRead nur 1x verbaut und dann nur den Zustand umgedreht.
Denke, das digitalRead wird wesentlich mehr Platz brauchen, als ein pin=!pin.
Ungetestet

MfG

postmaster-ino:
Hi

Hätte das digitalRead nur 1x verbaut und dann nur den Zustand umgedreht.
Denke, das digitalRead wird wesentlich mehr Platz brauchen, als ein pin=!pin.
Ungetestet

MfG

Hallo,

up´s da hast Du allerdings recht, das wäre´s gewesen

Heinz