Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (1 vote)
259 views

Micro 131L Lab Experiment 10 11 LCD Keypad and RTC in Arduino Board

This document contains laboratory procedures and code for controlling an LCD display, keypad, and real-time clock (RTC) module using an Arduino board. The procedures walk through connecting the components, writing code to display temperature readings from a temperature sensor on the LCD, and code to adjust and display the time and date from the RTC module on the LCD using buttons. The code examples use libraries to interface with the LCD and RTC components.

Uploaded by

ELLAINE DE CLARO
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (1 vote)
259 views

Micro 131L Lab Experiment 10 11 LCD Keypad and RTC in Arduino Board

This document contains laboratory procedures and code for controlling an LCD display, keypad, and real-time clock (RTC) module using an Arduino board. The procedures walk through connecting the components, writing code to display temperature readings from a temperature sensor on the LCD, and code to adjust and display the time and date from the RTC module on the LCD using buttons. The code examples use libraries to interface with the LCD and RTC components.

Uploaded by

ELLAINE DE CLARO
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 23

Colegio De San Juan De Letran - Calamba

Bo. Bucal Calamba City, Laguna

School of Engineering

MICRO131L: Microprocessor Systems Lab

LCD, Keypad, and RTC in Arduino Board


Laboratory Experiment No. 10 & 11

Grade

Group Number : _________ Signature


Group Leader : SN, FN MI _______________________
Members : SN, FN MI _______________________

SN, FN MI _______________________

Date Performed: ________________


Date Submitted: ________________

Engr. Ricrey E. Marquez, CpE, MSCS


(Lab Instructor)
OBJECTIVES AND MATERIALS

Objectives:

After this lab experiment, student should be able to:

1. Describe concepts of LCD, Keypad, and Real-Time Clock,


2. Demonstrate the methods of controlling LCD, Keypad, and RTC modules,
3. Design and create an Arduino sketch program for controlling LCD,
Keypad, and RTC modules.

Materials:

QUANTITY PART DESCRIPTION


NUMBER
1 - Universal MCU Trainer Kit
Working PC or laptop with pre-installed
1 -
Arduino Sketch and Proteus Design Suite
1 - Gizduino (Arduino-compatible) Board
1 - USB data cable
1 set - Connecting wires
PROCEDURES

Part 1 – Dealing with LCD Module

1. Prepare the all materials that will be used in Figure 10.1.


2. Construct the schematic diagram shown in Figure 10.1 in e-Gizmo
Universal MCU Kit.
3. In Arduino Sketch program, click New and encode or copy the program
listing 10.1 source file.
4. Open the Notepad application, then re-type or copy the header file of
program listing 10.1. Click Save as Type and select All Files.
5. Save with a filename as lm34_lcd_temp.h, and click Close.
6. Add the header file in your current code by clicking Sketch > Add File.. >
then locate lm34_lcd_temp.h and click Open.
7. Save your source code having a filename Design Apps 10.1.
8. Compile your program. If error exist, fix and re-compile until no error
detected.
9. From the Tools menu, configure the Board (ex. Arduino Uno) and Port (ex.
COM4). Note: If error occur during upload, please check the MCU module
you used, the serial port assignment, or install the USB plug-and-play driver
provided by the manufacturer. Then try to re-upload your code.
10. Observe the functionality of your code by validating the displayed output of
the circuit.

Program Listing 10.1 – Temperature Version 3

This program will demonstrate LM34 temperature sensor having a


resolution of 1mV/0.1 F. The output pin provides an analog voltage output that is
linearly proportional to the Fahrenheit temperature. Pin 2 gives an output of 1
millivolt per 0.1°F (10mV per degree). Therefore, to get the degree value in
Fahrenheit, all that must be done is to take the voltage output and divide it by 10 -
- this give out the value degrees in Fahrenheit. Also, program will display the
equivalent temperature in Celsius in 16:2 LCD module

A. Header File – lm34_lcd_temp.h


