<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Automotive Workshop Manuals</title>
    <description>The latest articles on DEV Community by Automotive Workshop Manuals (@workshopmanualsus).</description>
    <link>https://dev.to/workshopmanualsus</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3732420%2F3b6210af-3b56-4026-b5c7-e87f1feeacce.png</url>
      <title>DEV Community: Automotive Workshop Manuals</title>
      <link>https://dev.to/workshopmanualsus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/workshopmanualsus"/>
    <language>en</language>
    <item>
      <title>Clean Up WordPress Spam Comments Fast — Free Plugin with 15+ Smart Filters</title>
      <dc:creator>Automotive Workshop Manuals</dc:creator>
      <pubDate>Tue, 03 Feb 2026 20:17:30 +0000</pubDate>
      <link>https://dev.to/workshopmanualsus/clean-up-wordpress-spam-comments-fast-free-plugin-with-15-smart-filters-3iob</link>
      <guid>https://dev.to/workshopmanualsus/clean-up-wordpress-spam-comments-fast-free-plugin-with-15-smart-filters-3iob</guid>
      <description>&lt;p&gt;Hey Dev.to community! 👋&lt;/p&gt;

&lt;p&gt;If you run a WordPress site with comments enabled, you've probably dealt with the nightmare of spam comments. I wanted to share a free, open-source plugin we built to tackle this problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The WordPress Spam Comment Problem
&lt;/h2&gt;

&lt;p&gt;Every WordPress site with comments enabled is a target. Bots crawl the web 24/7 flooding comment forms with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Link spam&lt;/strong&gt; — comments stuffed with shady URLs to boost SEO for scam sites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyword stuffing&lt;/strong&gt; — walls of text targeting pharmaceuticals, gambling, and adult content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phishing links&lt;/strong&gt; — comments designed to trick visitors into clicking malicious URLs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gibberish spam&lt;/strong&gt; — auto-generated nonsense from bot networks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WordPress's built-in spam tools are basic at best. Akismet helps, but it still requires manual review and doesn't give you granular control over what gets deleted and why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Injected Spam Cleaner
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/injectedwebsite/wordpress-spam-comment-remover" rel="noopener noreferrer"&gt;&lt;strong&gt;Injected Spam Cleaner&lt;/strong&gt;&lt;/a&gt; is a free, open-source WordPress plugin built by the security team at &lt;a href="https://injected.website" rel="noopener noreferrer"&gt;Injected.Website&lt;/a&gt;. Instead of relying on a cloud API, it gives you &lt;strong&gt;15+ smart filters&lt;/strong&gt; that run locally on your site — no external service required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smart Detection Filters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keyword matching&lt;/strong&gt; — Flag comments containing specific words or phrases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link detection&lt;/strong&gt; — Identify comments with excessive URLs or links to known spam domains&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern recognition&lt;/strong&gt; — Catch common spam patterns like repeated characters, ALL CAPS blocks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP address filtering&lt;/strong&gt; — Block or bulk-delete comments from known spam IP ranges&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suspicious behavior detection&lt;/strong&gt; — Flag comments posted too quickly, from TOR exit nodes, or with spoofed user agents&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bulk Operations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Delete hundreds or thousands of spam comments in one click&lt;/li&gt;
&lt;li&gt;Filter first, review second — see exactly what will be deleted before pulling the trigger&lt;/li&gt;
&lt;li&gt;Selective deletion — target only comments matching your criteria&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lightweight &amp;amp; Private
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No external API calls — everything runs on your server&lt;/li&gt;
&lt;li&gt;No subscription fees — completely free and open source (GPL-2.0)&lt;/li&gt;
&lt;li&gt;Minimal resource usage — won't slow down your site&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Akismet vs Injected Spam Cleaner
&lt;/h2&gt;

&lt;p&gt;Akismet is a good first line of defense, but it has limitations:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Akismet&lt;/th&gt;
&lt;th&gt;Injected Spam Cleaner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Free for personal, paid for commercial&lt;/td&gt;
&lt;td&gt;100% free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External API required&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart filters&lt;/td&gt;
&lt;td&gt;Basic (spam/not spam)&lt;/td&gt;
&lt;td&gt;15+ granular filters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk deletion&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Yes, with preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy&lt;/td&gt;
&lt;td&gt;Sends comment data to cloud&lt;/td&gt;
&lt;td&gt;All local processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keyword customization&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP-based filtering&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The two work great together — Akismet catches spam before it's published, while Injected Spam Cleaner helps you clean up what's already there.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Install
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Download from the &lt;a href="https://github.com/injectedwebsite/wordpress-spam-comment-remover" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;In WordPress admin: &lt;strong&gt;Plugins → Add New → Upload Plugin&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Upload the &lt;code&gt;injected-spam-cleanerv1-3.zip&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Activate the plugin&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Tools → Spam Cleaner&lt;/strong&gt; to configure filters&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Real-World Result
&lt;/h2&gt;

