Probleme mit internem Pullup Widerstand

Hallo liebe Gemeinde!

Ich bin neu in der Materie und mein erstes Projekt soll die schrittweise Automatisierung meines Gewächshauses sein in dem ich meine Pflanzen überwintere.

Ich habe bereits eine funktionierende Temperaturüberwachung mit einem Heizstrahler, Temperaturanzeige inkl. Zähler der Heizintervalle an einem LCD.

Mein Problem liegt gerade an einem digitalen Eingang mit dem ich einen LED-Streifen über einen Kippschalter einschalten möchte.
Ich habe es bereits mit einem Pulldown Widerstand probiert, jetzt mit dem internen Pullup Widerstand, aber ich bekomme es nicht hin. Mit dem internen Pullup Widerstand ziehe ich das Signal über den Kippschalter auf GND und dann sollte der Eingang von HIGH auf LOW wechseln, tut er aber nicht.
Bei dem externen Pulldown Widerstand hatte ich das Problem dass der Eingang willkürlich zwischen HIGH und LOW wechselte.
Ich hänge mal meinen ganzen Sketch an, ich bin über alle Kommentare dankbar!

Schöne Grüße

//Temperatursensor Signal kommt an Pin 2
//Ausgang für Heizungsrelais kommt von Pin 3
//LCD-Paneel kommt an I2C Pin
//LED-Strip an PIN 4
//Lichtschalter an PIN 5 (PULLUP-EINGANG, Standard auf HIGH)
//
#include <FastLED.h>                                     //Bibliothek
#include <LiquidCrystal_I2C.h>                           //Bibliothek
#include <Wire.h>                                        //Bibliothek
#include <DallasTemperature.h>                           //Bibliothek
#include <OneWire.h>                                     //Bibliothek

#define LICHTSCHALTER_PIN 5
#define ONE_WIRE_BUS 2                                   //benenne One Wire Eingangspin
#define HEIZUNG_RELAIS 3                                 //benenne PIN für Heizung
#define LED_PIN 4
#define CHIPSET WS2811
#define NUM_LEDS 60
CRGB leds[NUM_LEDS];


OneWire oneWire(ONE_WIRE_BUS);                           //starte oneWire mit dem genannten Eingangspin
DallasTemperature sensors(&oneWire);                     //Sensoren von oneWire an Dallas weitergeben
LiquidCrystal_I2C lcd(0x27,16,2);                        //Setup des Displays, mit Name, Adresse, Zeichenzahl und Zeilenzahl

unsigned long TimerStart = 1;                            //Timer Start Zeit
unsigned long TimerZeit = 0;                             //aktuelle Timer Zeit
long Heizintervall = 180000;                              //Kontrollintervall Temperatur
int DisplayTimer = 500;                                  //Aktualisierungsintervall für LCD Temperaturanzeige
unsigned long DisplayZeit = 0;                           //Aktuelle Display Zeit
unsigned long DisplayStart = 0;                          //Startzeit Displaytimer
int Temp;                                                //Temperaturvariable erstellen
int Heiz_Zaehler = 0;                                    //Wie oft wurde geheizt
byte Licht = 0;

//---------------------------------------------------------------------------------------------------------------------------


void setup() {
sensors.begin();                                         //Dallas starten
pinMode(HEIZUNG_RELAIS,OUTPUT);                          //Setze PIN als Ausgang
lcd.init();                                              //LCD´s initialisieren
lcd.backlight();                                         //Hintergrundbeleuchtung LCD einschalten
Serial.begin(9600);
digitalWrite(HEIZUNG_RELAIS,HIGH);
FastLED.addLeds<CHIPSET, LED_PIN, RGB>(leds, NUM_LEDS);
pinMode(LICHTSCHALTER_PIN,INPUT_PULLUP);
delay(1000);                                             // Einschaltverzögerung
}

//---------------------------------------------------------------------------------------------------------------------------

void loop() {
  
  if(digitalRead(LICHTSCHALTER_PIN) == HIGH){
    Licht = 0;
  }
  else{
    Licht = 1;
  }
  TimerZeit = millis();
  DisplayZeit = millis();
  sensors.requestTemperatures();                           //Temperaturwerte einholen von allen Sensoren
  Temp = sensors.getTempCByIndex(0);                       //Variable mit dem genannten Sensorwert belegen


  if(Licht == 1){                                                     
      fill_solid(leds,NUM_LEDS,CHSV(255,255,50));
      FastLED.show();
    }
    else{
      FastLED.clear();
      FastLED.show();
    }
  
  
  
  
  if((DisplayZeit - DisplayStart) > DisplayTimer){
    lcd.setCursor(1,0);                                    //Temperatur am LCD ausgeben alle 500ms
    lcd.print("Temp: ");
    lcd.print(Temp);
    lcd.print("C");
    lcd.setCursor(12,0);
    lcd.print(Heiz_Zaehler);                               //Anzeigen wie oft geheizt wurde
    DisplayStart = millis();
  }


  if((TimerZeit - TimerStart) > Heizintervall){
    if(Temp < 4){                                        //Temperaturkontrolle
      digitalWrite(HEIZUNG_RELAIS,LOW);                   //Heizung einschalten
      lcd.setCursor(1,1);                                 //Info am LCD ausgeben
      lcd.print("Heizung: EIN");
      Heiz_Zaehler++;
      TimerStart = millis();
    }
    else {
      digitalWrite(HEIZUNG_RELAIS,HIGH);                   //Heizung ausschalten
      lcd.setCursor(1,1);                                 //Info am LCD ausgeben
      lcd.print("Heizung: AUS");
      TimerStart = millis();
    }
  }
}

