Archives for 

arduino

Arduino Bluetooth Shield Source Code and Tutorial

arduino bluetooth shield master to slave

arduino bluetooth shield master to slave

 

This is a tutorial on how to use Arduino Bluetooth shield.

To use this bluetooth shield, you have to plug it on the Arduino Uno board as shown in the image above.

This Bluetooth shield can be programmed to be a master or slave. If Bluetooth shield is programmed into the master, the bluetooth shield will make ‘a name’ for bluetooth connectivity.

In addition, it will set the baudrate and will be looking for signals bluetooth enabled. After finding an active bluetooth signal, This bluetooth shield will try to make the process of “pairing” and if the appropriate settings, then it will be connected.

Here is an example program “Master Bluetooth Shield”

#include <SoftwareSerial.h> // Software Serial Port

#define RxD 6
#define TxD 7
#define DEBUG_ENABLED 1

String retSymb = “+RTINQ=”; // start symble when there’s any return
String slaveName = “;SeeedBTSlave”; // caution that ‘;’must be included, and make sure the slave name is right.
int nameIndex = 0;
int addrIndex = 0;

String recvBuf;
String slaveAddr;

String connectCmd = “\r\n+CONN=”;

SoftwareSerial blueToothSerial(RxD,TxD);

void setup()
{
Serial.begin(9600);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
setupBlueToothConnection();
//wait 1s and flush the serial buffer
delay(1000);
Serial.flush();
blueToothSerial.flush();
}

void loop()
{
char recvChar;
while(1)
{
if(blueToothSerial.available()) //check if there’s any data sent from the remote bluetooth shield
{
recvChar = blueToothSerial.read();
Serial.print(recvChar);
}
if(Serial.available()) //check if there’s any data sent from the local serial terminal, you can add the other applications here
{
recvChar = Serial.read();
blueToothSerial.print(recvChar);
}
}
}

void setupBlueToothConnection()
{
blueToothSerial.begin(38400); // Set BluetoothBee BaudRate to default baud rate 38400
blueToothSerial.print(“\r\n+STWMOD=1\r\n”); // set the bluetooth work in master mode
blueToothSerial.print(“\r\n+STNA=SeeedBTMaster\r\n”); // set the bluetooth name as “SeeedBTMaster”
blueToothSerial.print(“\r\n+STAUTO=0\r\n”); // Auto-connection is forbidden here
delay(2000); // This delay is required.
blueToothSerial.flush();
blueToothSerial.print(“\r\n+INQ=1\r\n”); //make the master inquire
Serial.println(“Master is inquiring!”);
delay(2000); // This delay is required.

//find the target slave
char recvChar;
while(1)
{
if(blueToothSerial.available())
{
recvChar = blueToothSerial.read();
recvBuf += recvChar;
nameIndex = recvBuf.indexOf(slaveName); //get the position of slave name

//nameIndex -= 1;
//decrease the ‘;’ in front of the slave name, to get the position of the end of the slave address
if ( nameIndex != -1 )
{
//Serial.print(recvBuf);
addrIndex = (recvBuf.indexOf(retSymb,(nameIndex – retSymb.length()- 18) ) + retSymb.length());//get the start position of slave address
slaveAddr = recvBuf.substring(addrIndex, nameIndex);//get the string of slave address
break;
}
}
}

//form the full connection command
connectCmd += slaveAddr;
connectCmd += “\r\n”;
int connectOK = 0;
Serial.print(“Connecting to slave:”);
Serial.print(slaveAddr);
Serial.println(slaveName);
//connecting the slave till they are connected
do
{
blueToothSerial.print(connectCmd);//send connection command
recvBuf = “”;
while(1)
{
if(blueToothSerial.available()){
recvChar = blueToothSerial.read();
recvBuf += recvChar;
if(recvBuf.indexOf(“CONNECT:OK”) != -1)
{
connectOK = 1;
Serial.println(“Connected!”);
blueToothSerial.print(“Connected!”);
break;
}
else if(recvBuf.indexOf(“CONNECT:FAIL”) != -1)
{
Serial.println(“Connect again!”);
break;
}
}
}
}while(0 == connectOK);
}

