<?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: rachna62</title>
    <description>The latest articles on DEV Community by rachna62 (@rachna62).</description>
    <link>https://dev.to/rachna62</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%2F843577%2Fbf0953aa-7796-4634-a255-ece14e365e02.jpeg</url>
      <title>DEV Community: rachna62</title>
      <link>https://dev.to/rachna62</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rachna62"/>
    <language>en</language>
    <item>
      <title>LoRa-Based Long-Range Appliance Control Using Arduino</title>
      <dc:creator>rachna62</dc:creator>
      <pubDate>Fri, 03 Apr 2026 07:56:39 +0000</pubDate>
      <link>https://dev.to/rachna62/lora-based-long-range-appliance-control-using-arduino-fbl</link>
      <guid>https://dev.to/rachna62/lora-based-long-range-appliance-control-using-arduino-fbl</guid>
      <description>&lt;p&gt;What if you could control electrical appliances located far away without using the internet or complex wiring? With the help of LoRa communication, this becomes not only possible but also highly reliable.&lt;/p&gt;

&lt;p&gt;In this project, we build a long-range appliance control system that allows a smartphone to send commands to devices located at a distant location.&lt;/p&gt;

&lt;h2&gt;
  
  
  Components Required
&lt;/h2&gt;

&lt;p&gt;Arduino Nano (2 units)&lt;br&gt;
Reyax RYLR999 LoRa + BLE Module (2 units)&lt;br&gt;
5V Bidirectional Voltage Level Shifter (2 units)&lt;br&gt;
16×2 I2C LCD Display (2 units)&lt;br&gt;
2-Channel Relay Module (2 units)&lt;br&gt;
Jumper Wires&lt;br&gt;
USB Cable for programming&lt;br&gt;
12V Power Supply&lt;br&gt;
AC Bulb and 12V DC Fan (for testing loads)&lt;/p&gt;
&lt;h2&gt;
  
  
  Reyax RYLR999 Module Overview and Pinout
&lt;/h2&gt;

&lt;p&gt;The Reyax RYLR999 module acts as the core communication unit of this system. It combines Bluetooth Low Energy and LoRa capabilities into a single device, allowing it to function as a bridge between short-range and long-range communication.&lt;/p&gt;

&lt;p&gt;When connected to a smartphone, the module receives commands over BLE. These commands are then forwarded using LoRa to another module located at a distant point. This dual-mode operation eliminates the need for internet connectivity while still enabling remote control.&lt;/p&gt;

&lt;p&gt;The module includes power, ground, and reset pins along with dedicated UART lines for both BLE and LoRa communication. These serial interfaces make it easy to connect the module with a microcontroller and manage bidirectional data transfer efficiently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibzp0y5ok8jlq17p83lv.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibzp0y5ok8jlq17p83lv.webp" alt=" " width="460" height="540"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Overview / Working Principle
&lt;/h2&gt;

&lt;p&gt;The system is divided into two sections: a transmitting unit and a receiving unit.&lt;/p&gt;

&lt;p&gt;On the transmitting side, a smartphone connects to the RYLR999 module via BLE and sends control commands. The connected Arduino Nano reads these commands and forwards them through LoRa communication.&lt;/p&gt;

&lt;p&gt;On the receiving side, another RYLR999 module captures the transmitted signal and passes it to a second Arduino. The microcontroller interprets the command and controls connected appliances using a relay module.&lt;/p&gt;

&lt;p&gt;This approach allows reliable communication over long distances with minimal power usage, making it suitable for remote control applications.&lt;/p&gt;
&lt;h2&gt;
  
  
  Hardware Setup Explanation and Connections
&lt;/h2&gt;

&lt;p&gt;The hardware setup consists of two similar circuits: one for sending commands and one for receiving them.&lt;/p&gt;

&lt;p&gt;In the controller unit, the RYLR999 module is connected to the Arduino Nano using serial communication. Since the module operates at 3.3V logic levels and the Arduino works at 5V, a bidirectional level shifter is used to safely interface both devices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqob3mlmwd7tw3iww23ns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqob3mlmwd7tw3iww23ns.png" alt=" " width="668" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BLE communication is handled through software serial pins, allowing the Arduino to manage both BLE and LoRa channels simultaneously. The I2C LCD is connected via SDA and SCL pins to display system status such as commands and responses.&lt;/p&gt;

