1. Low coolant
If the coolant is low, not enough hot coolant reaches the heater. Low coolant also means there's a leak somewhere, and running an engine low on coolant can overheat it. Check the level only when the engine is cold, and never open a hot radiator cap.
2. A thermostat stuck open
If the temperature gauge stays low or takes ages to warm up, the thermostat may be stuck open. The engine never gets fully warm, so neither does the heater. It also hurts fuel economy.
3. A clogged heater core
The heater core is a small radiator behind the dash. If it clogs up, the engine can be warm but the cabin stays cold. A sweet smell inside the car or a damp floor can mean the heater core is leaking.
4. A blend door or its actuator
A small flap inside the dash mixes hot and cold air. If the motor that moves it fails, the air can stay cold, or hot on one side only. A clicking sound behind the dash when you change the temperature is a common clue.
5. The blower
If you feel little or no air at all, or it only works on high, the blower motor or its resistor is usually at fault rather than the heat itself.
Get it sorted before it's freezing
Weak heat also means a weak defroster, and that's a safety problem in winter. We'll find which of these it is and quote the fix before doing any work.