arduino bluetooth shield slave to computer master tutorial

arduino bluetooth shield slave to computer master tutorial

If you set it as a slave bluetooth shield, then this will be passive. This bluetooth shield will set the baudrate and put a name of bluetooth connectivity.

After that, it will wait until there is a device that finding and trying to ‘pairing itself’. If the settings are appropriate, then both bluetooth device will be connected.

Here is an example program “Slave Bluetooth Shield”

#include <SoftwareSerial.h> //Software Serial Port
#define RxD 6
#define TxD 7

#define DEBUG_ENABLED 1

SoftwareSerial blueToothSerial(RxD,TxD);

void setup()
{
Serial.begin(9600);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
setupBlueToothConnection();

}

void loop()
{
char recvChar;
while(1)
{
if(blueToothSerial.available())
{//check if there’s any data sent from the remote bluetooth shield
recvChar = blueToothSerial.read();
Serial.print(recvChar);
}
if(Serial.available())
{//check if there’s any data sent from the local serial terminal, you can add the other applications here
recvChar = Serial.read();
blueToothSerial.print(recvChar);
}
}
}

void setupBlueToothConnection()
{
blueToothSerial.begin(38400); // Set BluetoothBee BaudRate to default baud rate 38400
blueToothSerial.print(“\r\n+STWMOD=0\r\n”); // set the bluetooth work in slave mode
blueToothSerial.print(“\r\n+STNA=SeeedBTSlave\r\n”); // set the bluetooth name as “SeeedBTSlave”
blueToothSerial.print(“\r\n+STOAUT=1\r\n”); // Permit Paired device to connect me
blueToothSerial.print(“\r\n+STAUTO=0\r\n”); // Auto-connection should be forbidden here
delay(2000); // This delay is required.
blueToothSerial.print(“\r\n+INQ=1\r\n”); // make the slave bluetooth inquirable
Serial.println(“The slave bluetooth is inquirable!”);
delay(2000); // This delay is required.
blueToothSerial.flush();
}

The Easiest Arduino Uno Bluetooth Shield

arduino bluetooth seeedstudio shield

arduino bluetooth seeedstudio shield

The easiest Arduino Uno Bluetooth shield for your Arduino Uno project is SeeedStudio Bluetooth Shield. Simply by plugging the Bluetooth Shield on your Arduino Uno and it has been ready for use. SeeedStudio bluetooth shield work using serial communication. You can choose two pins from Adruino Uno (from pin D0 to D7) to be used as Software Serial Port – Transmite Data (TX) and Receive Data (RX). You can choose RX and TX pins by sliding ‘jumper pin’ on the port that you want (D0 to D7).

arduino bluetooth seeedstudio shield tutorial

arduino bluetooth seeedstudio shield tutorial

 

Arduino Uno Bluetooth Shield ( SeeedStudio Bluetooth Shield ) Features :

  1. Input Voltage: 3.3V
  2. Baudrate: 9600, 19200, 38400, 57600, 115200, 230400, 460800
  3. Seeeduino/Arduino compatible
  4. Up to10m communication distance in house without obstacle
  5. UART interface (TTL) with programmable baud rate (SPP firmware installed)
  6. Default Baud rate: 38400, Data bits: 8, Stop bit: 1, Parity: No parity
  7. Default PINCODE:”0000”
  8. A full set of configuration commands
  9. On board PCB Antenna
  10. FCC Part 15 Certificated

 

Arduino uno bluetooth shield

Arduino uno bluetooth shield

You can still use all the Arduino pin bluetooth although this shield cover Arduino Uno board.  This Bluetooth shield provides 2 grove connectors (digital and analog) for you to install the grove module.

Pad TypeDescription
PIO1Status instruction port of Bluetooth module can be read by Arduino A1 port: low-disconnected, high-connected.
BT_RXUART Data input of Bluetooth module.
BT_TXUART Data output Bluetooth module.
Two Grove connectorsOne is Digital (D8 and D9), the other is I2C/Analog (A4 and A5).

 

arduino bluetooth shield master to slave

arduino bluetooth shield master to slave