&lt;p&gt;On the receiver side, the setup remains mostly the same, but includes a relay module connected to digital pins of the Arduino. When a command is received, the relay switches ON or OFF the connected appliance, such as a bulb or a fan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgingfjqotekgyzb87g9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgingfjqotekgyzb87g9.png" alt=" " width="700" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Proper grounding and power supply connections are essential for stable operation. The relay module ensures safe isolation between control circuitry and high-voltage loads, making the system suitable for practical deployments.&lt;/p&gt;
&lt;h2&gt;
  
  
  Video
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/01V1MLmuCQE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;This project highlights how LoRa technology can be used to create a reliable long-range control system without depending on internet infrastructure. By combining BLE and LoRa in a single workflow, it becomes easy to control appliances remotely using just a smartphone.&lt;/p&gt;

&lt;p&gt;For complete step-by-step instructions and code, check the full guide here: &lt;a href="https://playwithcircuit.com/long-range-appliance-control-from-smartphone-using-arduino/" rel="noopener noreferrer"&gt;https://playwithcircuit.com/long-range-appliance-control-from-smartphone-using-arduino/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>arduino</category>
    </item>
    <item>
      <title>Controlling DC, Servo and Stepper Motors with Arduino Using the L293D Motor Driver Shield</title>
      <dc:creator>rachna62</dc:creator>
      <pubDate>Wed, 01 Apr 2026 06:49:05 +0000</pubDate>
      <link>https://dev.to/rachna62/controlling-dc-servo-and-stepper-motors-with-arduino-using-the-l293d-motor-driver-shield-4noi</link>
      <guid>https://dev.to/rachna62/controlling-dc-servo-and-stepper-motors-with-arduino-using-the-l293d-motor-driver-shield-4noi</guid>
      <description>&lt;p&gt;Motor control is an essential part of robotics, automation systems and mechatronics projects. However, driving motors directly from an Arduino is not possible because the microcontroller cannot supply the required current.&lt;/p&gt;

&lt;p&gt;This is where a motor driver shield becomes useful. The L293D Motor Driver Shield provides an easy interface between the Arduino and multiple types of motors including DC motors, servo motors and stepper motors.&lt;/p&gt;

&lt;p&gt;In this project we will learn how to use the L293D motor shield with an Arduino UNO to control:&lt;/p&gt;

&lt;p&gt;• DC motor speed and direction&lt;br&gt;
• Servo motor movement&lt;br&gt;
• Stepper motor rotation and direction&lt;/p&gt;

&lt;p&gt;User inputs are taken through push buttons and a potentiometer, while a 16×2 I2C LCD displays the motor status and speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  L293D Motor Driver Shield Overview
&lt;/h2&gt;

&lt;p&gt;The L293D motor driver shield is designed to simplify motor control projects with Arduino. The shield contains two L293D H-bridge driver ICs which allow bidirectional control of motors.&lt;/p&gt;

&lt;p&gt;Each L293D IC can control 2 DC motors or 1 stepper motor.&lt;/p&gt;

&lt;p&gt;Since the shield includes two L293D chips, it can control:&lt;/p&gt;

&lt;p&gt;• 4 DC motors&lt;br&gt;
• or 2 stepper motors&lt;/p&gt;

&lt;p&gt;In addition, the shield provides two dedicated servo connectors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hardware Architecture of the Shield
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjx5ihoz4yda2l3irstj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjx5ihoz4yda2l3irstj.jpg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The shield contains several important components that make motor control possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L293D Motor Driver IC&lt;/strong&gt;: The L293D is a dual H-bridge motor driver that controls the direction of current through the motor. This allows the motor to rotate in both clockwise and anticlockwise directions.&lt;/p&gt;

&lt;p&gt;Each L293D IC can drive two motors.&lt;/p&gt;

&lt;p&gt;Since the shield contains two L293D ICs, four DC motors can be controlled simultaneously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;74HC595 Shift Register&lt;/strong&gt;: The 74HC595 shift register expands the Arduino's digital output capability.&lt;/p&gt;