Da fehlt wohl jedesmal eine Drahtbrücke? Ein Schaltbild wäre hilfreich.

Ich habe ein PCB Board zum aufstecken auf dem UNO. PIN 5 mit dem internen Pullup ist verbunden mit dem Kippschalter, der Kippschalter ist verbunden mit GND.
Wenn ich jetzt den Kontakt am Schalter schließe sollte der Eingang von HIGH auf LOW wechseln oder?
Ein Schaltbild hab ich momentan nicht, ich hoffe die Erklärung reicht so.

Ich versorge den UNO über ein 12V 1,25A Netzteil an VIN.
Versorgt wird ein Temp. Sensor, ein Relais und das LCD Display.
Der LED Streifen zieht auf jeden Fall zuviel Strom wenn er funktionieren würde, ich habe schon ein stärkeres Netzteil geordert (5A).
Könnte trotz nicht eingeschaltetem LED-Streifen zu wenig Strom die Ursache des Problems sein?
Ich habe bereits an PIN5 nachgemessen und er hat 5V, und nach dem betätigen des Schalters messe ich keine Spannung mehr, trotzdem wechselt der Eingang nicht auf LOW.

Nein.
Ein Bild sagt mehr als 1000 Worte!

Anderen Pin probiert scheint Defekt zu sein
Und wirt der Regler auf der Platine nicht zu heiß mit den 12V

Das mit dem Regler weiß ich nicht, ich dachte der interne Spannungsregler ist dafür gedacht, da hab ich mir noch keine Gedanken drüber gemacht...

Ich werde so schnell wie möglich einen Schaltplan posten.

@sirdancelot
Hast Du einmal an dem Ende des Lichtschalter-Kabels (der Lichtschalter-kabel) die du am Arduino ansteckst gemessen (Durchgangsprüfung) ob das Schaltsignal ankommt? Falls das noch ein Versuchsaufbau mit Steckbrett und diesen Steckkabeln ist: ich hatte da schon ein Kabel, das völlig unbeschäditgt aussah, jedoch keine Elektrische Verbindung hergestellt hat. FabrikationsFehler. Messe also deine Leitungen zum Schalter auf durchgang hin und den Schalter auf Funktion hin durch.

Schalter OFF 5V,, ON 0V
So schreibt er

  if(digitalRead(LICHTSCHALTER_PIN) == HIGH){
    Licht = 0; 
  }
  else{
    Licht = 1; Serial.print("Licht = "); Serial.println(Licht);
  }

Setze mal bei der Abfrage des Lichtschalters das Serialprint so ein, wie ich es oben gemacht habe. dann siehst Du im Serial-Monitor, ob die Variable Licht gesetzt wird, also ob das Schalten erkannt wird.

Ich hatte bereits über den Seriellen Monitor den Eingang kontrolliert, der Eingang wechselt seinen Status nicht auf LOW obwohl der Schalter (der auf Durchgang geprüft wurde) richtig funktioniert.

Ist doch nicht die Welt anderen Pin probieren oder?

So habe ich den PIN beschaltet.
Anderen PIN werde ich testen, das ist natürlich kein großer Aufwand.

Wen man mit 12V hantiert kann schnell passieren ungewollt ein Pin erwischen.
Dr Uno ist heile Pin leider nicht

Hallo,
du hast da mehrere Fehlerquellen,
mach Dir einen einfachen Testsketch Eingang lesen auf LED oder Serieller Monitor
nur den Arduino ohne das zus. Board testen mit einer Drahtbrücke.
dann mit dem Schalter
Board wieder drauf,
Wenns dann nicht geht kannst nur an Deinem Board liegen , Steckkontakte , Lötstellen, Leiterbahn.
Heinz

Das ist schon zu viel für den Onboard-Regler. Bei 12 Volt wird der Regler heiß und schaltet ab oder geht kaputt. Ich empfehle da max. 7Volt einspeisen, damit der Regler länger hält.

Bin auch deiner Meinung leider gibts Leute im Forum was sind stur fixiert auf die 12V auf VIN

Und ganz kritisch kann es werden, wenn man an einem Clone zu den 12Volt im Vin noch USB anschließt. Da könnte sich Rauch entwickeln.

0,01Cent für Diode im USB + gespart mit der Hoffnung das viele kaputt gehen. Der Nano ist hier eine Ausnahme

Wieso Nano, der TO verwendet einen Uno.

Was Du bis jetzt erklährt hast ist richtig. Bitte mach ein Foto vom Aufbau und zeig uns das.
Grüße Uwe