You can set this shield bluetooth become a master or slave. For a tutorial and sample programs (source code program) you can also read on this blog.

arduino bluetooth shield slave to computer master tutorial

arduino bluetooth shield slave to computer master tutorial

You can connect this bluetooth shield with the other one (2 different bluetooth shield).

You can also connect a Bluetooth shield with a laptop or computer.

You can also connect a Bluetooth shield with the smartphone.

arduino bluetooth shield slave to master tutorial

arduino bluetooth shield slave to master tutorial

Arduino Source Code for Water Flow Meter Sensor

water-flow-arduino-tutorial

water-flow-arduino-tutorial

As described in the article Water Flow Meter Sensor, this sensor can detect the flow of water passing through the sensor.

This sensor has three wires (red, black and yellow). Red cable is connected to VCC. Black cable is connected to GND. And the yellow cable is connected to the arduino data pin (digital pin number 2) but you will need to pull up this cable with a 10k resistor.

Once you finish making the hardware, you should upload this program to the Arduino software IDE.

The program will calculate the flow rate and sends it via the serial port (USB cable). To view the sensors data, you must connect a computer with the Arduino and see it through the terminal on the Arduino IDE software.

 

Arduino Program Source Code for Water Flow Meter Sensor :

volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;
int hallsensor = 2; //The pin location of the sensor

void rpm () //This is the function that the interupt calls
{
NbTopsFan++; //This function measures the rising and falling edge of the

hall effect sensors signal
}
// The setup() method runs once, when the sketch starts
void setup() //
{
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
Serial.begin(9600); //This is the setup function where the serial port is

initialised,
attachInterrupt(0, rpm, RISING); //and the interrupt is attached
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop ()
{
NbTopsFan = 0; //Set NbTops to 0 ready for calculations
sei(); //Enables interrupts
delay (1000); //Wait 1 second
cli(); //Disable interrupts
Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate

in L/hour
Serial.print (Calc, DEC); //Prints the number calculated above
Serial.print (” L/hour\r\n”); //Prints “L/hour” and returns a new line
}

Arduino LCD and Keypad Shield

lcd keypad shield - arduino shield

lcd keypad shield – arduino shield

Arduino LCD Shield that widely used is made by DFRobot.

DFRobot combines LCD Shield and Keypad Shield in one module. This LCD shield using a 16×2 character LCD components, and 5 buttons that you can use to create a menu option on your project.

This Arduino LCD keypad shield can be mounted on the Arduino Uno. And like Arduino shield in general, you can install it by plugging in the top of Arduino Uno.

lcd keypad shield - datasheet

lcd keypad shield – datasheet

You will still be able to use all Arduino pins, although it is installed by sticking the Arduino Board. This diagram illustrates that this LCD Arduino provide pins which replaces the function of the pins on the Arduino board. You can still access + 5V, 3.3V, and ground pin, which has been provided on the LCD keypad shield.

PinFunction
Analog 0Button (select, up, right, down and left)
Digital 4DB4
Digital 5DB5
Digital 6DB6
Digital 7DB7
Digital 8RS (Data or Signal Display Selection)
Digital 9Enable
Digital 10Backlit Control

It uses 8 pin arduino, and you can take advantage of the other pins for sensors or other purposes. Pin A1 to detect the five buttons, while the digital pin 4 to 10 is used to control the LCD.

lcd keypad board - arduino shield

lcd keypad board – arduino shield

SG90 Tower Pro Servo Datasheet

servo-for-arduino-sg90-tower-pro

servo-for-arduino-sg90-tower-pro

One type of electric motor is a servo. Servo motor is used to make mechanical robotic or automated devices. Servo work based on the frequency signal from the controller (such as a microcontroller or arduino).

SG90 Tower Pro servo motor can also be controlled by a ruspberry pi.

You can plug this SG90 Tower Pro Servo straight onto the raspberry pi GPIO pins 4,6,8 without some extra wires. Pin 8 on the raspberry pi is normally the UART Tx pin, so your SG90 Tower Pro servo will not work properly if you connect it without disabling the UART before running the main program, You can search the instructions for how to disabling the UART on pin 8 from google.

sg90 tower pro servo cable pin

sg90 tower pro servo cable pin

Each servo motor cables have different pin configurations. Tower Pro SG90 servo has a three-pin cable. Red cable is wired VCC. Black/brown cable is a ground cable. While the orange cable is a signal cable.

You can find the SG90 Tower Pro servo tutorial and arduino uno source code here.

HC-SR04 Distance Sensor Arduino Source Code

hc-sr04 distance sensor and arduino wire

hc-sr04 distance sensor and arduino wire

HC-SR04 is a proximity sensor that is very widely used.

This sensor is very easy to use because it only needs a simple syntax for programming it. You can view the datasheet and specification of the sensor’s hc-sr04 here.

Sensor HC-SR04 is widely used as a sensor on the robot to detect objects around the robot. In this tutorial, use the Arduino Uno as the processor. While its pin configuration can be seen in the image above.

VCC and GND pins on the sensor is connected to the VCC and GND pins on the Arduino UNO. While Trig pin is connected to digital pin 11 on the Arduino UNO. And echo pin is connected to digital pin 12 on the Arduino UNO.

 

HC-SR04 Source code :

#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);

//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;

if (distance >= maximumRange || distance <= minimumRange){
/* Send a negative number to computer and Turn LED ON
to indicate “out of range” */
Serial.println(“-1”);
digitalWrite(LEDPin, HIGH);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading. */
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}

//Delay 50ms before next reading.
delay(50);
}