&lt;p&gt;Instead of using many digital pins directly from Arduino, the shift register allows multiple motor direction signals to be controlled using fewer pins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reset Button&lt;/strong&gt;: A reset button is provided on the shield so the Arduino can be reset easily even when the shield is mounted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power Indicator LED&lt;/strong&gt;: The power LED indicates when the motor power supply is active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull-Down Resistor Network&lt;/strong&gt;: The resistor array ensures that motor driver inputs remain in a known state during startup.&lt;/p&gt;

&lt;h2&gt;
  
  
  L293D Motor Driver Pinout
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrxd630uw4zb2xaatllv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrxd630uw4zb2xaatllv.jpg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Motor Connection Ports&lt;/p&gt;

&lt;p&gt;The shield provides dedicated connectors for different motor types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DC Motor Connections&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The shield provides four motor output ports labeled M1, M2, M3 and M4.&lt;/p&gt;

&lt;p&gt;Each port can drive a DC motor.&lt;/p&gt;

&lt;p&gt;Important details:&lt;/p&gt;

&lt;p&gt;• Voltage range: 4.5V – 24V&lt;br&gt;
• Maximum current per channel: 600mA continuous&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Servo Motor Connections&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The shield includes two servo ports labeled:&lt;/p&gt;

&lt;p&gt;SERVO_1&lt;br&gt;
SERVO_2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stepper Motor Connections&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stepper motors use two motor channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power Supply Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The shield supports two power configurations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 1: Single Power Supply&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If motors operate below 12V, the Arduino and motors can share the same power supply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Connect supply to Arduino DC jack&lt;br&gt;
Keep the PWR jumper installed&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 2: Separate Motor Power Supply&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is recommended for higher current motors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remove the PWR jumper&lt;br&gt;
Power Arduino via USB&lt;br&gt;
Connect motor supply to EXT_PWR terminals&lt;/p&gt;

&lt;p&gt;⚠ &lt;strong&gt;Important Warning:&lt;/strong&gt; Never keep the jumper installed while using external power at EXT_PWR.&lt;br&gt;
This can create a short circuit and damage the board.&lt;/p&gt;

&lt;h2&gt;
  
  
  Controlling DC Motor
&lt;/h2&gt;

&lt;p&gt;In this example we control:&lt;/p&gt;

&lt;p&gt;• Motor direction&lt;br&gt;
• Motor speed&lt;/p&gt;

&lt;p&gt;Speed is controlled using a 10K potentiometer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Components:&lt;/strong&gt;&lt;br&gt;
Arduino UNO&lt;br&gt;
L293D Motor Driver Shield&lt;br&gt;
5V DC Motor&lt;br&gt;
3 Push Buttons&lt;br&gt;
10K Potentiometer&lt;br&gt;
16×2 LCD (I2C)&lt;br&gt;
External 5V motor supply&lt;br&gt;
Breadboard&lt;br&gt;
Jumper wires&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5dv0ygczs8rdflrzdy7.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5dv0ygczs8rdflrzdy7.JPG" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The L293D motor driver shield should be mounted directly on top of the Arduino UNO, but in the wiring diagram it is shown separately for clarity and to better illustrate the external connections such as buttons and the potentiometer. The potentiometer is connected to analog pin A0, with its middle pin acting as the variable output, while the other two pins are connected to 5V and GND. By adjusting the potentiometer, the voltage at A0 changes, which directly controls the motor speed—higher voltage results in higher speed.&lt;/p&gt;

&lt;p&gt;Since the shield occupies most of the Arduino’s digital pins (D3 to D12), and D0–D1 are reserved for serial communication while D13 is connected to the onboard LED, only one digital pin (D2) remains free. To overcome this limitation, analog pins A1, A2, and A3 are used as digital input pins for push buttons. These buttons control motor operation: A1 for clockwise rotation, A2 for anticlockwise rotation, and A3 for stopping the motor.&lt;/p&gt;

&lt;p&gt;A 16×2 LCD with I2C interface is connected to the Arduino’s SDA and SCL pins to display motor speed and direction. The 5V DC motor is connected to the M3 terminal of the motor shield. An external 5V power supply is provided to the shield through the EXT_PWR terminal to ensure sufficient current for the motor.&lt;/p&gt;