//macro for Servo motor
#define LM34_OUT (0)
#define MAX_ADC (1024.0)
#define REF_VOLT (5000)
//5V = 5000mV
#define GET_MVOLT (raw_voltage / MAX_ADC) * REF_VOLT
//1mV/0.1 = 10
#define MVOLT_TO_FAHR milli_volts / 10
#define FAHR_TO_CELC (fahr_temp - 32) * (5.0 / 9.0)
#define BAUD_RATE (9600)
#define SHORT_DEL delay(500)
//macro for LCD module
#define ROWS (2)
#define COLS (16)
#define RS (12)
#define EN (11)
#define D4 (5)
#define D5 (4)
#define D6 (3)
#define D7 (2)
//macro for LCD coordinates
#define ROW1 (0)
#define ROW2 (1)
#define COL1 (0)
#define COL2 (3)
#define COL3 (11)
//Macro delay routines

B. Source file – Design_Apps_10.1.ino


#include <LiquidCrystal.h>
#include "lm34_lcd_temp.h"

//instantiate LCD object


LiquidCrystal MyTemp_LCD(RS, EN, D4, D5, D6, D7);

void setup()
{
init_device();
}

void loop()
{

int raw_voltage= analogRead(LM34_OUT);


float milli_volts = GET_MVOLT;
float fahr_temp = MVOLT_TO_FAHR;
float cel_temp = FAHR_TO_CELC;

intro_display();
display_temp(fahr_temp, cel_temp);

void init_device()
{
//initialize LCD size
MyTemp_LCD.begin(COLS, ROWS);
//clear LCD text display
MyTemp_LCD.clear();
//display "MICRO131L Lab 10" at 0,0
MyTemp_LCD.setCursor(COL1, ROW1);
MyTemp_LCD.print("MICRO131L Lab 10");
//display "Design Apps 10.1" at 0,1
MyTemp_LCD.setCursor(COL1, ROW2);
MyTemp_LCD.print("Design Apps 10.1");
//wait for 2s
LONG_DEL;
//clear LCD text display
MyTemp_LCD.clear();
}

void intro_display()
{
MyTemp_LCD.clear();
MyTemp_LCD.setCursor(COL1, ROW1);
MyTemp_LCD.print("TEMP. MONITORING");
MyTemp_LCD.setCursor(COL2, ROW2);
MyTemp_LCD.print("VERSION 3");
SHORT_DEL;
}

void display_temp(float t_farh, float t_cel)


{
MyTemp_LCD.clear();
MyTemp_LCD.setCursor(COL1, ROW1);
MyTemp_LCD.print("DEG. FARH: ");
MyTemp_LCD.setCursor(COL3, ROW1);
MyTemp_LCD.print(t_farh);
MyTemp_LCD.setCursor(COL1, ROW2);
MyTemp_LCD.print("DEG. CEL : ");
MyTemp_LCD.setCursor(COL3, ROW2);
MyTemp_LCD.print(t_cel);
LONG_DEL;
}

Part 2 – Dealing with RTC Module

1. Prepare the all materials that will be used in Figure 10.2.


2. Construct the schematic diagram shown in Figure 10.2 in e-Gizmo
Universal MCU Kit.
3. In Arduino Sketch program, click New and encode or copy the program
listing 10.2 source file.
4. Open the Notepad application, then re-type or copy the header file of
program listing 10.2. Click Save as Type and select All Files.
5. Save with a filename as rtc_lcd.h, and click Close.
6. Add the header file in your current code by clicking Sketch > Add File.. >
then locate rtc_lcd.h and click Open.
7. Save your source code having a filename Design Apps 10.2.
8. Compile your program. If error exist, fix and re-compile until no error
detected.
9. From the Tools menu, configure the Board (ex. Arduino Uno) and Port (ex.
COM4). Note: If error occur during upload, please check the MCU module
you used, the serial port assignment, or install the USB plug-and-play driver
provided by the manufacturer. Then try to re-upload your code.
10. Observe the functionality of your code by validating the displayed output of
the circuit.

Program Listing 10.2 – Adjustable Time and Calendar in LCD Module

This program will demonstrate how to adjust the time and date generated
by DS1307 RTC (Real-time Clock) chip using push button switch in 16:2 LCD
module.

A. Header File – rtc_lcd.h


//macro for LCD pins
#define RS (12)
#define EN (11)
#define D4 (5)
#define D5 (4)
#define D6 (3)
#define D7 (2)
//macro for LCD size
#define ROWS (2)
#define COLS (16)
//LCD coordinates
#define ROW1 (0)
#define ROW2 (1)
#define COL (0)
#define MAX_LOOP (10)
#define MIN_LOOP (0)
//macro PB switches
#define SET_PB_SW (9)
#define EDIT_PB_SW (8)
//macro delay routines
#define I2C_TX_DEL delay(200)
#define DISP_TEXT_DEL delay(200)
#define DS1307_DISP_DEL delay(50)
#define LOOP_DEL delay(25)
#define INTRO_DEL delay(1000)

//macro constants
#define INIT_PARAM (0)
#define HR_PARAM (0)
#define MIN_PARAM (1)
#define DAY_PARAM (2)
#define MON_PARAM (3)
#define YR_PARAM (4)
#define INIT_HR (0)
#define MAX_HR (23)
#define INIT_MIN (0)
#define MAX_MIN (59)
#define INIT_DAY (1)
#define MAX_DAY (31)
#define INIT_MON (1)
#define MAX_MON (12)
#define INIT_YR (0)
#define MAX_YR (99)

B. Source file – Design_Apps_10.2.ino


//include Lcd_RTC library code
#include <LiquidCrystal.h>
//include Wire library code (needed for I2C protocol devices)
#include <Wire.h>
#include "rtc_lcd.h"

//Construct LCD object


LiquidCrystal Lcd_RTC(RS, EN, D4, D5, D6, D7);

void setup()
{
//Setup PB switches as input with enable pull-up resistance
pinMode(EDIT_PB_SW, INPUT_PULLUP);
pinMode(SET_PB_SW, INPUT_PULLUP);
//Setup the LCD columns and rows
Lcd_RTC.begin(COLS, ROWS);
//start i2c bus protocol for RTC pins
Wire.begin();
display_intro();
}
char Time[] = "TIME: : : ";
char Calendar[] = "DATE: / /20 ";
byte next_param, second, minute, hour, date, month, year;

void display_intro()
{

Lcd_RTC.println(" ADJUSTABLE ");


Lcd_RTC.setCursor(COL, ROW2);
Lcd_RTC.print(" TIME & CALENDAR");
INTRO_DEL;
Lcd_RTC.clear();
Lcd_RTC.println("USING DS1307 RTC");
Lcd_RTC.setCursor(COL, ROW2);
Lcd_RTC.print("IN 16:2 LCD MOD.");
INTRO_DEL;
Lcd_RTC.clear();
}

//displays time and calendar, before displaying time and


//calendar data are converted from BCD to decimal format.
void DS1307_Display()
{
//Convert BCD to decimal
second = (second >> 4) * 10 + (second & 0x0F);
minute = (minute >> 4) * 10 + (minute & 0x0F);
hour = (hour >> 4) * 10 + (hour & 0x0F);
date = (date >> 4) * 10 + (date & 0x0F);
month = (month >> 4) * 10 + (month & 0x0F);
year = (year >> 4) * 10 + (year & 0x0F);
//Extract time and store to designated array location
Time[12] = second % 10 + 48; //LCD 12,0
Time[11] = second / 10 + 48; //LCD 11,0
Time[9] = minute % 10 + 48; //LCD 9,0
Time[8] = minute / 10 + 48; //LCD 8,0
Time[6] = hour % 10 + 48; //LCD 6,0
Time[5] = hour / 10 + 48; //LCD 5,0
//Extract date and store to designated array location
Calendar[14] = year % 10 + 48; //LCD 14,1
Calendar[13] = year / 10 + 48; //LCD 13,1
Calendar[9] = month % 10 + 48; //LCD 9,1
Calendar[8] = month / 10 + 48; //LCD 8,1
Calendar[6] = date % 10 + 48; //LCD 6,1
Calendar[5] = date / 10 + 48; //LCD 5,1

Lcd_RTC.setCursor(COL, ROW1);
Lcd_RTC.print(Time); //Display time
Lcd_RTC.setCursor(COL, ROW2);
Lcd_RTC.print(Calendar); //Display calendar
}

//function when called and without pressing any button


//the total time is 10 x 25ms = 250ms.
void blink_parameter()
{
byte loop_cntr = MIN_LOOP;
while(loop_cntr < MAX_LOOP && digitalRead(EDIT_PB_SW) &&
digitalRead(SET_PB_SW))
{
loop_cntr++;
LOOP_DEL;
}
}

byte edit(byte col_pos, byte row_pos, byte parameter)


{
char disp_text[3];

//Wait until EDIT_PB_SW (pin 8) released


while(!digitalRead(EDIT_PB_SW));

while(true)
{
while(!digitalRead(SET_PB_SW))
{ //If SET_PB_SW (pin 9) is pressed
parameter++;
//If hours > 23 ==> hours = 0
if(next_param == HR_PARAM && parameter > MAX_HR)
parameter = INIT_HR;
//If minutes > 59 ==> minutes = 0
if(next_param == MIN_PARAM && parameter > MAX_MIN)
parameter = INIT_MIN;
//If date > 31 ==> date = 1
if(next_param == DAY_PARAM && parameter > MAX_DAY)
parameter = INIT_DAY;
//If month > 12 ==> month = 1
if(next_param == MON_PARAM && parameter > MAX_MON)
parameter = INIT_MON;
//If year > 99 ==> year = 0
if(next_param == YR_PARAM && parameter > MAX_YR)
parameter = INIT_YR;

sprintf(disp_text,"%02u", parameter);
Lcd_RTC.setCursor(col_pos, row_pos);
Lcd_RTC.print(disp_text);
DISP_TEXT_DEL; //Wait 200ms
}

Lcd_RTC.setCursor(col_pos, row_pos);
Lcd_RTC.print(" "); //Display two spaces
blink_parameter();
sprintf(disp_text,"%02u", parameter);
Lcd_RTC.setCursor(col_pos, row_pos);
Lcd_RTC.print(disp_text);
blink_parameter();

if(!digitalRead(EDIT_PB_SW))
{ //If EDIT_PB_SW (pin 8) is pressed
next_param++; //Increament 'next_param' for the next parameter
return parameter; //Return parameter value and exit
}
}
}
void loop()
{
if(!digitalRead(EDIT_PB_SW))
{
//If EDIT_PB_SW (pin 8) is pressed then
next_param = INIT_PARAM; //set next_param to hour
hour = edit(5, 0, hour); //store hour at 5,0 of LCD
minute = edit(8, 0, minute); //store minutes at 8,0 of LCD
date = edit(5, 1, date); //store day at 5,1 of LCD
month = edit(8, 1, month); //store month at 8,1 of LCD
year = edit(13, 1, year); //store year at 13,1 of LCD

//Convert decimal to BCD


minute = ((minute / 10) << 4) + (minute % 10);
hour = ((hour / 10) << 4) + (hour % 10);
date = ((date / 10) << 4) + (date % 10);
month = ((month / 10) << 4) + (month % 10);
year = ((year / 10) << 4) + (year % 10);
//End conversion

//Write data to DS1307 RTC and


//Start I2C protocol with DS1307 add
Wire.beginTransmission(0x68);
//Send register address
Wire.write(0x00);
//Reset seconds and start oscillator
Wire.write(0x00);
Wire.write(minute); //Write minute
Wire.write(hour); //Write hour
Wire.write(0x01); //Write day (not used)
Wire.write(date); //Write date
Wire.write(month); //Write month
Wire.write(year); //Write year
Wire.endTransmission(); //Stop transmission & release the I2C bus
I2C_TX_DEL; //Wait 200ms
}

Wire.beginTransmission(0x68);//Start I2C protocol with DS1307 add.


Wire.write(0x00); //Send register address
Wire.endTransmission(false); //I2C restart
//Request 7 bytes from DS1307 & release I2C bus at end of reading
Wire.requestFrom(0x68, 7);
second = Wire.read(); //Read seconds from register 0
minute = Wire.read(); //Read minuts from register 1
hour = Wire.read(); //Read hour from register 2
Wire.read(); //Read day from register 3 (not used)
date = Wire.read(); //Read date from register 4
month = Wire.read(); //Read month from register 5
year = Wire.read(); //Read year from register 6
DS1307_Display(); //Display time & calendar
DS1307_DISP_DEL; //Wait 50ms
}
Part 3 – Dealing with Keypad Module

1. Prepare the all materials that will be used in Figure 11.1.


2. Construct the schematic diagram shown in Figure 11.1 in e-Gizmo
Universal MCU Kit.
3. In Arduino Sketch program, click New and encode or copy the program
listing 11.1 source file.
4. Click Sketch > Include Library > Add Zip Library and locate the Keypad
contributed library.
5. Repeat step 4 but now add the Password contributed library.
6. Open the Notepad application, then re-type or copy the header file of
program listing 11.1. Click Save as Type and select All Files.
7. Save with a filename as passkey_door.h, and click Close.
8. Add the header file in your current code by clicking Sketch > Add File.. >
then locate passkey_door.h and click Open.
9. Save your source code having a filename Design Apps 11.1.
10. Compile your program. If error exist, fix and re-compile until no error
detected.
11. From the Tools menu, configure the Board (ex. Arduino Uno) and Port (ex.
COM4). Note: If error occur during upload, please check the MCU module
you used, the serial port assignment, or install the USB plug-and-play driver
provided by the manufacturer. Then try to re-upload your code.
12. Observe the functionality of your code by validating the displayed output of
the circuit.

Program Listing 11.1 – Keypad Door Lock

This program will demonstrate how to use Keypad and Password Arduino
libraries in keypad-controlled door security. This security lock consists of a 4 x 3
telephone keypad module, LED module, and Arduino as microcontroller.
A. Header File – passkey_door.h
//macro for LED indicator pins
#define LED_READY (11)
#define LED_LOCK (12)
#define LED_UNLOCK (13)
//macro for keypad size
#define MAX_ROW (4)
#define MAX_COL (3)
//macro for keypad row pins
#define ROW0 (5)
#define ROW1 (6)
#define ROW2 (7)
#define ROW3 (8)
//macro for keypad column pins
#define COL0 (2)
#define COL1 (3)
#define COL2 (4)
//macro constant
#define MIN_CNT (0)
#define MAX_CNT (3)
//macro delay routines
#define KEY_DEL delay(10)
#define DOOR_DEL delay(1000)

B. Source file – Design_Apps_11.1.ino


#include <Password.h>
#include <Keypad.h>
#include "passkey_door.h"

//Construct Password object


Password doorPass = Password("159357");

const byte ROWS = MAX_ROW; //Keypad row size


const byte COLS = MAX_COL; //Keypad column size

//Define the Keypad key orientation


char keys[ROWS][COLS] =
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};

