Hallo,
ich bin relativ neu in Sachen Arduino, habe aber schon einige kleinigkeiten gebaut und taste mich so langsam ran. Ich hoffe, hier kann mich einer auf die richtige Lösung bringen. Ich baue grade für die Steuerung einer Inspizientenanlage in einem Theater einen Arduino Uno, der soll Relais steuern und Digitale Eingänge zurück über USB senden (zur Überwachung, ob bestimmte Geräte eingeschaltet sind)
Die Relaissteuerung funktioniert, die Rükgabe von Befehlen per Serial.print auch, aber er schickt mir unaufhörlich den Status des Pins (high oder low). Wie bekomme ich das hin, dass ich nur bei Änderung des Status eine Ausgabe bekomme, und nicht dauerhaft? Mein Code zu der Stelle sieht wie folgt aus:
if (digitalRead(input1)==HIGH)
Serial.print('P');
if (digitalRead(input1)==LOW)
Serial.print('L');
Vielen Dank schonmal.
Gruß Florian
ifstatus != statusAlt)
{
sendeWas(status);
statusAlt=status;
}
bool status = digitalRead(input1);
if (status==HIGH && status != alterstatus){
Serial.print('P');
alterstatus = status;
}
else if (status==LOW && status != alterstatus){
Serial.print('L');
alterstatus = status;
}
Die variable alterstatus muss vor dem Setup deklariert werden (bool alterstatus = 0;)
Hier macht auch else if Sinn weil damit nur solange die Bedingungen geprüft werden bis eine zutrift (erspart Rechenzeit) alle dahinter kommenden else if werden dann in diesem Schleifendurchlauf nicht mehr berücksichtigt
== (ist gleich)
!= (ist ungleich)
&& (ist und)
Wenn du auf das p und l verzichten kannst und stattdessen eine 0 und 1 benutzen kannst, kannst du das Beispiel von Rabenauge benutzen
Vielen Dank euch beiden.
Ich habe in Anlehnung an den ersten Post folgendes gebastelt:
Funktioniert soweit.
input = digitalRead(input1);
if (input==HIGH)
{
if (input!=input1alt)
{
Serial.print('p');
input1alt=input;
}}
if (input==LOW)
{
if (input!=input1alt)
{
Serial.print('l');
input1alt=input;
}
Ich danke euch!
Ist sicherlich nicht so elegant, aber läuft. Habt ihr noch Kritik daran?
Gruß
Wenn du den code zusammenfasst hast du genau das gebastelt was ich gepostet habe
if(1==1){
if(2==2){
}
}
ist das gleiche wie
if(1==1 && 2 ==2){
}
nur etwas übersichtlicher
input = digitalRead(input1);
if (input !=input1alt)
{
if (input==HIGH)
{
Serial.print('p');
}
if (input==LOW)
{
Serial.print('l');
}
input1alt=input;
}
Hab es noch bissel eingedampft.
warum wehrt ihr euch denn gegen das && und das else if
aber so gehts auch noch kürzer
input = digitalRead(input1);
if (input !=input1alt)
{
switch(input){
case 0: Serial.print('l');break;
case 1:Serial.print('P')break;
}
input1alt=input;
}
Besten Dank für eure schnelle Hilfe.
Läuft so, wie gedacht.
Viele Grüße!