&lt;p&gt;⚠️** Important:** Ensure that the power jumper (PWR) is removed when using an external power supply to avoid short circuits and potential damage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arduino Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* 
Interfacing DC Motor with Arduino UNO using L293D motor Driver shield
by www.playwithcircuit.com 
*/&lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;AFMotor.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;  &lt;span class="c1"&gt;// Library to run DC Motor Using Motor Driver Shield  &lt;/span&gt;
&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;LiquidCrystal_I2C.h&amp;gt;&lt;/span&gt;&lt;span class="c1"&gt; &lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;  &lt;span class="c1"&gt;// Library to Run I2C LCD&lt;/span&gt;
&lt;span class="n"&gt;LiquidCrystal_I2C&lt;/span&gt; &lt;span class="nf"&gt;lcd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x27&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="c1"&gt;// Format -&amp;gt; (Address,Columns,Rows )&lt;/span&gt;
&lt;span class="c1"&gt;// Create the motor object connected to M3&lt;/span&gt;
&lt;span class="n"&gt;AF_DCMotor&lt;/span&gt; &lt;span class="nf"&gt;motor&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="c1"&gt;// Define button pins&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;forwardButtonPin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;A1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;reverseButtonPin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;A2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;stopButtonPin&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;A3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Define potentiometer pin&lt;/span&gt;
&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potPin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;A0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Variables to store motor state and direction&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;motorRunning&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;motorDirection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BACKWARD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// FORWARD or BACKWARD&lt;/span&gt;
&lt;span class="c1"&gt;// Read the potentiometer value&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;motorSpeed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Variable to store button states&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;forwardButtonState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;stopButtonState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;reverseButtonState&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Inline function to check if button is pressed packed with debouncing logic&lt;/span&gt;
&lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;chkButtonState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;pinNum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;checkState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;debounceDelay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;digitalRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pinNum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;checkState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&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="n"&gt;debounceDelay&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="n"&gt;digitalRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pinNum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;checkState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&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;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// initialize the lcd&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;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Turn on the Backlight&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;backlight&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Clear the display buffer&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="c1"&gt;// Set cursor (Column, Row)&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;"DC Motor using"&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;1&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;"L293D Shield"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Set button pins as inputs&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forwardButtonPin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INPUT_PULLUP&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stopButtonPin&lt;/span&gt;   &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INPUT_PULLUP&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reverseButtonPin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INPUT_PULLUP&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Start with motor off&lt;/span&gt;
  &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSpeed&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;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RELEASE&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;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Clear the display buffer&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="c1"&gt;// Set cursor (Column, Row)&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;"Motor Direction:"&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;1&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;"Stopped   "&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="c1"&gt;// Read the potentiometer value for changing speed as per Analog input&lt;/span&gt;
  &lt;span class="n"&gt;potValue&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;analogRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;potPin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;motorSpeed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;potValue&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;1023&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;255&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Read the button states&lt;/span&gt;
  &lt;span class="n"&gt;forwardButtonState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chkButtonState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forwardButtonPin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;reverseButtonState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chkButtonState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reverseButtonPin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;stopButtonState&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chkButtonState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stopButtonPin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// check for Forward run&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forwardButtonState&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;motorRunning&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;motorDirection&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;BACKWARD&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Set cursor (Column, Row)&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;1&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;"Clock   "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;motorDirection&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;BACKWARD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSpeed&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;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RELEASE&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="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;motorRunning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;motorDirection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FORWARD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSpeed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;motorSpeed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FORWARD&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// check for Reverse run&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reverseButtonState&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;motorRunning&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;motorDirection&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;FORWARD&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Set cursor (Column, Row)&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;1&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;"Anti-Clk"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;motorDirection&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;FORWARD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSpeed&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;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RELEASE&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="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;motorRunning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;motorDirection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BACKWARD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSpeed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;motorSpeed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BACKWARD&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Stop motor&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stopButtonState&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;motorRunning&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Set cursor (Column, Row)&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;1&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;"Stopped         "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;motorRunning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSpeed&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;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RELEASE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Adjust motor speed if running and display speed on LCD&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;motorRunning&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSpeed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;motorSpeed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Set cursor (Column, Row)&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;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&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;"SPD:"&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="n"&gt;motorSpeed&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;255&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;"%  "&lt;/span&gt;&lt;span class="p"&gt;);&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;p&gt;If you want the complete tutorial to learn how to control servo and stepper motor including detailed schematics, Arduino code, and deeper explanation, you can read the full guide here: &lt;a href="https://playwithcircuit.com/l293d-motor-driver-shield-arduino-tutorial/" rel="noopener noreferrer"&gt;https://playwithcircuit.com/l293d-motor-driver-shield-arduino-tutorial/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>arduino</category>
      <category>motor</category>
    </item>
    <item>
      <title>Interfacing Reyax RYLR999 LoRa Module with Arduino</title>
      <dc:creator>rachna62</dc:creator>
      <pubDate>Sat, 17 Jan 2026 13:54:58 +0000</pubDate>
      <link>https://dev.to/rachna62/interfacing-reyax-rylr999-lora-module-with-arduino-2pj0</link>
      <guid>https://dev.to/rachna62/interfacing-reyax-rylr999-lora-module-with-arduino-2pj0</guid>
      <description>&lt;p&gt;Wireless communication over long distances is a critical requirement in modern IoT systems. While technologies like Wi-Fi, Bluetooth, and traditional RF modules are widely used, they all come with limitations—high power consumption, short range, or costly infrastructure. This is where LoRa (Long Range) technology stands out.&lt;/p&gt;

