Gleichzeitige Ausgabe an zwei PIN

Hallo zusammen,

ich habe die folgenden Zeilen und aktuell werden diese nacheinander abgearbeitet und an die PIN gesendet.
Ich möchte aber das beide PIN (9 und 10) gleichzeitig angesprochen werden. Mit dem && funktioniert es nicht. Oder habe ich eine Klammer nicht gesetzt?

digitalWrite (9, HIGH); 
delay (500); 
tone (10,440); 
delay (500);  
noTone (10);

Vorschlag:

digitalWrite(9, HIGH && tone (10,440)) 
delay (500)
noTone (10)

Hallo stefan1975
Versuch macht klug :nerd_face:

Was verstehst Du unter gleichzeitig?
Oder anders: Wieviele nanosekunden gelten noch als gleichzeitig?

Oh, das ist eine gute Frage. In diesem Fall ging es mir darum, das PIN 9 und 10 gleichzeitig das Signal ausgeben sollen

Die ist ernst gemeint.
Was hängt den an Pin 9 dran?

An Pin 9 ist ein Vibrationsmodul und an Pin 10 ein Lautsprecher. Beide sollen gleichzeitig ein Signal mit 0,5 Sekunden ausgeben.

Dessen Reaktionszeit dürfte das nacheinander schreiben der Pins bei weitem überschreiten.
(Mindest aber die Reaktionszeit der Person, die beides feststellen soll)

Ja!
Aber geheim halten, um welchen Arduino es sich dreht....

Immer noch nicht Handbuch gelesen.
Aber dafür viel stochern im Nebel.

Und natürlich geht das Gleichzeitig!
In der gleichen µS, im gleichen Taktzyklus!
aber weder mit tone, noch mit digitalWrite.

Ich habe den UNO und Nano im Einsatz. Ich war immer auf dem Weg das es mit den Operatoren && einfach nur verknüpft werden muss.

digitalWrite(9, HIGH);
tone (10,440);
delay(500);
digitalWrite(9, LOW);
noTone (10);

ausprobieren - genau berichten was daran nicht passen sollte...

Oh man und anfangs schreibe ich noch, das diese hintereinander abgearbeitet werden. Danke.

Das macht es nicht gleichzeitig. SCNR

SCNR kenne ich noch nicht. Ich gucke mal was es bewirkt.

Da Frage #3 vom TO nicht spezifisch beantwortet werden konnte dürfte das Zeitverhalten der Standard-Funktionen wohl ausreichen.

Ansonsten - gilt nach wie vor mein VOLLSTÄNDIGES Kommentar in #10.
Wenn man weiß was daran zu langsam ist, kann man Alternativen suchen.

Ja!
Es hat bisher noch nicht mal dafür gereicht sich die Operatoren mal im Buch anzuschauen....

Oder gar herauszufinden wie man selber Operatoren baut, und was man dann damit anstellen kann

Siehe #7. Sorry, Could Not Resist

Gleichzeitig ist ein elastischer Begriff.
In diesem Fall einen Vibrationsmotor einzuschalten und einen Ton auszugeben ist sehr zeitunkritisch da:

  • die 2 Ausgabegeräte unterschiedliche An und Ausschaltverzögerungen haben.
  • der Mensch diese 2 verschiedenen Aktionen leicht gleichzeitig erkennt auch wenn diese einige mS früher/später starten / enden.
  • auch wenn der Mensch erkennt daß diese 2 Signale nicht gleichzeitig sind der Mensch das nicht als Problem ansieht.

Darum genügen hintereinander aufgerufenen Funktionen für diese 2 Pins.

digitalWrite(Pin, Zustand) braucht zur Ausführung ca 4µS (wenn ich mich richtig erinnere)

Also
digitalWrite(9,HIGH);
digitalWrite(19,HIGH);
schalten die beiden Pins mit einer Verzögerung von ca 4µS.
Für einen Menschen ist das unmöglich zu erkennen.

Externe Elektronik kann das außeinander halten und unte Umständen falsch funktionieren.

In diesem Fall kann man den Port, wo die beiden PIN dranhängen direkt ansteuern und darum beide Pins gleichzeitig setzen. Das gilt nur für bestimmte Pinkombinationen : die Pins müssen auf dem gleichen Port liegen.

Grüße Uwe

Das dachte ich mir auch. Ich habe in der Hardwareschaltung beides ablaufen lassen und es sind keine Sekunden Unterschied. Es ist so gering, das man es nicht wahrnehmen kann. Aber das Arduino port register manipulation control tutorial schaue ich mir mal an.