//Connect doorKey ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {ROW0, ROW1, ROW2, ROW3};
//Connect doorKey COL0, COL1 and COL2 to these Arduino pins
byte colPins[COLS] = {COL0, COL1, COL2};

//Construct a Keypad object


Keypad doorKey = Keypad(makeKeymap(keys), rowPins, colPins, ROWS,
COLS);
void setup()
{
pinMode(LED_READY, OUTPUT);
pinMode(LED_LOCK, OUTPUT);
pinMode(LED_UNLOCK, OUTPUT);
//add an event listener for this doorKey
doorKey.addEventListener(doorKeyEvent);
}

void loop()
{
keypadReady();
doorKey.getKey();
}

void keypadReady()
{
digitalWrite(LED_LOCK, HIGH);
digitalWrite(LED_UNLOCK, LOW);

for(unsigned short int count = MIN_CNT; count < MAX_CNT; count++)


{
digitalWrite(LED_READY, HIGH);
KEY_DEL;
digitalWrite(LED_READY, LOW);
KEY_DEL;
}
}

//take care of some special events


void doorKeyEvent(KeypadEvent eKey)
{
switch (doorKey.getState())
{
case PRESSED:

switch (eKey)
{
case '*': checkPassword(); break;
case '#': doorPass.reset(); break;
default: doorPass.append(eKey);
}
}
}