&lt;p&gt;In this guide, we demonstrate how to interface the Reyax RYLR999 LoRa module with an Arduino UNO to create a reliable, low-power, long-range wireless communication link. This article is a concise version of our complete hands-on tutorial, designed to help you understand the working principle, wiring, and communication flow before diving into the full project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is LoRa and Why Is It Used?
&lt;/h2&gt;

&lt;p&gt;LoRa is a low-power wireless communication technology developed for transmitting small packets of data over very long distances—often 15–20 km in open environments. It operates in license-free ISM bands such as 433 MHz, 868 MHz, and 915 MHz, making it ideal for battery-powered IoT devices like environmental sensors, alarms, and remote monitoring systems.&lt;/p&gt;

&lt;p&gt;Instead of focusing on high data rates, LoRa prioritizes range, reliability and power efficiency, allowing devices to remain in sleep mode for most of their operating life.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction to the Reyax RYLR999 Module
&lt;/h2&gt;

&lt;p&gt;The RYLR999 by Reyax Technology is a versatile wireless module that combines LoRa (868/915 MHz) and Bluetooth Low Energy (BLE 2.4 GHz) in a single compact device. What makes this module unique is its dual UART architecture—one interface dedicated to LoRa communication and another for BLE.&lt;/p&gt;

&lt;p&gt;The module is configured using AT commands, allowing users to set device addresses, network IDs, frequencies, and transmission parameters without complex radio programming. It can even function as a BLE-to-LoRa bridge, enabling a smartphone to send data over LoRa indirectly.&lt;/p&gt;

&lt;h2&gt;
  
  
  RYLR999 Pin Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9la2noe1lzojvrla5n22.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9la2noe1lzojvrla5n22.webp" alt=" " width="460" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VDD&lt;/strong&gt; – 5V regulated power supply&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GND&lt;/strong&gt; – Common ground&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RXD_LoRa&lt;/strong&gt; – Receives AT commands and data (3.3V logic)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TXD_LoRa&lt;/strong&gt; – Outputs received LoRa data and command responses&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RST&lt;/strong&gt; – Active-low reset pin&lt;/p&gt;

&lt;h2&gt;
  
  
  Interfacing RYLR999 with Arduino UNO
&lt;/h2&gt;

&lt;p&gt;To demonstrate LoRa communication, two Arduino-based nodes are used:&lt;/p&gt;

&lt;p&gt;Initiator Node (Transmitter): Periodically sends the message “Are you there?”&lt;/p&gt;

&lt;p&gt;Responder Node (Receiver): Waits for incoming data and replies with “Yes”&lt;/p&gt;

&lt;p&gt;This two-way communication verifies successful LoRa transmission and reception using AT commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wiring Connections – Initiator (Transmitting Side)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dg1njzd5mtzf4dqgim3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dg1njzd5mtzf4dqgim3.PNG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the initiator setup, the Arduino UNO communicates with the RYLR999 module via UART and displays transmission status on a 16×2 I2C LCD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power Connections&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arduino 5V → RYLR999 VDD&lt;/li&gt;
&lt;li&gt;Arduino GND → RYLR999 GND&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;UART Connections (Using Voltage Level Shifter)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since the Arduino UNO uses 5V logic and the RYLR999 operates at 3.3V logic, a bi-directional voltage shifter is required:&lt;/p&gt;

