Every car sold in the US after 1996 has an OBD-II port. When your check engine light turns on, the car has already diagnosed itself and stored a code explaining why. A basic code reader — available for under $30 — lets you read that code in two minutes. This guide explains how to connect a scanner, interpret the codes, and decide what to do next.
How to connect and read codes
Reading codes takes about two minutes once you've located the port.
- Find the OBD-II port: It's typically under the driver's side dashboard, between the steering column and the door. It's a 16-pin trapezoid connector. Some vehicles have a cover over it.
- Turn the ignition to "on" (not "start" — accessories position). The dash lights illuminate but the engine doesn't start. For push-button start cars, press the start button without pressing the brake.
- Plug in the scanner and wait for it to initialize. Most scanners power on automatically when connected with the ignition on.
- Navigate to "Read Codes" or "Diagnostic Trouble Codes" in the scanner menu. The scanner will communicate with the vehicle's ECU and display any stored codes.
- Write down every code before clearing anything. Some scanners also show "pending" codes — these are faults detected but not yet confirmed as failures.
- Bluetooth OBD-II adapters (like ELM327-based dongles) work with free apps on iOS and Android — a convenient option if you prefer your phone screen over a dedicated scanner.
How to read the code structure
OBD-II codes follow a consistent format. Knowing the structure tells you which system the fault is in before you look up the specific code.
- First character — system: P = Powertrain (engine, transmission); B = Body (airbags, seats, HVAC); C = Chassis (brakes, suspension, steering); U = Network (communication faults between modules).
- Second character — type: 0 = SAE/generic (same across all makes); 1, 2, 3 = manufacturer-specific (meaning varies by brand).
- Third character — subsystem: For P codes: 1 = fuel and air metering; 2 = fuel and air metering (injector circuit); 3 = ignition; 4 = auxiliary emission controls; 5 = vehicle speed control; 6 = computer output; 7/8 = transmission.
- Fourth and fifth characters — specific fault number: These identify the exact component or circuit within the subsystem. Look these up with the full 5-character code.
- Example: P0300 = Powertrain (P), Generic (0), Ignition (3), Random cylinder misfire detected (00). A P0301 means cylinder 1 misfire specifically.
Common OBD-II codes every driver should know
These are the codes you're most likely to encounter, with what they typically indicate.
- P0171 / P0174 — System Too Lean (Bank 1 / Bank 2): The engine is running with too much air and not enough fuel. Common causes: vacuum leak, dirty MAF sensor, failing oxygen sensor, fuel pressure issues.
- P0300–P0308 — Misfire: P0300 is a random misfire; P0301–P0308 identifies the specific cylinder. Common causes: worn spark plugs, ignition coils, injectors, or a vacuum leak in that cylinder.
- P0420 — Catalyst System Efficiency Below Threshold: The catalytic converter isn't working efficiently. Can also be caused by a bad downstream O2 sensor. A common and often expensive repair.
- P0442 / P0455 / P0456 — EVAP Leak: The evaporative emission control system has a leak — often the gas cap. Try tightening or replacing the gas cap first. P0442 is a small leak; P0455 is a large leak.
- P0505 — Idle Control System Malfunction: The engine isn't maintaining proper idle speed. Common causes: dirty throttle body, IAC valve, or vacuum leak.
- P0700 series — Transmission: P0700 is a generic transmission control module fault. Transmission codes often require a more capable scan tool to read the full fault data from the TCM.
What to do after reading a code
Reading a code is the first step. What you do with it determines whether you fix the underlying issue or just reset the light.
- Research the code for your specific vehicle: Generic codes (P0xxx) have consistent meanings, but manufacturer- specific codes (P1xxx) vary. Search for "[your make/model/year] + [code]" for model-specific diagnosis procedures.
- Don't just clear the code: Clearing a code resets the check engine light but doesn't fix the problem. The code will return if the fault is still present — and it may disable some emissions monitors in the process.
- Check for freeze frame data: Better scanners and Bluetooth OBD-II apps record "freeze frame" data — sensor readings at the moment the fault was triggered. This is useful for diagnosis because it shows conditions when the fault occurred.
- Fix the cause, then clear: After repairing the fault, clear the codes and drive through the appropriate drive cycle to confirm the monitors have run and no new codes set.
- Log the code with the fix in your maintenance record: Note the code, what you found, what you replaced, and the date. This history is valuable if the same fault returns.
Choosing a scanner: basic reader vs. advanced scan tool
The right scanner depends on what you need it for.
- Basic code reader ($15–$30): Reads and clears P codes from the engine/powertrain. Sufficient for most DIY use and diagnosing check engine lights.
- Bluetooth OBD-II adapter + app ($20–$50): ELM327-compatible adapters work with apps like Torque Pro, OBD Fusion, or Car Scanner. Show live sensor data (fuel trims, O2 readings, coolant temp) in addition to codes.
- Enhanced code reader ($80–$200): Reads all systems (B, C, U codes in addition to P codes), shows live data streams, performs basic actuator tests. Useful for ABS, airbag, and TPMS codes.
- Professional bi-directional scan tool ($500+): Performs active tests (cycling the ABS pump, injector cutoff tests, etc.), programs modules, and accesses manufacturer-specific data. Beyond most DIY needs but useful for serious wrenchers.
- Many auto parts stores (AutoZone, O'Reilly, Advance) will read codes for free at the counter — a good option if you don't want to buy a scanner for occasional use.
A $25 code reader is one of the most cost-effective tools any car owner can have. It doesn't tell you exactly what to replace, but it tells you which system is failing — which narrows diagnosis from hours of guesswork to a focused search. Read the code, research it for your specific vehicle, fix the underlying cause, and log what you found.
For the next step in DIY maintenance, see our guide on how to change your own oil.