void checkPassword()
{
if (doorPass.evaluate())
{
digitalWrite(LED_READY, LOW);
digitalWrite(LED_LOCK, LOW);
digitalWrite(LED_UNLOCK, HIGH);
DOOR_DEL;
doorPass.reset();
}
else
{
digitalWrite(LED_READY, LOW);
digitalWrite(LED_LOCK, HIGH);
digitalWrite(LED_UNLOCK, LOW);
}
}
PIN CONFIGURATION

Pin configuration of Arduino UNO

Pin configuration of DS1307

Pin configuration of 16:2 LCD Module

Pin configuration of 4:3 Keypad Module


VCC

1k
RV1
1
VSS
2
SCHEMATIC DIAGRAM

LCD1

AREF VDD
3
VEE
13
PB5/SCK
12 4
16:2 LCD Module

PB4/MISO RS
RESET 11 5
~PB3/MOSI/OC2A RW
10 6
~ PB2/SS/OC1B E
9
~ PB1/OC1A
8 7
PB0/ICP1/CLKO D0
8
D1

1121
7 9
PD7/AIN1 D2
6 10
A0 ~ PD6/AIN0 D3
PC0/ADC0 5 11
A1 ~ PD5/T1 D4

ATMEGA328P-PU
PC1/ADC1 4 12
A2 PD4/T0/XCK D5
PC2/ADC2 3 13
A3 ~ PD3/INT1 D6

