diff --git a/tutorials/breadboard_keyboard_supplies.ods b/tutorials/breadboard_keyboard_supplies.ods
index d7b3dec..82fd9f0 100644
Binary files a/tutorials/breadboard_keyboard_supplies.ods and b/tutorials/breadboard_keyboard_supplies.ods differ
diff --git a/tutorials/keybrd_5_LEDs/LEDs_back.JPG b/tutorials/keybrd_5a_LED_on_uC/LEDs_back.JPG
similarity index 100%
rename from tutorials/keybrd_5_LEDs/LEDs_back.JPG
rename to tutorials/keybrd_5a_LED_on_uC/LEDs_back.JPG
diff --git a/tutorials/keybrd_5_LEDs/keybrd_5_LEDs.ino b/tutorials/keybrd_5a_LED_on_uC/keybrd_5a_LED_on_uC.ino
similarity index 100%
rename from tutorials/keybrd_5_LEDs/keybrd_5_LEDs.ino
rename to tutorials/keybrd_5a_LED_on_uC/keybrd_5a_LED_on_uC.ino
diff --git a/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino b/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino
index 5c240df..beb9739 100644
--- a/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino
+++ b/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino
@@ -49,7 +49,7 @@ PortMCP23S17 portWrite(port_B, 0);
Scanner_IOE scanner_R(LOW, portWrite, portRead);
// ================ RIGHT LEDs =================
-//LED_IOE LED_CapsLck(portRead, 1<<6); //tested LED on port A (read)
+LED_IOE LED_CapsLck(portRead, 1<<6); //tested LED on port A (read)
//LED_IOE LED_CapsLck(portWrite, 1<<6);//tested LED on port B (write)
// =================== CODES ===================
@@ -62,8 +62,7 @@ Code_Sc s_1(KEY_1);
Code_Sc s_2(KEY_2);
Code_Sc s_3(KEY_3);
-Code_Sc o_capsLock(KEY_4);
-//Code_LEDLock o_capsLock(KEY_CAPS_LOCK, LED_CapsLck);
+Code_LEDLock o_capsLock(KEY_CAPS_LOCK, LED_CapsLck);
// =================== ROWS ====================
// ---------------- LEFT ROWS ------------------
diff --git a/tutorials/tutorial_5_LEDs.md b/tutorials/tutorial_5a_LED_on_uC.md
similarity index 64%
rename from tutorials/tutorial_5_LEDs.md
rename to tutorials/tutorial_5a_LED_on_uC.md
index c23e562..2d0b392 100644
--- a/tutorials/tutorial_5_LEDs.md
+++ b/tutorials/tutorial_5a_LED_on_uC.md
@@ -1,5 +1,5 @@
-Tutorial 5 - indicator LEDs
-===========================
+Tutorial 5a - indicator LEDs
+============================
Keyboards often have LEDs to indicate CapsLock, NumLock, and other states.
It's one of the first things we look at when a keyboard produces unexpected results.
@@ -9,44 +9,49 @@ The breadboard keyboard modifies the basic breadboard keyboard described in [tut
Add components to the breadboard as shown in the picture.
-The three clear plastic cylinders are LEDs.
-LED anodes (the longer lead) are powered by 4.7k Ohm current limiting resistors connected to pins 16, 17, and 21.
-LED cathodes (the shorter lead) are grounded by a common terminal strip.
+The three clear plastic cylinders are red and yellow LEDs.
+Each LED is in series with a 4.7k Ohm current limiting resistor.
+LED anodes (the longer lead) are powered by pins 16, 17, and 21.
+LED cathodes (the shorter lead) are connected to a grounded terminal strip.
!["LEDs"](keybrd_5_LEDs/LEDs_back.JPG "LEDs")
-keybrd sketch for driving LEDs
-------------------------------
-[keybrd_5_LEDs.ino](keybrd_5_LEDs/keybrd_5_LEDs.ino) is a simple sketch with three LEDs.
-The sketch will run on the above breadboard keyboard.
+keybrd sketch with LEDs
+-----------------------
+The [keybrd_5a_LED_on_uC.ino](keybrd_5a_LED_on_uC/keybrd_5a_LED_on_uC.ino) sketch will run on the above breadboard keyboard.
As usual, the sketch annotations explain the code.
+LED forward voltage
+-------------------
+Forward voltage is the voltage used by the LED.
+Forward voltage is published in the LED's datasheet.
+
+Most blue and green LEDs have about 3.3 forward voltage, which does not reliably illuminate on Teensy LC's 3.3 volts.
+Most red and yellow LEDs have around 2.2 forward voltage.
+So use red and yellow LEDs on Teensy LC.
+Low-current LEDs can go as low as 1.6 forward voltage.
+
LED brightness
--------------
-An LED's current limiting resistor value effects the brightness of the LED.
-Lets see how much visual difference resistance makes.
-Replace an LED's 4.7k Ohm resistor with a 270 Ohm resistor.
+The amount of current (I) going through an LED is directly proportional to how bright it appears.
+By picking the correct resistor, you have full control over how bright the LED appears.
-It doesn't matter which end of the LED the resistor is on, the important thing is that the resistor and LED are in series.
+Lets see how much visual difference resistance makes.
+Replace an LED's 4.7k Ohm resistor with a 68 Ohm resistor.
Less resistance makes the LED brighter.
Too little resistance will burn out the LED.
-Connecting an LED directly to power will destroy the LED in a bright flash (do not look directly at the LED if you try this).
-
-2-mA LEDs are bright enough for keyboard indicator lights.
-Or you can use more resistance on a 20-mA LED to make it dimmer.
+The current supplied to an LED should always be limited by a resistor or some other device.
LED current limiting resistor values
------------------------------------
-Never connect an LED directly from ground to power. Doing so would destroy the LED.
-
This formula calculates the minimum resistance for maximum LED brightness:
```
output-pin Supply Voltage Vs
LED Forward Voltage Vf
Forward Current If
-minimum current limiting restiance R = (Vs - Vf) / If
+From Ohm's Law, minimum current limiting restiance R = (Vs - Vf) / If
```
For Forward Current, use the smaller of:
@@ -59,15 +64,24 @@ Teensy LC output-pin capacities are:
* Teensy LC on-board LED is on pin 13.
It has a current-limiting resistor on the board, and does not provide enough power for another LED.
+Voltages and current capacities are published in datasheets and sometimes pinout diagrams.
For Teensy LC 20 mA pin and the TT Electronics OVLLx8C7 LED:
```
output-pin Supply Voltage Vs = 3.3 volts
LED Forward Voltage Vf = 2.2 volts
+
+use the smaller of:
max pin Current If = 20 mA
-max LED Current If = 20 mA
+max LED Current If = 30 mA
minimum current limiting restiance R = (Vs - Vf) / If = 55 Ohms
```
+Add a safety margin for resistor tolerances (1%, 2%, 5%, 10%), and round up to a standard value.
+ http://www.rfcafe.com/references/electrical/resistor-values.htm
+
+```
+ 55 Ohms + (55 Ohms * 10%) = 60.5 Ohms < 68 Ohms
+```
It is safe to use more resistance.
Calculating the resistance for the Teensy LC 5 mA pin is left as an exercise.
@@ -88,7 +102,6 @@ From your LED's datasheet, find:
* Continuous Forward Current (mA)
Calculate the minimum resistance needed for your LED and Supply Voltage.
-There are several "LED current limiting resistor calculators" on line.
keybrd tutorial by Wolfram Volpi is licensed under a Creative Commons Attribution 4.0 International License.
Permissions beyond the scope of this license may be available at https://github.com/wolfv6/keybrd/issues/new.
diff --git a/tutorials/tutorial_5b_LED_on_IOE.md b/tutorials/tutorial_5b_LED_on_IOE.md
new file mode 100644
index 0000000..886d075
--- /dev/null
+++ b/tutorials/tutorial_5b_LED_on_IOE.md
@@ -0,0 +1,30 @@
+Tutorial 5b - indicator LED on IOE
+==================================
+This tutorial will show you how to add LEDs to an I/O expander.
+
+It is assumed the reader is familiar with LEDs from tutorial_5a_LED_on_uC.md
+and familiar with I/O expanders from tutorial_4c_split_keyboard_with_IOE.md.
+
+Adding LEDs to the basic breadboard keyboard
+--------------------------------------------
+The breadboard keyboard modifies the basic breadboard keyboard described in [tutorial_1_breadboard_keyboard.md](tutorial_1_breadboard_keyboard.md)
+
+Add components to the breadboard as shown in the picture.
+
+The two clear plastic cylinders are red and yellow LEDs.
+Each LED is in series with a 4.7k Ohm current limiting resistor.
+LED anodes (the longer lead) are powered by pins GPA6 and GPB6.
+LED cathodes (the shorter lead) are connected to a grounded terminal strip.
+
+!["LEDs"](keybrd_5_LEDs/LEDs_back.JPG "LEDs")
+
+keybrd sketch with LEDs on IOE
+------------------------------
+The [keybrd_5b_LED_on_IOE.ino](keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino) sketch will run on the above breadboard keyboard.
+
+The sketch features:
+* multiple layers
+* split keyboard
+* LED on controller
+* LED on IOE write port
+* LED on IOE read port