&lt;p&gt;We used this on a WooCommerce store with &lt;strong&gt;47,000 spam comments&lt;/strong&gt; accumulated over two years. The cleanup took &lt;strong&gt;under 15 minutes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comments with 3+ URLs → 31,000 matches&lt;/li&gt;
&lt;li&gt;Known spam keywords → 12,000 more&lt;/li&gt;
&lt;li&gt;Known bot network IPs → 3,500 more&lt;/li&gt;
&lt;li&gt;Manual review of remaining 500 comments&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security Beyond Spam
&lt;/h2&gt;

&lt;p&gt;Spam comments can be a serious security risk. Malicious links can harm your SEO rankings, expose visitors to phishing, and indicate your site is being targeted by bots.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Need a full security checkup? The team at &lt;a href="https://injected.website" rel="noopener noreferrer"&gt;Injected.Website&lt;/a&gt; offers free WordPress security scans.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Get the Plugin
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/injectedwebsite/wordpress-spam-comment-remover" rel="noopener noreferrer"&gt;github.com/injectedwebsite/wordpress-spam-comment-remover&lt;/a&gt;&lt;br&gt;
🌐 &lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://injected.website" rel="noopener noreferrer"&gt;injected.website&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://injected.website" rel="noopener noreferrer"&gt;Injected.Website&lt;/a&gt; — WordPress Security Experts.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>security</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Understanding Car Timing Belts: When to Replace and DIY vs Professional</title>
      <dc:creator>Automotive Workshop Manuals</dc:creator>
      <pubDate>Wed, 28 Jan 2026 09:17:13 +0000</pubDate>
      <link>https://dev.to/workshopmanualsus/understanding-car-timing-belts-when-to-replace-and-diy-vs-professional-5ac4</link>
      <guid>https://dev.to/workshopmanualsus/understanding-car-timing-belts-when-to-replace-and-diy-vs-professional-5ac4</guid>
      <description>&lt;p&gt;The timing belt is one of the most critical components in your engine, yet many drivers don't know when to replace it or whether they can tackle the job themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does a Timing Belt Do?
&lt;/h2&gt;

&lt;p&gt;The timing belt synchronizes the rotation of the crankshaft and camshaft, ensuring your engine's valves open and close at the right time during each cylinder's intake and exhaust strokes. If this belt fails, the consequences can be catastrophic—especially in interference engines where the pistons and valves occupy the same space at different times.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Replace
&lt;/h2&gt;

