Site Map

This page gives you easy access to all the information on the site.

Main Section Hubs

Arduino Projects: Use Amazing ICs to Enhance your Projects. Find out how to use many different chips from humidity sensors to accelerometers, DACs and much more.

Arduino IOT: Learn how to connect your Arduino to the web and create web servers and control pins remotely from a web page interface.

Arduino Hardware: Everything you wanted to know about the Uno but were afraid to ask! Did you know there are FIVE unused features in the Arduino Uno?

Arduino Interfaces: Learn how to interface push buttons or rotary encoders. Also includes Charliplexing (Save pins when driving LEDs)...and more.

Arduino Displays: How to display Text or Graphics with an Arduino. Should you use a text or a graphics display? Find out the best Ones to Use.

Arduino Port Expanders: How to Increase the Number of Pins using a serial interface such as I2C or SPI. Some chips are far more capable than others - find out which in the link.

An Arduino Reference: Your Essential Guide to Arduino functions. They don't always work the way you think. Find out the pitfalls, and exactly how these functions should be used, so you can avoid endless debugging and create your projects fast.

Arduino IDE: The Simplest Guide to using the IDE. How to Easily program the Arduino Uno. How to get the Bootloader into the Arduino Chip and how to program chips that are not included in the IDE.

ATtiny85: A Power Packed Arduino in a Tiny 8 Pin Chip. The smallest Arduino Chip! FOUR features you missed! Find How Good It is and how you can Easily program it over USB with no USB Hardware!

Arduino Temperature Sensors: Arduino Temperature Sensors For Simplified Measurement. How to use Arduino Temperature Sensors for Easy Temperature Measurement from standard room temperature to 1000's of Degrees Centigrade.

Arduino Current Sensors: Your Guide to Arduino Current Sensors for the Arduino. How to measure current from 100nA, to 3.2A, to 8.2A using three different types of sensor, simply by choosing the correct chip.

Arduino Voltage Sensors: The Easiest ADCs to use with Arduinos. ADCs are one of the most useful modules allowing you to easily read analogue voltages inside a digital system.

Specific IC Tutorials using Arduino

PCF8574: This may be the simplest (internal architecturally speaking) port expander  - easy to program and works very well. There are no internal control registers yet it has full bi-directional capability (they call it quasi bi-directional - but still useful). How is this magic achieved?

Magnetometer Tilt Compensation - how to use a HMC5883L or QST5883L and an ADXL345 (accelerometer) to tilt compensate a digital compass.

HMC5883L - How to use this magnetometer as a compass (actually how to get any reading out of it at all!).

INA219    - A digital (I2C) Current meter; Measuring current and power used. This is for low volt systems <=26V but gives highly accurate current voltage and power measurements.

ACS712   - A Hall Effect medium current (±5A, ±20A,±30A) measuring device which It can also withstand 2100Vrms!

ACS758   - A Hall Effect High current (50A~200A) measuring chip with analogue output. It can also withstand 700Vrms!

MCP4725 - A digital (I2C) controlled DAC and a look at the related MCP4726.

MCP41010 - A digital Potentiometer (SPI) with 8bit resolution is actually a controlled resistance that you can place anywhere in your circuit.

MCP4728 - A 4 output digitally controlled DAC (I2C).

MCP4922 - A two output digitally controlled DAC (SPI). How fast does it go?

PCF8591 - A 4 input I2C ADC. This is an ADC with 8 bit resolution and has a differential input capability, and also includes a DAC.

TP4056 - How to use this Lithium ion/poly battery charger the right way.

DW01A - Lithium ion/poly battery protector. This is used in the TP4056 board.

ADXL345 - How to use the ADXL345 accelerometer to measure roll and pitch.

ADS1115 - How to use this 16 ADC to measure 7.8uV. This is a precision device that you can use to make accurate measurements. It can even measure a small range of negative voltage - useful for sink/source current measurements.

MCP3008 - Find out if this ADC is as good as it claims. Do you need a 10 bit; 8 channel ADC with a high sample rate? This could be the right one. Find out how to optimize it for the best sample rate here.

AD9833 - Make a signal generator using the DDS chip to 12.5MHz. Outputs sine, square and triangle waves with a resolution of 0.1Hz.

MAX7219 - How to drive 8x8 led displays using this chip.