ANALOG IN
PC3/ADC3 2 14
A4 PD2/INT0 D7
PC4/ADC4/SDA 1

DIGITAL (~PWM)
A5 TX PD1/TXD
PC5/ADC5/SCL 0
RX PD0/RXD
ARD1

TEMPERATURE SENSOR
ARDUINO UNO R3

3
VCC

89.0

VOUT

Figure 10.1. Schematic diagram of Program Listing 10.1


2
U1

LM34
SET_PB

VCC

10k
R3
EDIT_PB

VCC

10k
R4

1
VSS
2
LCD1

AREF VDD
3
VEE
13
PB5/SCK
12 4
16:2 LCD Module

PB4/MISO RS
RESET 11 5
~PB3/MOSI/OC2A RW
10 6
~ PB2/SS/OC1B E
9
~ PB1/OC1A
8 7
PB0/ICP1/CLKO D0
8
1121 D1
7 9
PD7/AIN1 D2
6 10
A0 ~ PD6/AIN0 D3
PC0/ADC0 5 11
A1 ~ PD5/T1 D4
ATMEGA328P-PU

PC1/ADC1 4 12
A2 PD4/T0/XCK D5
PC2/ADC2 3 13
A3 ~ PD3/INT1 D6

ANALOG IN
PC3/ADC3 2 14
A4 PD2/INT0 D7
PC4/ADC4/SDA 1
DIGITAL (~PWM)