&lt;p&gt;RYLR999 TXD_LoRa → LV1 pin of Voltage shifter&lt;br&gt;
Arduino RX → HV1 output of voltage shifter module&lt;br&gt;
TXD pin of Arduino → HV2 pin of voltage shifter&lt;br&gt;
RxD LoRa pin → LV2 output of voltage shifter&lt;/p&gt;

&lt;p&gt;The voltage shifter itself must be powered correctly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arduino 5V → HV&lt;/li&gt;
&lt;li&gt;Arduino 3.3V → LV&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I2C LCD Connections&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VCC → 5V&lt;/li&gt;
&lt;li&gt;GND → GND&lt;/li&gt;
&lt;li&gt;SDA → A4&lt;/li&gt;
&lt;li&gt;SCL → A5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ensure the I2C address jumpers (A0, A1, A2) are not shorted when using address 0x27, as used in the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wiring Connections – Responder (Receiving Side)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38byakpaub6glkg5c3za.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38byakpaub6glkg5c3za.PNG" alt=" " width="648" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The responder circuit is simpler because no LCD is used. The Arduino continuously listens for LoRa messages and sends a reply when data is received.&lt;/p&gt;

&lt;p&gt;Power and UART connections remain identical to the initiator setup. The voltage level shifter is still required for safe UART communication. Only the LCD wiring is omitted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arduino Code for Initiator Setup
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/*
Code to send “Are you there?” from one Arduino to another Arduino using RLYR999 Module
and receive reply and display complete communication on I2C LCD by platwithcircuit.com
*/
#include &amp;lt;LiquidCrystal_I2C.h&amp;gt;
#define REPLY_TIMEOUT_IN_MS 300
#define REPLY_END_CHAR '\n'
#define MODULE_ADDRESS 0
#define RECEIVERS_ADDRESS 1
#define MIN_CHAR_TO_RCV 1
#define WAIT_FOR_RECIVERS_REPLY 3000
#define DELAY_BW_REPS 1000
// Init LCD at 0x27, 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
  boolean boRetVal = false;
  // begin serial communication at baud 115200,n,8,1
  // to communicate with the RF module
  Serial.begin(115200);
  // initialize the LCD
  lcd.init();
  // Turn ON the Backlight
  lcd.backlight();
  // Clear the display buffer
  lcd.clear();
  flushBuffer();  // clear rx data
  // Reset settings to factory defaults
  boRetVal = boRestoreFactoryDefaults();
  // setting the address if reset successfully
  if (boRetVal == true) {
    flushBuffer();  // clear rx data
    boRetVal = boSetAddress();
  }
  if (boRetVal == true) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Module Init");
    lcd.setCursor(0, 1);
    lcd.print("Successful");
    delay(1000);
  } else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Module Init");
    lcd.setCursor(0, 1);
    lcd.print("Failed");
    while (1)
      ;
  }
}
void loop() {
  String request = "Are you there?";
  String expected_reply = "Yes";
  bool boRetVal = false;
  flushBuffer();  // clear rx data
  // transmits String named request
  boRetVal = boSendData(request);
  if (boRetVal == true) {
    // Displaying Sent Msg
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Msg Sent:");
    lcd.setCursor(0, 1);
    lcd.print(request);
    delay(1000);
    boRetVal = chkReply(expected_reply, REPLY_END_CHAR, WAIT_FOR_RECIVERS_REPLY);
    if (boRetVal == true) {
      // Displaying received Msg
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Msg Received:");
      lcd.setCursor(0, 1);
      lcd.print(expected_reply);
    } else {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("No reply received.");
    }
  } else {
    // Displaying Failed Msg
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Msg Sending");
    lcd.setCursor(0, 1);
    lcd.print("Failed");
  }
  delay(DELAY_BW_REPS);  // wait before sending again
}
void sendCrLf(void) {
  Serial.write(0x0D);  // Carriage Return
  Serial.write(0x0A);  // Line Feed
}
void flushBuffer(void) {
  while (Serial.available() &amp;gt; 0) {
    Serial.read();
  }
}
bool chkReply(String chkString, char receiveUntil, unsigned int timeout) {
  String receivedString;       // save received data in this string object
  bool boReturnValue = false;  // function's return value
  // wait for reply
  do {
    timeout--;
    delay(1);  // delay of 1 ms
  } while ((Serial.available() &amp;lt; MIN_CHAR_TO_RCV) &amp;amp;&amp;amp; (timeout &amp;gt; 0));
  if (timeout) {
    // if timeout is left then a reply is received check for the string in the reply
    receivedString = Serial.readStringUntil(receiveUntil);
    if (receivedString.indexOf(chkString) != -1) {
      boReturnValue = true;
    } else {
      boReturnValue = false;
    }
  } else {
    boReturnValue = false;
  }
  // return result
  return boReturnValue;
}
bool boRestoreFactoryDefaults(void) {
  const char factoryDefaultCmd[] = "AT+FACTORY";  // command to be sent
  bool boReturnValue = false;                     // function's return value
  char downCounter = 100;                         // Down counter to wait for reply
  String receivedString;                          // save received data in this string object
  String chkRcvString1 = "+FACTORY";
  String chkRcvString2 = "+READY";
  // send command
  Serial.print(factoryDefaultCmd);
  sendCrLf();
  // check first string in reply
  boReturnValue = chkReply(chkRcvString1, REPLY_END_CHAR, REPLY_TIMEOUT_IN_MS);
  if (boReturnValue == true) {
    // check second string in reply
    boReturnValue = chkReply(chkRcvString2, REPLY_END_CHAR, REPLY_TIMEOUT_IN_MS);
  }
  // return result
  return boReturnValue;
}
bool boSetAddress(void) {
  const char setAddressCmd[] = "AT+ADDRESS=";  // command to be sent
  bool boReturnValue = false;                  // function's return value
  String chkRcvString = "+OK";
  // send command
  Serial.print(setAddressCmd);
  Serial.print(MODULE_ADDRESS);
  sendCrLf();
  // check reply
  boReturnValue = chkReply(chkRcvString, REPLY_END_CHAR, REPLY_TIMEOUT_IN_MS);
  // return result
  return boReturnValue;
}
bool boSendData(String data) {
  const char sendDataCmd[] = "AT+SEND=";  // command to be sent
  bool boReturnValue = false;             // function's return value
  String chkRcvString = "+OK";
  // send command
  Serial.print(sendDataCmd);
  Serial.print(RECEIVERS_ADDRESS);
  Serial.print(',');
  Serial.print(data.length());
  Serial.print(',');
  Serial.print(data);
  sendCrLf();
  // check reply
  boReturnValue = chkReply(chkRcvString, REPLY_END_CHAR, REPLY_TIMEOUT_IN_MS);
  // return result
  return boReturnValue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Arduino Code for Responder Setup visit: &lt;a href="https://playwithcircuit.com/reyax-rylr999-lora-module-arduino-tutorial/" rel="noopener noreferrer"&gt;How to Interface Reyax RYLR999 LoRa Module with Arduino&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>arduino</category>
    </item>
    <item>
      <title>Benefits of Microsoft PowerBI For Your Business</title>
      <dc:creator>rachna62</dc:creator>
      <pubDate>Mon, 27 Jun 2022 04:56:00 +0000</pubDate>
      <link>https://dev.to/rachna62/benefits-of-microsoft-powerbi-for-your-business-180d</link>
      <guid>https://dev.to/rachna62/benefits-of-microsoft-powerbi-for-your-business-180d</guid>
      <description>&lt;p&gt;Business intelligence is indispensable for agility, competitiveness, and efficiency. As a company grows, managing the data that is generated on a regular basis becomes increasingly complicated. This in turn creates a road-block for enterprises who wish to harness their data for decision-making.&lt;/p&gt;

&lt;p&gt;This is why business intelligence systems are being embraced to a great extent. Putting an analytical system in place to effectively analyze data helps an enterprise discover useful information and support enhanced decision-making.&lt;/p&gt;

&lt;p&gt;Power BI has various benefits, including assisting management teams in making quick decisions. It makes data visualization simple. It provides a visual representation of the company’s data, with options for tables, charts, gauges, and maps, making it easier for teams to utilize.&lt;/p&gt;

&lt;p&gt;Because of its simplicity and visual representation, Power BI is a strong decision support tool that makes the difference between a regular firm and an efficient, agile, and flexible organization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of Power BI&lt;/strong&gt;&lt;br&gt;
Here are the key benefits of using Power BI for your business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build personalized dashboards and interactive reports easily:&lt;/strong&gt;&lt;br&gt;
Power BI is known for its customizable dashboards that can be tailored to your company’s needs. It also includes visualizations that are intuitive and interactive. Using its easy drag-and-drop functionality, you can generate custom reports quickly. You can choose from a wide range of features to create powerful models and visualizations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimal upfront cost:&lt;/strong&gt;&lt;br&gt;
PowerBI is relatively inexpensive and affordable for small and mid-sized businesses as compared to other business intelligence tools. It also offers different versions so that you can pick the one suited to your business needs. You can also download the free version, Power BI Desktop, and start using it to make reports and dashboards on your computer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View Power BI reports across multiple devices:&lt;/strong&gt;&lt;br&gt;
Power BI makes it easy for you and your team to access reports and dashboards from anywhere. It also brings the reports to your Laptop, Desktop, and mobile devices for Windows and Android devices. Wherever you have got access to the internet, you can see your reports easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consolidate multiple data sources through Power BI:&lt;/strong&gt;&lt;br&gt;
Power BI can take data from different sources like Excel, SQL Server, Data warehouse, JSON, web, Text, and so on. In an exceedingly particular single report, you will take some data from the web, some from Excel, and some from Databases. And then, you can consolidate data and merge it in one dataset for analyzing reports as per our requirement, or we can say problem statement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instantly share dashboards:&lt;/strong&gt;&lt;br&gt;
By using the Power BI Pro service, you will be able to share your dashboards or reports within Power BI workspaces and allow co-ownership of a report or dashboard. You will be able to share the link and make that dashboard visible to the particular person to whom you shared the link. By sharing the link, your teammates can also edit those dashboards and provide insights from their end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheduled data refresh:&lt;/strong&gt;&lt;br&gt;
By using the Power BI Pro service, you can set refresh on your reports to be daily or hourly. By setting refresh, your reports’ loading time will decrease and performance will increase. It will save your loading time of the report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drill-down functionality:&lt;/strong&gt;&lt;br&gt;
In Power BI, if you’ve got to analyze data for a particular Country, State, City, and Town wise sales, you can use this Drill-down functionality. It will offer you very detailed information about your analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write simple sentences to run report queries:&lt;/strong&gt;&lt;br&gt;
You can ask a question in Power BI about your report. It will provide you with the answers to that particular question. For example, suppose you have got data on the manufacturing industry and you have got to grasp about 5 top-selling products. So you will ask a question to your report by using the Question and Answer functionality in Power BI. In that case, it will provide you the answer by filtering your report. It will show you the top 5 selling products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Balanced simplicity and performance:&lt;/strong&gt;&lt;br&gt;
Power BI has in-memory analysis technology and Data analysis expression language balance between simplicity and performance. By using simple English, you will write the DAX queries in Power BI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offers an unparalleled Excel integration&lt;/strong&gt;&lt;br&gt;
Many businesses still rely largely on Excel when it comes to analytics and reporting. Power BI can integrate seamlessly with Excel. Without learning a new application or language, you can effortlessly link queries, data models, and reports to Power BI dashboards and build interactive visualizations. You may set it up so that when you open your dashboard, you see the correct data right away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
Microsoft Power BI can be ideal solution for your business if you are looking for reporting and analytical capabilities that go beyond Excel. You can easily visualize and analyze data across your entire business and gain deep insights into your operations and performance using Power BI.&lt;/p&gt;

&lt;p&gt;Whether you are still analyzing your business needs or need help getting started with Power BI, OmnePresent can help. Our &lt;strong&gt;&lt;a href="https://omnepresent.com/technology-microsoft-powerapps/" rel="noopener noreferrer"&gt;Power BI consultants&lt;/a&gt;&lt;/strong&gt; can guide you through every step of the way. Book a free consultation with us.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>powerfuldevs</category>
      <category>lowcode</category>
      <category>datascience</category>
    </item>
  </channel>
</rss>