DS18B20 - Use the one-wire thermometer to measure accurate temperature; multi drop and long distance.

NTC Thermistor - How to get a fairly accurate and repeatable temperature reading using a thermistor.

DHT22 - Also DHT11 (lower spec) - Measure humidity and temperature.

TCS230 - Let your microcontroller see colour!

HD44780 - LCD display driving. Usually a 16 character by 2 line display but can be 20x4.

MCP23017 - A 16 bit port expander (I2C) with comprehensive interrupt system.

MCP23017 Interrupts - Using multiple MCP23017 with interrupts.

BMP280 - Barometric pressure measurement.

Battery Charger - How to charge standard AA batteries.

Pulse Rate - Measurement See your pulse rate using infrared sensors.

Rotary Encoder - How to use them and make even noisy ones behave!

Arduino Joystick - Making the joystick easy to use with a useful library.

MAX6675 - How to measure temperature from 0ºC to 1024ºC

Logic level converter - How to convert logic levels using a MOSFET Trick!

SSD1306 - How to write text and graphics to this 1" display.

Fading RGB LED Arduino - How to fade an RGB LED while keeping the same colour during the fading.

ESP32 CAM - How to set it up, How to access the TF card, and how to Free up I/O!

Beginners Guides

Arduino IDE - A beginners guide to the Arduino IDE.

Arduino LED with button - A beginners tutorial on input/output using an LED and a button.

Arduino digitalRead - A very useful starting point for reading buttons and eliminating switch bounce (also see bounce in action and why it is a problem).

Arduino light sensor - How to read a light sensor using an anlogue input pin - Also how to convert the reading of from the resistive divider into a value of resistance for the LDR (Light Dependent Resistor).

Arduino potentiometer LED - How to dim an LED with potentiometer as input to the Arduino Uno.

Arduino IR remote - How to read and transmit IR codes from an IR remote control.

Arduino servo with potentiometer - Learn how to control a servo using a potentiometer. Also learn how to calibrate it.

Arduino Humidity Sensor - Learn how to read humidity from the DHT11 sensor. Did you know it also reports temperature?

Arduino Ultrasonic Sensor - Learn how to wire up and use an HC SR04 ultrasonic distance measuring device with an Arduino.

Arduino Hall Effect Sensor - Learn how to detect magnetic fields - there is a trick to using this sensor (49e) as it can detect both N & S fields - so produces output centered around the mid rail.

Arduino RFID reader - How to add RFID scanning to your projects.

Using a PIR sensor in your projects - A passive Infrared Sensor can detect motion of warm objects such as humans or animals - they are really sensitive and useful in burglar alarm systems or wildlife photography etc. Find to use one using an Arduino and detect motion easily.

An Infrared proximity sensor Using 3 components instead of KY-032 for a better Arduino proximity sensor that uses and IR remote receiver. The KY-032 is really bad!

RBG LED code running on Arduino - two ways to control one goes through standard colous. The other example lets you enter a hex code #rrggbb.

Programming raw Arduino ICs

How to install and use the Digispark Attiny85

ATtiny Programmer - How to program ATtiny series chips using an Arduino Uno (or other Uno) as an ISP programmer.

How to unbrick an ATtiny chip - Includes turning the ATtiny programmer into an High Volt Programmer (HVP) with 4 components and a power supply as well as a program to set fuse values from the serial command line.

Arduino Nano ISP - How to burn a bare-board Arduino using an Arduino Nano. You end up with about 4 components - just use a USB to serial adapter and a 5V power supply.

ATtiny Ultra Low Power - If you are looking to get maximum use out of a battery then you need to know how to lower the power usage of an ATtiny chip. Here you can see the effects of clock speed and supply voltage and how to use Burst mode effectively.

Arduino Hardware Tutorials

Find out Why is switch bounce bad. what causes switch bounce and how to cure it!

Three switch debouncing methods on Arduino : One is amazing and not to be missed!

Arduino Capacitive Sensor Sense objects using only a wire and an ADC input.

Arduino ADC - How it works; Find out its resolution and more.
    Should you should divide by 1023 or 1024 in ADC calculations?

Arduino voltage reference - The internal voltage reference is often overlooked. Find out how to use it and make it accurate and reliable.

Arduino Analog Output - How to smooth PWM signals and create sine waves.