ATMega8535 Schematic Diagram

avr-atmega8535-minimum-system-schematic-circuit

avr-atmega8535-minimum-system-schematic-circuit

AVR ATMega8535 is a very popular microcontroller.

In the recent years, ATMega8535 has been displaced by the other microcontroller with a more complete feature like ATMega32, ATMega16 or ATMega128. Even, when Arduino offers ease (in the used and programming), the conventional Microcontroller becoming obsolete.

However, some users are still loyal to use the conventional microcontroller. And if you want to learn about the basics of the microcontroller, then you have to learn from the conventional microcontroller. You have to create an electronic circuit by yourself. And you have to find out all about the components used. After you finish creating the electronic circuits, then you will understand how the microcontroller’s minimum system so that it able works. And you will understand how a microcontroller work,  before you start programming it.

Like other microcontroller, we need some electronic components so that it able to work.

Crystal,some resistor and capacitor for the clock and the reset button. And don’t forget to provide the supply (VCC and GND) on the microcontroller board. You can make the ATMega8535 schematic diagram with the EAGLE software like the exsample above.

HC-SR04 Ultrasonic Distance Sensor

hc-sr04-distance-sensor

hc-sr04-distance-sensor

HC-SR04 is one of a proximity sensor. This sensor is very cheap, so many developers that use these sensors to the system they developed.

HC-SR04 can measure distances with ultrasonic wave method. This sensor has two part which is important, namely the transmitter and receiver. The transmitter will throw ultrasonic waves and will be reflected by a particular object. This reflected wave will be captured by the receiver. The delivery time can be determined from the calculation of the transmitting and catching time.

hc-sr04 distance sensor for arduino

hc-sr04 distance sensor for arduino

HC-SR04 has a 4 pin connector: VCC, Trig (T), echo (R), GND. VCC is connected to the voltage of 5V, GND connected to Ground, Trig (T) is connected to the data pin microcontroller, and echo (R) is connected to the data microcontroller (different pin).

– Model: HC-SR04
– Color: Blue + Silver
– Working voltage : 5V(DC)
– Static current: Less than 2mA.
– Output signal: Electric frequency signal, high level 5V, low level 0V.
– Sensor angle: Not more than 15 degrees.
– Detection distance: 2cm~450cm.
– High precision: Up to 3mm
– Mode of connection: VCC / trig(T) / echo(R) / GND
– Module Working Principle:
– Adopt IO trigger through supplying at least 10us sequence of high level signal
– The module automatically send eight 40khz square wave and automatically detect whether receive the returning pulse signal
– If there is signals returning, through outputting high level and the time of high level continuing is the time of that from the ultrasonic transmitting to receiving

 

