Gelegenheitsbastler:
Der Sketch sieht so aus:
OK. Also den Temperatursensor an 3 und einen Ventilator an 2:
#define ONE_WIRE_BUS 3
#define FAN1 2
und ein Fan-Array, in dem dieser eine Fan-Pin drinsteht:
int FANarray[] = {FAN1};
Was für ein Board verwendest Du eigentlich?
An einem UNO sind die PWM-Pins: 3, 5, 6, 9, 10, und 11.
Aber nicht 2.
Weiterhin hast Du zweimal eine falsche Schleife drin:
for (int i=0;i<4;i++)
{
pinMode(FANarray[i], OUTPUT);
digitalWrite(FANarray[i], HIGH); // Volle Lueftergeschwindigkeit setzen
delay(2000);
digitalWrite(FANarray[i], LOW); // Luefter auschalten
}
Wenn Dein Fanarray nur ein einziges Element enthält und Du den Index von 0 bis 3 laufen läßt, dann greifst Du mit FANarray[1], FANarray[2] und FANarray[3] auf irgendwelche Variablen zu, die HINTER Deinem Array liegen. Es gibt bei C kein Range-Checking auf gültige Array-Indizes, dafür bist Du als Programmierer selbst zuständig, dass Du nicht mit falschem Index außerhalb des deklarierten Arrays zugreifst!
Hier übrigens dasselbe nochmal:
for (int i=0;i<4;i++)
{
analogWrite(FANarray[i], FanSpeed); // PWM Geschwindigkeit setzen
}
Nur ein Fan im Array, aber Index läuft über 0, 1, 2 und 3?
Im Code sehe ich übrigens keinerlei Code für das LCD-Shield.
Das Shield steckst Du nur auf, aber Du initialisierst es nicht?