&lt;p&gt;Most manufacturers recommend replacement between &lt;strong&gt;60,000-100,000 miles&lt;/strong&gt;, but check your specific vehicle's maintenance schedule. Warning signs include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ticking noise from the engine&lt;/li&gt;
&lt;li&gt;Engine won't turn over&lt;/li&gt;
&lt;li&gt;Oil leaking from the front of the motor&lt;/li&gt;
&lt;li&gt;Engine misfires&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DIY vs Professional
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DIY Considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Difficulty: 7/10 (advanced)&lt;/li&gt;
&lt;li&gt;Time: 4-8 hours&lt;/li&gt;
&lt;li&gt;Special tools often required&lt;/li&gt;
&lt;li&gt;Must have detailed service manual with torque specs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When to Go Pro:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interference engines (higher stakes if done wrong)&lt;/li&gt;
&lt;li&gt;Limited mechanical experience&lt;/li&gt;
&lt;li&gt;No access to proper tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cost Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Typical Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DIY&lt;/td&gt;
&lt;td&gt;$50-200 (parts only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;$500-1000+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The savings are significant, but only if you have the skills and proper documentation. A quality workshop manual with detailed timing procedures is essential for this job.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's your experience with timing belt replacement? Share in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>Building a DIY Car Diagnostic Tool with Arduino and OBD2</title>
      <dc:creator>Automotive Workshop Manuals</dc:creator>
      <pubDate>Tue, 27 Jan 2026 23:52:10 +0000</pubDate>
      <link>https://dev.to/workshopmanualsus/building-a-diy-car-diagnostic-tool-with-arduino-and-obd2-20ee</link>
      <guid>https://dev.to/workshopmanualsus/building-a-diy-car-diagnostic-tool-with-arduino-and-obd2-20ee</guid>
      <description>&lt;p&gt;Ever wanted to know exactly what your car's Check Engine light means without paying $100 for a dealer diagnostic? In this tutorial, we'll build a simple OBD2 reader using an Arduino and a $10 ELM327 adapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You'll Need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Arduino Uno or Nano (~$25)&lt;/li&gt;
&lt;li&gt;ELM327 Bluetooth OBD2 adapter (~$10-15)&lt;/li&gt;
&lt;li&gt;HC-05 Bluetooth module (~$8) OR just use the ELM327 directly&lt;/li&gt;
&lt;li&gt;16x2 LCD display (~$5)&lt;/li&gt;
&lt;li&gt;Jumper wires&lt;/li&gt;
&lt;li&gt;A car with an OBD2 port (all cars 1996+)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Total cost:&lt;/strong&gt; ~$35-50&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding OBD2
&lt;/h2&gt;

&lt;p&gt;OBD2 (On-Board Diagnostics II) has been standard on all US cars since 1996. The system monitors emissions-related components and stores Diagnostic Trouble Codes (DTCs) when something goes wrong.&lt;/p&gt;

&lt;p&gt;The OBD2 port is usually located under the dashboard, near the steering column.&lt;/p&gt;

&lt;h3&gt;
  
  
  The ELM327 Protocol
&lt;/h3&gt;

&lt;p&gt;The ELM327 is an interpreter chip that converts OBD2 protocols into simple serial commands. Instead of dealing with CAN bus, J1850, or ISO 9141 directly, we send ASCII commands like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ATZ      // Reset
ATSP0    // Auto-detect protocol
0100     // Get supported PIDs
0105     // Get coolant temperature
010C     // Get RPM
010D     // Get vehicle speed
03       // Get stored trouble codes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Circuit
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Arduino          ELM327 (Bluetooth)
--------         ------------------
5V      -------&amp;gt; VCC
GND     -------&amp;gt; GND
RX (0)  -------&amp;gt; TX
TX (1)  -------&amp;gt; RX

Arduino          16x2 LCD
--------         ---------
5V      -------&amp;gt; VCC
GND     -------&amp;gt; GND  
Pin 12  -------&amp;gt; RS
Pin 11  -------&amp;gt; Enable
Pin 5   -------&amp;gt; D4
Pin 4   -------&amp;gt; D5
Pin 3   -------&amp;gt; D6
Pin 2   -------&amp;gt; D7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;LiquidCrystal.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;SoftwareSerial.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="n"&gt;LiquidCrystal&lt;/span&gt; &lt;span class="nf"&gt;lcd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;SoftwareSerial&lt;/span&gt; &lt;span class="nf"&gt;obd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;lcd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;lcd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OBD2 Reader"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;obd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;38400&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;initOBD&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;initOBD&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;sendCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ATZ"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;sendCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ATE0"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;sendCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ATL0"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;sendCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ATSP0"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;sendCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;obd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;obd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;lcd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;lcd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setCursor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;lcd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"RPM: "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Reading Trouble Codes
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;03&lt;/code&gt; command returns stored DTCs. The response format decodes to standard codes like P0133 (O2 Sensor Circuit Slow Response).&lt;/p&gt;

&lt;h2&gt;
  
  
  Going Further
&lt;/h2&gt;

&lt;p&gt;This basic reader can be expanded to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log data to an SD card&lt;/li&gt;
&lt;li&gt;Display on a larger screen&lt;/li&gt;
&lt;li&gt;Build a custom dashboard&lt;/li&gt;
&lt;li&gt;Create alerts for specific conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Real Diagnostic Power
&lt;/h2&gt;

&lt;p&gt;Getting the code is just step one. The real value is knowing what to do with it.&lt;/p&gt;

&lt;p&gt;For example, P0420 (Catalyst Efficiency Below Threshold) could mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Failing catalytic converter ($1,000+)&lt;/li&gt;
&lt;li&gt;Bad oxygen sensor ($150-300)&lt;/li&gt;
&lt;li&gt;Exhaust leak ($100-500)&lt;/li&gt;
&lt;li&gt;Loose gas cap ($0)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Factory workshop manuals&lt;/strong&gt; provide diagnostic flowcharts that help you pinpoint the actual issue before replacing parts.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://workshopmanuals.us.com/" rel="noopener noreferrer"&gt;workshopmanuals.us.com&lt;/a&gt; for vehicle-specific diagnostic procedures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;For under $50 and an afternoon of tinkering, you can build a tool that reads the same codes as professional scanners. Combine it with proper diagnostic procedures, and you'll save hundreds on repair shop diagnostic fees.&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Got questions about specific codes or want to see a more advanced version? Drop a comment below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>arduino</category>
      <category>tutorial</category>
      <category>iot</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
