Controla ventilador por pwm y sonda

Hola, estoy usando una sonda temperatura DS18B20 y un ventilador a 12 v c.c para refrigerar un cuadro, y necesito que me mueva el ventilador por pwm según la temperatura que me marque la sonda pero no consigo que se pare y está al 100% de la potencia funcionando incluso si meto la sonda en agua fría y queda por debajo de temperatura deseada.

HtempMin es la temperatura deseada (20º)
tempC es la temperatura que marca la sonda
HtempMax es la temperatura maxima permitida (30º)

**************** Gestion del ventilador para refrigeracion *******
     
     if (tempC > HtempMin)
   
      {    
            int tempval = int(tempC* 10);     
            fanSpeed = map(tempval, (HtempMin * 10), (HtempMax * 10), 0, 255);       
            
if (fanSpeed <= 0)                      
            {
             (fanSpeed = 0);
             (bitWrite(status_parametros,0,0)); //ventilador apagado
            }
         
       else bitWrite(status_parametros,0,1);   //ventilador activado
                            
      if (fanSpeed >= 255)    fanSpeed = 255;
      analogWrite(fanPin, fanSpeed);
          }
         
   else if (tempC <= HtempMin )
        {
        (fanSpeed = 0);
        (bitWrite(status_parametros,0,0)); //ventilador apagado
         analogWrite(fanPin, fanSpeed);
        }

Si podeis sacarme del error porque me estoy volviendo loco ya.

Hola Sadvance.

Primero me llama la atención que usando un sensor DS18B20 multipliques por 10 la temperatura. Supongo que tomaras un decimal para hacer luego el trabajo de conrol

Otras cosas raras son este uso de los paréntesis

(fanSpeed = 0);
(bitWrite(status_parametros,0,0)); //ventilador apagado

para que usas? Obviamente funciona pero solo me llama la curiosidad.

Dificil entender tu lógica sin el resto del código y del modo que esta ordenado.

Si usas map no entiendo para que luego usas algo como esto

 fanSpeed = map(tempval, (HtempMin * 10), (HtempMax * 10), 0, 255);       
            
      if (fanSpeed <= 0)   {
          fanSpeed = 0;
          bitWrite(status_parametros,0,0); //ventilador apagado
      }

fanSpeed tendra valores entre 0 y 255
Entonces para que pregutnas si vale negativo, puede ser un exceso asi que solo lo dejamos asi

if (fanSpeed == 0) 
    bitWrite(status_parametros,0,0);//ventilador apagado
 if (fanSpeed >= 255) 
          fanSpeed = 255;

De nuevo es redundante pero no altera tampoco lo que te ocurre.
Ninguno de estos comentarios se relaciona con el hecho que tu fan no se detiene.
Una sugerencia es que hagas una prueba de tu fan y su comportamiento con las velocidades.
Usa un potenciometro. Lee el valor entre 0 y 5 y divides por 4 o usa una función map

Prueba si realmente se apaga o no lo hace.

Ahora me doy cuenta de algo importante. No dices como controlas la potencia del ventilador.
Usas un MOSFET? o de que modo lo haces. Porque hablas de que siempre esta al 100%