hc-sr04 distance sensor and arduino wire

hc-sr04 distance sensor and arduino wire

For example, you can connect Trig (T) pin and echo (R) pin on the Arduino Uno as shown above. In the picture can be seen that Trig is connected to the pin number 11 and the echo is connected to the pin number 12. For source code and the programming tutorial you can read here.

Water Flow Meter Sensor for Arduino

Water flow sensor for arduino tutorial

Water flow sensor for arduino tutorial

Water flow meter sensor is a sensor that can detect the speed of water flow.

One of a flow sensor that is often used is the production of seeedstudio. Water flow meter sensor works based on half-effect sensors that are inside.

Half-effect sensors work by rotation of the turbine that is rotated by the flow of water. Water flow meter sensor is wrapped with a plastic body which has two holes as input and output streams.

Water flow sensor for arduino tutorial

Water flow sensor for arduino tutorial

Specifications Water Flow Meter Sensor

Mini. Wokring VoltageDC 4.5V
Max. Working Current15mA(DC 5V)
Working Voltage5V~24V
Flow Rate Range1~30L/min
Load Capacity≤10mA(DC 5V)
Operating Temperature≤80℃
Liquid Temperature≤120℃
Operating Humidity35%~90%RH
Water Pressure≤2.0MPa
Storage Temperature-25℃~+80℃
Storage Humidity25%~95%RH

 

Water flow datasheet

Water flow datasheet

Water flow arduino datasheet

Water flow arduino datasheet

Components of the water flow meter sensor

No.NameQuantityMaterialNote
1Valve body1PA66+33%glass fiber
2Stainless steel bead1Stainless steel SUS304
3Axis1Stainless steel SUS304
4Impeller1POM
5Ring magnet1Ferrite
6Middle ring1PA66+33%glass fiber
7O-seal ring1Rubber
8Electronic seal ring1Rubber
9Cover1PA66+33%glass fiber
10Screw4Stainless steel SUS3043.0*11
11Cable11007 24AWG

 

You can read data from these sensors water flow meter with arduino. For example, the schematic diagram will assist you in arranging a water flow meter in the arduino.

water-flow-sensor-for-arduino

water-flow-sensor-for-arduino

Arduino Uno R3 the Computing Platform

Arduino is a trademark that manufactures microcontroller development board. Arduino UNO is one type of development board produced by Arduino, and the new series is arduino uno R3.

arduino-uno-r3-board

arduino-uno-r3-board

Arduino UNO R3 is a computing platform that is very easy to use. Arduino UNO R3 is ATmega328P microcontroller based. According datasheet from ATmega328P, Arduino UNO R3 has a 14 pin digital input / output, and 6 of them can be used as PWM output pin. Arduino UNO R3 also has 6 analog inputs, has a 16MHz crystal, a USB port which can be used to download the program, a power jack, a reset button, and ICSP header.

how to optimized the arduino uno r3

how to optimized the arduino uno r3

 

Arduino features shown in the diagram above.

Arduino UNO R3 provide + 5V, 3.3V and GND pin as a power source if needed by sensors or other devices. Users can also use the SDA and SCL pins on the pin number 27 and 28. Features ADC (Analog to Digital Converter) can be used on 23-28 pins. While the interrupt feature can be used on pin number 4 and 5 (pin number 4 is int0 and pin number 5 is int1). Serial communication (RX and TX) is provided on pin numbers 2 and 3.

arduino uno r3 layout diagram

arduino uno r3 layout diagram

 

Arduino Uno R3 design is very simple to facilitate the user in using it. On the left we will see an electric jack socket. Power jack is compatible to the power supply voltage 9-12V. In addition, we will see the USB port to communicate with a computer, either in downloading a program or data transfer via USB. As an indicator, arduino provides 4 LEDs. 1 for the power indicator, two LED indicators for serial communication (RX and TX), and 1 other LED connected at pin 13.

 

arduino uno r3 microcontroller pin mapping

arduino uno r3 microcontroller pin mapping

 

The ATmega328 microcontroller datasheet shows the various features that can be used on the Arduino UNO R3.

 

arduino uno r3 board layout