A5 TX PD1/TXD
PC5/ADC5/SCL 0
RX PD0/RXD
VCC

ARD1
ARDUINO UNO R3
10k
R1
VCC

3
7
5
6

3.0V
BAT1
10k

U1
R2

SCL
SDA

SOUT

DS1307
VBAT X2
X1

2
1

Figure 10.2. Schematic diagram of Program Listing 10.2

2 1
X1
CRYSTAL
B
A

D
C
1

7
4
1
2

0
8
5
2
3

#
9
6
3

4X3 KEYPAD MODULE


AREF
13
PB5/SCK
12
PB4/MISO
RESET 11
~PB3/MOSI/OC2A
10
D1

~ PB2/SS/OC1B
9
~ PB1/OC1A
8
UNLOCK

PB0/ICP1/CLKO
microcontrolandos.blogspot.com
1121

7
PD7/AIN1
6
A0 ~ PD6/AIN0
PC0/ADC0 5
A1 ~ PD5/T1
ATMEGA328P-PU

PC1/ADC1 4
D2

A2 PD4/T0/XCK
PC2/ADC2 3
LOCK

A3 ~ PD3/INT1
ANALOG IN

PC3/ADC3 2
A4 PD2/INT0
PC4/ADC4/SDA 1
DIGITAL (~PWM)