Arduino EEPROM - How to read and write EEPROM.
    EEPROM has a lifetime - make sure you don't use it up all at once!

Arduino simulated toggle switch - How to create a toggle switch operation using a standard single push button switch.

Arduino physical toggle switch - How to wire one up in two different ways and use them on Arduino.

Arduino PWM pins - The eight things you need to know about Arduino PWM pins.

What is I2C - Find out why you need it and how to use it.

I2C tutorial - A detailed look at I2C operation.

Arduino Code Specific Tutorials

What language does Arduino Use - It's probably different to what you thought!

Arduino Hello World - What's really going on when you create the "hello World" text?

Arduino Print To Serial - What functions do you need and how does it work?

Arduino Serial Begin - Why do you need it? What does it do? Find out here!

Arduino Serial Available - What happens to serial input when the processor is overloaded?

Arduino Serial Read - it works but underneath there's  a lot going on.

Arduino Absolute Value - is abs() simple - it should be! - there are pitfalls!

Arduino delay() - How to delay the processor so a human can see events!

Arduino digitalRead() - A beginners guide to reading switch button inputs and avoiding switch bounce problems.

Arduino digitalWrite() - How to write a binary signal to the 0-5V output pin.

digitalWrite is a very useful generic function but you can operate 17 times faster using direct write macros - all explained in the link above.

Arduino for loop - How it works and how to avoid a simple mistake in using it.

Arduino if else - How to use If and else for maximum effectiveness in your programs.

Arduino int to string - How to convert an integer into a string using itoa. Plus a subtle problem when coding it youself - full code included that shows you how to code it from first principles.

Arduino string to int - How to convert a string into an integer using atoi. full code included that shows you how to code it from first principles. Also a fully coded version for converting hexadecimal and binary strings to an integer.

Arduino float to string - Find out how to do it Easily. Is there a simple function that does this for you? What is the one thing you must do to ensure your program is reliable?: Find out here.

Arduino string to float -  How to convert a string into a floating point value. Find out the standard function for this operation.

Arduino map() - Why it does not always do what you want.

Arduino millis() - Time events using milliseconds without stopping the processor.

Its a useful timer but there's a little bit of interesting code in its operation that makes it skip a beat sometimes? Should you worry about this?

Arduino pinMode() - It's use is simple but there's lots going on under the hood. Find out exactly how it works here.

Arduino pulseIn() and pulseInLong() - How to measure pulse inputs.

One of these MUST be used with interrupts turned ON.
One of these should be used with interrupts turned OFF.
Do you know which?

Arduino Servo Library - How to correct pulse outputs to between 1ms and 2ms.

Arduino Control Servo without library - How to do it without using extra hardware resource i.e. only using existing Arduino functions (The Arduino Servo library uses Timer 1).

Arduino Servo Smoothing - Easily smooth servo movement using a library.

Arduino struct - How to group related data in one variable.

Arduino switch case - How to use the C switch and case construct the right way.

Arduino strtok() - How to tokenize a string and avoid some pitfalls.

Arduino variable types - what you must know about them to use them effectively.

Arduino while loop - How to use it and how it is different to the for loop.

Arduino External Interrupts - External Interrupts: How to use them and how to get MORE, many more!!

Arduino Timer Interrupts - How to generate an exact repeating time interrupt using the internal timers of the Arduino. It is a bit more involved but a very useful thing to be able to do.

Arduino shiftOut - Find out how to control serial chips with this function.

Arduino shiftIn - Find out how to read serial data from chips.

Arduino String - How to decode serial port data into commands.
What is the difference in using a String object and using c strings?
Should you use String at all? Memory fragmentation can occur.
Find out about these issues in the link above.

Arduino IOT

What is the difference between the two most popular IOT microcontollers: ESP32 vs ESP8266?

Fauxmo; Easily Emulate WeMo devices with simple code for custom smart home devices. Talk to your projects to control them. You can control relays and dimmable lights very easily with minimal code.


Arduino web server: How to serve pages from an ESP32. Is this all you need or is there a problem?

ESP32 Web CAM: How to use an AI Thinker Web cam board to steam video to a web page.

What is a WebSocket: Simply put it is the most useful protoco that allows instantaneous communication between a web page and your Arduino.

Full ESP32 WebSocket Server tutorial: Learn exactly how to implement WebSockets on an ESP32 for fully bi-directional data flow.

