AND-Funktion // &-Funktion

HI, ich möchte über einen Lautsprecher 2 Frequenzen wieder geben, allerdings nur während der Betätigung eines Tasters und mit zeitgleich umgelegten Schalter, also im Endeffekt eine ganz simple &-Funktion, habe das Skript auch soweit geschrieben bekommen, nur leider funktioniert es nicht..

const int ButtonPin = 2;   // Pinbelegung des Tasters
const int Speaker = 8;   // Pinbelegung des Lautsprechers
const int SwitchI = 3;   // Pinbelegung des Schalters


int ButtonState = 1;
int SwitchIState = 2;
void setup() {

  pinMode(Speaker, OUTPUT);   // Lautsprecher als Ausgang, Output festlegen
  pinMode(ButtonPin, INPUT_PULLUP);   // Taster als Eingang, Input festlegen
  pinMode(SwitchI, INPUT_PULLUP);   // Schalter als Eingang, Input festlegen
}

void loop() {

  ButtonState = digitalRead(ButtonPin);
  SwitchIState = digitalRead(SwitchI);

  if (ButtonPin == LOW && SwitchI == LOW) {

    tone(8, 750);   // Ton (eine Freq. von 750Hz) ertönt
    delay(200);   // Tonzeit beträgt 200ms
    noTone(8);   // der erste Ton geht aus
    tone(8, 2500);   // Ton (eine Freq. von 2500Hz) ertönt
    delay(200);   // Tonzeit beträgt 200ms
    noTone(8);   // der zweite Ton geht aus

    digitalWrite(Speaker, HIGH);
  } else {

    digitalWrite(Speaker, LOW);
  }
}
  • lies im Forum how to nach wie man Code postet und ändere deinen Startpost
  • beschreibe was du von deinem Code erwartest - was er macht (SOLL) und was er fälschlicherweise macht (IST). "Leider funktioniert es nicht" ist keine Fehlerbeschreibung!

okey, also momentan macht er nichts, es ertönt kein Ton, egal welche Eingänge ich wie Schalte. Mir fällt kein Fehler im Skript auf, wie oben auch beschrieben soll der Lautsprecher ertönen wenn beide Eingänge ein HIGH geben, habe ich ja oben eigentlich erwähnt?

den Code habe ich geändert, bzw erneuert hochgeladen

Hier vermute ich einen Fehler :nerd_face:

dann starte die serielle schnittstelle mal und gibt dir den Status deiner Buttons aus .
Wenn du es nicht findest, trenne dein AND mal auf

 if (ButtonState == LOW)
 {
  Serial.print(F("ButtonState =")); Serial.println(ButtonState );
  if (SwitchIState == LOW)
  {
    Serial.print(F("SwitchlState=")); Serial.println(SwtichlState);
    tone(Speaker, 750);   // Ton (eine Freq. von 750Hz) ertönt

p.s. das glaube ich dir nicht

soll der Lautsprecher ertönen wenn beide Eingänge ein HIGH geben

du hast INPUT_PULLUP aktiviert - also gehe ich davon aus, dass du die Schalter nach GND geschalten hast und sie daher im Ruhemodus schon HIGH sind.

Bitte um einen Schaltplan und ein Echtbild aus der wir alle Verkabelungen erkennen können.

ja habe mich falsch ausgedrückt, ist ja wie ein unbelegter Eingang eines TTL's, daher der interne Pull-Up-widerstand und wie du auch richtig erkannt hast habe ich sie logischerweise nach grnd geschaltet, aber im skript habe ich es auch so geschrieben, dass der Lautsprecher bei low nur ertönen soll

den Schaltplan erstell ich mal schnell, gib mir 2 min :slight_smile:

die schnittstelle hab ich gestartet, aber leider zeigt es keine veränderung bei betätigen der eingänge

ff

a) gib mal eine Serial.print am Anfang rein, damit du überprüfen kannst dass deine Serielle richtig funktioniert
b) wenn das gegeben ist dann Überprüf mal deine Schalter, Verkabelung ... offenbar reagieren die nicht so wie du dir das erwartest...

habe ich auch schon dran gedacht, dass ich eventuell 2 variablen dafür initialisieren muss, hänge da nur leider etwas in der luft :smiley:

  ButtonState 1 = digitalRead(ButtonPin);
  ButtonState 2 = digitalRead(SwitchI);

  if (ButtonPin == LOW && SwitchI == LOW) {

evtl. eher so ?

schmarren. Programmieren ist kein rumgerate. Außerdem sagt dir der Kompiler sofort wenn was nicht funktioniert. Sowas brauchst gar nicht posten.

Echtbild vom Aufbau ?
Aktueller Sketch?
Ausgabe von der Seriellen?

ja aber man muss sich ja austesten und ich weis auch das der Kompiler eigentliche fehler anzeigt, jedoch tut er dies nicht und sagt mir stattdessen, dass es so passt, deswegen ja auch meine verwunderung und nachfrage hier im forum

aktueller sketch:

const int ButtonPin = 2;   // Pinbelegung des Tasters
const int Speaker = 8;   // Pinbelegung des Lautsprechers
const int SwitchI = 3;   // Pinbelegung des Schalters


int ButtonState = 1;
int SwitchIState = 2;
void setup() {

  pinMode(Speaker, OUTPUT);   // Lautsprecher als Ausgang, Output festlegen
  pinMode(ButtonPin, INPUT_PULLUP);   // Taster als Eingang, Input festlegen
  pinMode(SwitchI, INPUT_PULLUP);   // Schalter als Eingang, Input festlegen
}

void loop() {

  ButtonState = digitalRead(ButtonPin);
  SwitchIState = digitalRead(SwitchI);

  if (ButtonPin == LOW && SwitchI == LOW) {

    tone(8, 750);   // Ton (eine Freq. von 750Hz) ertönt
    delay(200);   // Tonzeit beträgt 200ms
    noTone(8);   // der erste Ton geht aus
    tone(8, 2500);   // Ton (eine Freq. von 2500Hz) ertönt
    delay(200);   // Tonzeit beträgt 200ms
    noTone(8);   // der zweite Ton geht aus

    digitalWrite(Speaker, HIGH);
  } else {

    digitalWrite(Speaker, LOW);
  }
}

echtbild und serielle ausgabe folgen

Du solltest nicht nur irgenwie rumprobieren, sondern einfach mal lesen und verstehen, was man dir zu deinen Fehlern schreibt.
In Post #5 wurde dir schon geschrieben, wo dein Fehler ist.
Und den machst du immer noch.

Und wenn der Compiler Fehler zeigt, warum postest du die nicht ?
Hast du in den Einstellungen auch die Fehlermeldung komple aktiviert ?

Das ist es doch, der compiler zeigt KEINE FEHLER und das ist es ja was mit wundert.

könntest du mir ein Tipp gehen wo ich sehe, ob ich sie kompl. aktiviert habe ?
habe aber an sich nichts umgestellt, also also so wie bei der installierung

Ehrlich jetzt ?
Kannst du auch ohne Hilfe etwas lesen ?
Hast du dir den Post #5 nochmal angesehen ?
Hast du dir die Einstellungen mal angesehen ?

Ok, ein Tipp.
Du liest die Taster aus, verwendest aber das Ergebnis nicht.
Einstellungen da fehlen bei der Fehlermeldung Haken.

post #5 habe ich mir durch gelesen und ich habe oben schon geschrieben, dass dies auch meine vermutung ist

okey, ich mache mir mal gedanken