A5 TX PD1/TXD
PC5/ADC5/SCL 0
RX PD0/RXD
D3

Figure 11.1. Schematic diagram of Program Listing 11.1


ENTER KEY

DUINO1
ARDUINO UNO R3
DATA RESULTS

Note: Screen shots or captured outputs per program (at least outputs per
program)
DATA ANALYSIS / OBSERVATION

NOTE: Discussion must be based on the data gathered from data results or
observation supported by review of literature with proper reference or author in-
text citation in APA format. Do not copy-paste instead paraphrase it. Data analysis
must be minimum of 2 pages.
QUESTIONS AND ANSWERS

1. Discuss the principles how LCD, GLCD, and OLED display can be
controlled by Arduino microcontroller. Provide snip of code for each.
2. Discuss how I2C protocol works in real-time clock (RTC).
3. Given the system process flow below, design a schematic diagram, create
and simulate a sketch program for a keypad vault security lock in LCD
display.

Process flow of a keypad vault security lock via LCD module


CONCLUSION

NOTE: Discussion must be based on the lab objectives supported by review of


literature with proper reference or author in-text citation in APA format. Do not
copy-paste instead paraphrase it. Discuss the implication of findings per objective
(per paragraph). Conclusion must be minimum of 2 pages.
REFERENCES

NOTE: Sample APA format for reference cited only!

Books:

Andreasen, N. C. (2001). Brave new brain: Conquering mental illness in


the era of the genome. Oxford, England: Oxford University Press.

Copstead, L., & Banasik, J. (2005). Pathophysiology (3rd ed.).


Philadelphia, PA: Saunders.

Electronic Books:

Atkin, M. (Reporter). (2008, November 13). Bermagui forest disputed turf.


The Hack Half Hour. Retrieved from
http://www.abc.net.au/triplej/hack/notes/

Cooper, D. (2009, March 31). Native ant may stop toad in its tracks. ABC
Science. Retrieved August 15, 2017 from
http://www.abc.net.au/science/articles/
2009/03/31/2530686.htm?site=science&topic=latest

Print Journals:

Potente, S., Anderson, C., & Karim, M. (2011). Environmental sun


protection and supportive policies and practices: An audit of outdoor
recreational settings in NSW coastal towns. Health Promotion Journal of
Australia, 22, 97-101.

Electronic Journals:

Jackson, D., Firtko, A., & Edenborough, M. (2007). Personal resilience as


a strategy for surviving and thriving in the face of workplace adversity: A
literature review. Journal of Advanced Nursing, 60(1), 1-9.
doi:10.1111/j.1365-2648.2007.04412.x

You might also like