arduino uno r3 board layout

Source Code for Arduino Servo Control

tower-pro-sg90-servo-and-arduino-uno-wiring-cable-tutorial

tower-pro-sg90-servo-and-arduino-uno-wiring-cable-tutorial

Servo is one type of motor controlled by a frequency signal. However, some types of servo have different ways to control it. Because each type of servo have different degrees of movement.

For example, I use a servo Tower Pro SG90 and controlled using the Arduino UNO. Servo Tower Pro SG90 this has the following specifications (or you can read here for more details):

Tiny and lightweight with high output power. Servo can rotate approximately 180 degrees (90 in each direction), and works just like the standard kinds but smaller. You can use any servo code, hardware or library to control these servos. Good for beginners who want to make stuff move without building a motor controller with feedback & gear box, especially since it will fit in small places. It comes with a 3 horns (arms) and hardware.

Tower Pro SG90 Specifications :
Weight: 9 g
Dimension: 22.2 x 11.8 x 31 mm approx.
Stall torque: 1.8 kgf·cm
Operating speed: 0.1 s/60 degree
Operating voltage: 4.8 V (~5V)
Dead band width: 10 μs
Temperature range: 0 °C – 55 °C

 

Tower Pro SG90 Servo characteristic : Position “0” (1.5 ms pulse) is middle, “90” (~2 ms pulse) is all the way to the right, “-90” (~1ms pulse) is all the way to the left.

This is the Arduino Source Code for the Sweep Mode Servo :

#include <Servo.h>

Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created

int pos = 0; // variable to store the servo position

void setup()
{
myservo.attach(2); // attaches the servo on pin 2 to the servo object
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
}

Source Code for Arduino LCD Keypad Shield

lcd keypad shield - datasheet

lcd keypad shield – datasheet

Here is the Arduino programming tutorial for LCD keypad shield. Arduino LCD keypad shield used is described in this article.

How to install LCD keypad shield on arduino uno simply by plugging in the arduino board. This tutorial will explain 3 arduino program. The first source code explains how to display characters on the LCD shield. Source code number two explains how to read keys on the keypad shield. And source code number three is the incorporation of lcd shield source code and keypad shield source code.

Source code to display characters on the LCD

//Sample using LiquidCrystal library
#include <LiquidCrystal.h>

// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup()
{
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print(“avrchip.com”); // print a simple message
}

void loop()
{
lcd.setCursor(9,1); // move cursor to second line “1” and 9 spaces over
lcd.print(millis()/1000); // display seconds elapsed since power-up

}

 

 

Source code to read keys on keypad shield

//Sample using LiquidCrystal library
#include <LiquidCrystal.h>
// define some values used by the panel and buttons
int button = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
// For V1.1 us this threshold
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;

// For V1.0 comment the other threshold and use the one below:
/*
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
*/
return btnNONE; // when all others fail, return this…
}

void setup()
{

}

void loop()
{
button = read_LCD_buttons(); // read the buttons
}

 

LCD keypad shield source code

//Sample using LiquidCrystal library
#include <LiquidCrystal.h>

// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
// For V1.1 us this threshold
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;

// For V1.0 comment the other threshold and use the one below:
/*
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
*/
return btnNONE; // when all others fail, return this…
}

void setup()
{
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print(“Push the buttons”); // print a simple message
}

void loop()
{
lcd.setCursor(9,1); // move cursor to second line “1” and 9 spaces over
lcd.print(millis()/1000); // display seconds elapsed since power-up
lcd.setCursor(0,1); // move to the begining of the second line
lcd_key = read_LCD_buttons(); // read the buttons

switch (lcd_key) // depending on which button was pushed, we perform an action
{
case btnRIGHT:
{
lcd.print(“RIGHT “);
break;
}
case btnLEFT:
{
lcd.print(“LEFT “);
break;
}
case btnUP:
{
lcd.print(“UP “);
break;
}
case btnDOWN:
{
lcd.print(“DOWN “);
break;
}
case btnSELECT:
{
lcd.print(“SELECT”);
break;
}
case btnNONE:
{
lcd.print(“NONE “);
break;
}
}

}