ESP8266: Lolin nodeMCU ESP8266 ESP-12E

ESP8266 Arduino IDE - Learn how to program an ESP8266 using the Arduno IDE.

NodeMCU Firmware - Return the LUA scripting language back into an ESP8266.

ESPLorer - How to use ESPLorer to upload lua scripts to an ESP module.

NodeMCU Examples - from simple LED blink to wifi use.

ESP8266 Webserver - How to make a nodeMCU webeserver to control anything.


ESP-01 and ESP-01S: Confused about these variants? Which one is right for you? Find out the exact differences between the ESP-01 and ESP-01S here and choose the right one.

How to program an ESP01 (or ESP01S) using only an Arduino Uno and a few resistors.


Microcontroller Blog - Site news and updates

PIC Introduction - An introduction to PIC Microcontrollers.

PIC Programmer - A parallel port ICSP programmer.

PIC Programming - All about programmers, ICSP and ICPROG

PIC Compilers - Find out why you should use a PIC compiler.

Basic compiler - learn about a free PICBSIC compiler.

C Course - A new course showing you how to use C.

PIC Basic - Find out about the different types of PIC Basic.

PIC Projects - A selection of fully designed PIC project examples.

PIC Tutorials - More formal tutorial information on microcontrollers and protocols.

Tips and Techniques - Various design techniques and information.

Schematic tool -A useful tool for drawing, netlisting electronic schematic diagrams.

Books - Some useful books.

Free Ezine - A unique and useful ezine which also happens to be free!


PIC Projects

16F877 : 50MHz LCD frequencycounter.

16F877 : 50MHz 7 segment frequencycounter.

16F877 : 0-5V LCD volt meter.

16F877 : LCD and Keypad using one 8 bit port (noglue logic).

Direct jump to locked page (needs unlock code)

16F877 : Driving an RGB LED.

16F877 : Serial LCD module.

16F88 : Ultrasonic range finding project.

16F88 : A Real Time Clock (DS1307) using I2C.

16F88 : Driving an LED dot matrix.

16F88 : Universal Infrared Receiver (UIR).

16F88 : Binary Clock

12F675 : Tutorial 12F675 : RS232 Serial transmitter

PIC Parallel Port Programmer.

12F675 : Serial Temperature Logger

12F675 : EEPROM Temperature logger

12F675 : Servo motor driver

12F675 : Servo motor - serial control

Tips and Techniques

General Resources
ICSP PIC device comparison
ICSP programming
RS232 RS232 pinout
Debugging Techniques Using PIC I/O : TRIS, PORT
PIC Timer overview Crystal ppm calculations
I/O Expansion techniques Interactive Timer 0 calculator
PIC Programmers Interactive Timer 1 calculator

Interactive Timer 2 calculator

Hardware specific   
Switch debouncing Setting up RS232
12F675 : Setting OSCCAL in C 12F675 :Recovering lost calibration

Use the voltage reference module 
as a DAC
Software specific   
Hexadecimal conversions
Soft USART (TX) (TX details) Soft USART (RX/TX) (RX details)
Using fixed point maths  
Reading schematics Multitasking
Prototyping Electronic schematic symbols
Using an oscilloscope PWM

PIC Tutorial

12F675 16F84  
PIC Introduction ICSP Interrupts
MikroC compiler
I2C RS232 Setting up RS232
Frequency counting Ultrasonic range finding Software Tri PWM 
Multiplexing CCP (capture) Soft PWM
Timer 1 (polled)  

PIC Programmer information

All about programming PIC Microcontrollers.


PIC micro programming methods.

PIC timer calculations.

Frequency counter techniques: Direct and Reciprocal counting methods.

Simple multitasking method (works for 12F675 and larger).

Microcontroller Debugging methods (also general debugging methods).

Fixed point maths

Hardware interrupts - a short introduction.

How to use the MC78M05BDTRKG voltage regulator.

Courses and Ebooks on sale

C Course

A new C course showing you how to use C to program a microcontroller (no previous programming experience needed).

Pic C Course (digital download).


Have your say about what you just read! Leave me a comment in the box below.

Don’t see the comments box? Log in to your Facebook account, give Facebook consent, then return to this page and refresh it.

Privacy Policy | Contact | About Me

Site Map | Terms of Use