Taster auf Pin definiert digitalRead immer HIGH

Hallo ,
ich habe hier ein Vertsändnisproblem mit Pegeln an Arduino-Pins.

Ein einfacher Sketch der zunächst einmal Relais schalten soll, ist um 4 Taster-Input erweitert worden.
Nun habe ich aber hier noch keine Taster an die Pins angeschlossen aber das Ergebnis aus digitalRead ist immer ein HIGH.
Der SerialMonitor zeigt das auch an aber warum? ±–1111

const int Funkkanal_1 = 13; // Eingang-Pins für Funkschalter
const int Funkkanal_2 = 12;
const int Funkkanal_3 = 11;
const int Funkkanal_4 = 10;


int Funkkanal_1Status = LOW;
int Funkkanal_2Status = LOW;
int Funkkanal_3Status = LOW;
int Funkkanal_4Status = LOW;

void setup() {
 Serial.begin(9600);


 pinMode(Funkkanal_1, INPUT); //Pins Funkschalter auf Eingang setzen
 pinMode(Funkkanal_2, INPUT); //Pins Funkschalter auf Eingang setzen
 pinMode(Funkkanal_3, INPUT); //Pins Funkschalter auf Eingang setzen
 pinMode(Funkkanal_4, INPUT); //Pins Funkschalter auf Eingang setzen
 digitalWrite(Funkkanal_1, LOW);
 digitalWrite(Funkkanal_2, LOW);
 digitalWrite(Funkkanal_3, LOW);
 digitalWrite(Funkkanal_4, LOW);

}


void printfunkempfstatus() 
 // Status der Funkschalter ausgeben
{
   if (digitalRead(Funkkanal_1==HIGH))
     Serial.print('1');
   else  
     Serial.print('0');
   if (digitalRead(Funkkanal_2==HIGH))
     Serial.print('1');
   else  
     Serial.print('0');   
   if (digitalRead(Funkkanal_3==HIGH))
     Serial.print('1');
   else  
     Serial.print('0');   
   if (digitalRead(Funkkanal_4==HIGH))
     Serial.print('1');
   else  
     Serial.print('0');  
   Serial.println();
}


void loop(){

Funkkanal_1Status = (digitalRead(Funkkanal_1));
Funkkanal_2Status = (digitalRead(Funkkanal_2));
Funkkanal_3Status = (digitalRead(Funkkanal_3));
Funkkanal_4Status = (digitalRead(Funkkanal_4));
 if (Funkkanal_1Status == HIGH)
 Serial.write('+');
 else
 Serial.write('-');
 if (Funkkanal_2Status == HIGH)
 Serial.write('+');
 else
  Serial.write('-');
 if (Funkkanal_3Status == HIGH)
 Serial.write('+');
 else
  Serial.write('-');
 if (Funkkanal_4Status == HIGH)
 Serial.write('+');
 else
  Serial.write('-');
 printfunkempfstatus();
 
}

Wo ist hier mein Denkfehler?

Ich möchte das Ergebnis später mal in VISUAL BASIC auswerten.

In der einen Funktion sind die Klammern falsch gesetzt:

if (digitalRead(Funkkanal_3==HIGH))

Damit wertest du erst mal Funkkanal_3==HIGH aus und das ist immer 0, da HIGH 0x01 ist

Mit INPUT brauchst du außerdem Pulldown-Widerstände. Sonst hängt der Pin der Luft. Besser ist INPUT_PULLUP. Dann ist der Pin HIGH wenn der Taster nicht gedrückt ist und LOW wenn gedrückt.

Taster müssen außerdem entprellt werden.

digitalWrite(Funkkanal_1, LOW); Schaltet den Pullupwiderstand aus nicht ein. Ohne Pullup /Pulldown Widerstand kann ein Eingang bei nicht betätigtem Taster irgendwas lesen. Grüße Uwe

Danke für die Antworten, Jungs.

Die Widerstände waren der Übeltäter.

Ich habe den Code noch einmal verschlimmbessert, denn etwas stört mich immer noch.

const int Funkkanal_1 = 13; // Eingang-Pins für Funkschalter
const int Funkkanal_2 = 12;
const int Funkkanal_3 = 11;
const int Funkkanal_4 = 10;

int Funkkanal_1Status = 0;
int Funkkanal_2Status = 0;
int Funkkanal_3Status = 0;
int Funkkanal_4Status = 0;

void setup() {
Serial.begin(9600);

pinMode(Funkkanal_1, INPUT_PULLUP); //Pins Funkschalter auf Eingang setzen
pinMode(Funkkanal_2, INPUT_PULLUP); //Pins Funkschalter auf Eingang setzen
pinMode(Funkkanal_3, INPUT_PULLUP); //Pins Funkschalter auf Eingang setzen
pinMode(Funkkanal_4, INPUT_PULLUP); //Pins Funkschalter auf Eingang setzen
digitalWrite(Funkkanal_1, HIGH);
digitalWrite(Funkkanal_2, HIGH);
digitalWrite(Funkkanal_3, HIGH);
digitalWrite(Funkkanal_4, HIGH);


void printfunkempfstatus() 
// Status der Funkschalter ausgeben
{
  if (digitalRead(Funkkanal_1==HIGH))
    Serial.print('1');
  else  
    Serial.print('0');
  if (digitalRead(Funkkanal_2==HIGH))
    Serial.print('1');
  else  
    Serial.print('0');   
  if (digitalRead(Funkkanal_3==HIGH))
    Serial.print('1');
  else  
    Serial.print('0');   
  if (digitalRead(Funkkanal_4==HIGH))
    Serial.print('1');
  else  
    Serial.print('0');  
  Serial.println();
}


void loop(){
Funkkanal_1Status = (digitalRead(Funkkanal_1));
Funkkanal_2Status = (digitalRead(Funkkanal_2));
Funkkanal_3Status = (digitalRead(Funkkanal_3));
Funkkanal_4Status = (digitalRead(Funkkanal_4));
if (Funkkanal_1Status == HIGH)
{
 Serial.write('1');
 printfunkempfstatus();    
}
else if (Funkkanal_2Status == HIGH)
{
 Serial.write('2');
 printfunkempfstatus();    
}
else if (Funkkanal_3Status == HIGH)
{
 Serial.write('3');
 printfunkempfstatus();    
}
else if (Funkkanal_4Status == HIGH)
{
 Serial.write('4');
 printfunkempfstatus();    
}
}

Im SerialMonitor sehe ich jetzt welcher FunkKanal auf HIGH geht, also 1, 2, 3 oder 4 aber in der Funktion printfunkempfstatus() bekomme ich bei allen Kanälen die 1 für HIGH angezeigt.

Also so sieht das bei gedrückten Kanal 3 z.B. aus : 31111

Ich möchte aber dort fogendes sehen: 30010

Ich denke Ihr versteht mich :-)

@newbieMario
die TAGs gehören in eckige Klammern und nicht in Kleiner-Größer Zeichen. Ansosnten benutze die Editorbefehle auf den ikons oberhalb Editorfenster.
Grüße Uwe

Meinen Beitrag hast du nicht beachtet :(

Falsch:

 if (digitalRead(Funkkanal_3==HIGH))

Korrekt:

 if (digitalRead(Funkkanal_3) == HIGH)

Hallo Serenifly,

na klar, ich bin vielleicht ein Depp. Meine Augen sind da einfach nicht hängen geblieben (der Verstand ebenso).

Danke das Ihr so geduldig mit mir gewesen seid.