Home / Reference / Arduino Programming Quick Guide

Arduino Programming Quick Guide

This is a handy Arduino programming guide for those who already have some experience with Arduino but sometimes forget about the basics.

Structure

void setup()

void loop()

 

Control Structures

if (x<5){ } else { }

switch (myvar) {

case 1:

break;

case 2:

break;

default:

}

for (int i=0; i <= 255; i++){ }

while (x<5){ }

do { } while (x<5);

continue; //Go to next in do/for/while loop

return x; // Or ‘return;’ for voids.

goto // not encouraged

 

Further Syntax

// (single line comment)

/* (multi-line comment) */

#define DOZEN 12 //Not baker’s!

#include <avr/pgmspace.h>

 

General Operators

= (assignment operator)

+ (addition)

– (subtraction)

* (multiplication)

/ (division)

% (modulo)

== (equal to) != (not equal to)

< (less than) > (greater than)

<= (less than or equal to)

= (greater than or equal to)

&& (and) II (or) ! (not)

 

Pointer Access

& reference operator

* dereference operator

Bitwise Operators

& (bitwise and) I (bitwise or)

^ (bitwise xor) ~ (bitwise not)

« (bitshift left) » (bitshift right)

 

Compound Operators

++ (increment) — (decrement)

+= (compound addition)

-= (compound subtraction)

*= (compound multiplication)

/= (compound division)

&= (compound bitwise and)

|= (compound bitwise or)

 

Constants

HIGH I LOW

INPUT I OUTPUT

true I false

143 // Decimal number

0173 // Octal number

0b11011111 //Binary

Ox7B // Hex number

7U // Force unsigned

10L // Force long

15UL // Force long unsigned

10.0 // Forces floating point

2.4e5 // 240000

 

Data Types

void

boolean (0, 1, false, true)

char (e.g. ‘a’ -128 to 127)

unsigned char (0 to 255)

byte (0 to 255)

int (-32,768 to 32,767)

unsigned int (0 to 65535)

word (0 to 655word (0 to 65535)

long (-2,147,483,648 to 2,147,483,647)

unsigned long (0 to 4,294,967,295)

float (-3.4028235E+38 to 3.4028235E+38)

double (currently same as float)

sizeof(myint) // returns 2 bytes

 

Strings

char S1[15];

char S2[8]={‘a’,’r’,’d’,’u’,’i’,’n’,’o’};

char S3[8]={‘a’,’r’,’d’,’u’,’i’,’n’,’o’, ‘\0’};

//Included \0 null termination

char S4[ ] = “arduino”;

char S5[8] = “arduino”;

char S6[15] = “arduino”;

 

Arrays

int mylnts[6];

int myPins[] = {2, 4, 8, 3, 6};

int mySensVals[6] = {2, 4, -8, 3, 2};

 

Conversion

char()        byte()

int()        word()

long()        float()

 

Qualifiers

static // persists between calls

volatile // use RAM (nice for ISR)

const // make read-only

PROGMEM // use flash

 

Digital I/O

pinMode(pin, [INPUT,OUTPUT])

digitalWrite(pin, value)

int digitalRead(pin)

//Write High to inputs to use pull-up res

 

Analog I/O

analogReference([DEFAULT, INTERNAL, EXTERNAL])

int analogRead(pin) //Call twice if switching pins from high Z source.

analogWrite(pin, value) // PWM

 

Advanced I/O

tone(pin, freqhz)

tone(pin, freqhz ,duration_ms)

noTone(pin)

shiftOut(dataPin, clockPin, [MSBFIRST,LSBFIRST], value)

unsigned long pulseln(pin,[HIGH,LOW])

 

Time

unsigned long millis() // 50 days overflow.

unsigned long micros() //70 min overflow

delay(ms)

delayMicroseconds(us)

 

Math

min(x, y) max(x, y) abs(x)

constrain(x, minval, maxval)

map(val, fromL, fromH, toL, toH)

pow(base, exponent) sqrt(x)

sin(rad) cos(rad) tan(rad)

 

Random Numbers

randomSeed(seed) // Long or int

long random(max)

long random(min, max)

 

Bits and Bytes

lowByte()

highByte()

bitRead(x,bitn)

bitWrite(x,bitn,bit)

bitSet(x,bitn)

bitClear(x,bitn)

bit(bitn) //bitn: 0-LSB 7-MSB

 

External Interrupts

attachlnterrupt(interrupt, function, [LOW,CHANGE,RISING,FALLING])

detachInterrupt(interrupt)

interrupts()

nolnterrupts()

 

Serial.

begin([300, 1200, 2400, 4800, 9600,14400, 19200, 28800, 38400, 57600,115200])

end()

int available()

int read()

flush()

print()

println()

write()

 

EEPROM (#include <EEPROM.h>)

byte read(intAddr)

write(intAddr,myByte)

 

Servo (#include <Servo.h>)

attach(pin , [min_uS, max_uS])

write(angle) // 0-180

writeMicroseconds(uS) 111000- 2000,1500 is midpoint

read() // 0-180

attached() //Returns boolean

detach()

 

SoftwareSerial(RxPin,TxPin)

// #include<SoftwareSerial.h>

begin(longSpeed) // up to 9600

char read() // blocks till data

print(myData) or println(myData)

 

Wire (#include <Wire.h>) // For I2C

begin() // Join as master

begin(addr) // Join as slave @ addr

requestFrom(address, count)

beginTransmission(addr) // Step 1

send(mybyte) // Step 2

send(char * mystring)

send(byte * data, size)

endTransmission() // Step 3

byte available() // Num of bytes

byte receive() //Return next byte

onReceive(handler)

onRequest(handler)

 

 

About Roland Pelayo

Roland Pelayo started TMM in 2015. He is a firmware engineer who has over ten years of experience in developing electronic and microcontroller-based systems. Roland's designs include medical devices, security and automation, robots, emergency alert systems, and educational training modules.   Have something that you like Roland to write about here? or do you need consultation for microcontroller firmware projects? just contact him via the contact page.

Check Also

Arduino Timer Interrupt

Arduino UNO Pinout Diagram

The Arduino UNO is arguably the most popular Arduino board currently available. This Arduino UNO …

One comment

  1. Dear Sir/Madam,

    I need to control Stepping motor through Arduino controller.

    I have bought stepping motor with 6 leads.

    Please guide.

    Best Regards,

    ANG

Leave a Reply

Your email address will not be published. Required fields are marked *