Arduino Workshop (Basic Level)


Exercise 1

int buttonPin = 9;   //pin assignment for button 
int ledPin = 8; //pin assignment for led 
void setup(){ 
Serial.begin(9600);         // initialize serial communication at 9600 
pinMode(ledPinOUTPUT);      // Use pin 8 for digital output
pinMode(buttonPinINPUT_PULLUP); // Use pin 9 for digital input 
} 
void loop(){
boolean state;       // state either 1 or 0 
state  =  digitalRead(buttonPin);  // read state of pin 9
digitalWrite(ledPin state);  // set state of pin 8 (LED)
Serial.println(state);       // print out the state 
delay(100);  // wait for a 100 millisecond 
}

Exercise 2a

// Convert the analog reading  which goes from (0 - 1023) to a voltage (0 - 5V)

void setup() 
{Serial.begin(9600);  //initialize serial communication at 9600 bits per second:
}
void loop() 
{
  
int  sensorValue = analogRead(A0);    // read the input on analog pin 0:
  
float voltage = sensorValue * (5.0 / 1023.0);   
  Serial.print(“analog=“);   
  Serial.print(sensorValue);     // print out the analog value you read:

  Serial.print(“ voltage=“);   
  Serial.println(voltage);     // print out the corresponding voltage
}

Exercise 2b

int ledPin = 9;
int potPin = A0;
void setup()
{
pinMode(ledPinOUTPUT);    // Use pin for analog output
pinMode(potPinINPUT);    // Use pin 0 for analog input
Serial.begin(9600);         // initialize serial communication at 9600
}
void loop()
{
int value  =  analogRead(potPin );  // read analog of pin A0
digitalWrite(ledPinHIGH);            // turn on led
delay(value);  // turn on time delay
digitalWrite(ledPinLOW); // turn off led
delay(value);  // turn off time delay
Serial.println(value);       // print out the delay time in milliseconds

}

Exercise 2c

int ledPin = 9;
int potPin = A0;
void setup()
{
pinMode(ledPinOUTPUT);    // Use pin for analog output
pinMode(potPinINPUT);    // Use pin 0 for analog input
Serial.begin(9600);         // initialize serial communication at 9600
// Use pin 9 as PWM analog output, PWM pins require no pin assign
}
void loop()
{
int value  =  analogRead(potPin);   // read analog of pin A0
int duty = value/4;             // convert the value to percentage
analogWrite(ledPin, duty);        // output PWM signal at pin 9
Serial.print(value);                // print out the value
Serial.print(“\t”);                // create spacebar
Serial.println(duty);       // print out the duty
delay(100);  // wait for a 100 millisecond
}

Exercise 2d

int photocellPin = 0// the cell and 10K pulldown are connected to A0
int photocellReading//the analog reading from the analog resistor divider
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
photocellReading = analogRead(photocellPin);
Serial.print("Analog reading = ");
Serial.print(photocellReading); // the raw analog reading
if (photocellReading < 10) {
Serial.println(" - Dark");
else if (photocellReading < 200) {
Serial.println(" - Dim");
else if (photocellReading < 500) {
Serial.println(" - Light");
else if (photocellReading < 800) {
Serial.println(" - Bright");
else {
Serial.println(" - Very bright");
}
delay(1000);

}

Exercise 2e

int photocellPin = 0; // the cell and 10K pulldown are connected to A0
int photocellReading; //the analog reading from the analog resistor divider
float voltage; //the value
int LEDpin = 11;
int LEDbrightness;
void setup(void)
{
Serial.begin(9600);
}
void loop(void)
{
photocellReading = analogRead(photocellPin);
Serial.print("Analog reading = ");
Serial.println(photocellReading); // the raw analog reading
voltage= (photocellReading*5)/1023;
Serial.print("voltage = ");
Serial.println(voltage); // the raw analog reading
//photocellReading = 1023 - photocellReading;
LEDbrightness = map(voltage, 4, 1, 0, 255);
analogWrite(LEDpin, LEDbrightness);
delay(100);
}


Exercise 3a

void setup()
{
Serial.begin(9600);  // initialize serial communication at 9600 bits per second
Serial.println(“Text Display");   // print out the value you read:
delay(100); 
}
void loop()
{
 Serial.print(“My Name is:");   // print out the value you read:
 delay(1000);        // delay in between reads for stability
 Serial.print(“\t");   // tab the print
 Serial.println(“Put Your Name Here");   // print out the value you read:
 delay(1000);        // delay in between reads for stability

}


Exercise 3b

char incomingByte=0; 
void setup()
{
 Serial.begin(9600);      // opens serial port, sets data rate to 9600 bps
 Serial.println("Convert ASCII Char to others");
 delay(100);
}
void loop()  {
  if (Serial.available() > 0)
  {
   incomingByte = Serial.read();   // read the latest byte:
   Serial.print("ASCII Char:");
   Serial.println(incomingByte);   //print out the byte in Ascii Character
   Serial.print("HEX=");
   Serial.println(incomingByte,HEX);    //print out the byte in HEX
   Serial.print("Decimal=");
   Serial.println(incomingByte,DEC);  //print out the byte in decimal
   Serial.print("Binary=");
   Serial.println(incomingByte,BIN);  //print out the byte in binary
   Serial.print("\n");        //New line 
  }  
  delay(200);

}

Exercise 3c

int c;
int duty = 0;
int ledPin = 9;
void setup()
{
Serial.begin(9600);
Serial.setTimeout(10); // Serial.begin data read faster
}
void loop()
{
  if (Serial.available())
   {
   Serial.parseInt();
   }
 Serial.print(c);
 duty = map(c, 0, 9, 0, 255);   //mapping number 0 - 9 to 0-255
 analogWrite(ledPinduty);       // output PWM signal at pin 9
 Serial.print("\t");                // create spacebar
 Serial.println(duty);       // print out the duty
 delay(100);                    // wait for 100 millisecond
}


Tugasan 1

int GREEN = 2;
int YELLOW = 3;
int RED = 4;
int DELAY_GREEN = 5000;
int DELAY_YELLOW = 2000;
int DELAY_RED = 5000;
void setup() {
pinMode(GREEN, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(RED, OUTPUT); }

void loop()
{
green_light();
delay(DELAY_GREEN);
yellow_light();
delay(DELAY_YELLOW);
red_light();
delay(DELAY_RED); }
void green_light() {
digitalWrite(GREEN, HIGH);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, LOW); }
void yellow_light() {
digitalWrite(GREEN, LOW);
digitalWrite(YELLOW, HIGH);
digitalWrite(RED, LOW); }
void red_light() {
digitalWrite(GREEN, LOW);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, HIGH);
}


Online Tutorial 1

Online Tutorial 2




Bengkel Arduino (Medium Level)

Exercise 1a(Hello World)

#include <LiquidCrystal.h>              // includes the LiquidCrystal Library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  //(rs, enable, d4, d5, d6, d7)
void setup()
{
  lcd.begin(16, 2);
  lcd.setCursor(2,0);           // Sets the location column 2, row 0
  lcd.print("hello world!");
  delay(1000);
}
void loop()
{   
 lcd.setCursor(7, 1);   // set the cursor to column 7, line 1
 lcd.print(millis()/1000);  // print the number of seconds since reset
 delay(100);
}


Exercise 1b(Cursor Test)

#include <LiquidCrystal.h>        // includes the LiquidCrystal Library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // (rs, enable, d4, d5, d6, d7)
void setup()
{
lcd.begin(16,2);         // Initializes the LCD screen,
lcd.clear();             // Clears the display
delay(1000);
}
void loop()
 {
 lcd.print("Arduino");     // Prints "Arduino" on the LCD
 delay(3000);             // 3 seconds delay 
 lcd.setCursor(2,1);     // Sets the location to the LCD
 lcd.print("LCD Tutorial");
 delay(3000);
 lcd.clear();   // Clears the display
 lcd.blink();   //Displays the blinking LCD cursor
 delay(4000);
 lcd.setCursor(7,1);
 delay(3000);
 lcd.noBlink();   // Turns off the blinking LCD cursor
 lcd.cursor();   // Displays an underscore (line)
 delay(4000);
 lcd.noCursor();   // Hides the LCD cursor
 lcd.clear();   // Clears the LCD screen
}


Exercise 1c(Cursor Test)


#include <LiquidCrystal.h>        // includes the LiquidCrystal Library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // (rs, enable, d4, d5, d6, d7)
int i=0;
void setup()
{
  lcd.begin(16, 2);   // set up the LCD's number of columns and rows:
  Serial.begin(9600);   // initialize the serial communications:
}
void loop()
{
 if (Serial.available())   // when characters arrive over the serial port...
 {
  delay(100);
  lcd.clear();
  while (Serial.available() > 0)    // read all the available characters
    {
     lcd.write(Serial.read());   // display each character to the LCD
    }
    i+=1; //number of how many time text is entered
  }
 {
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);   // set the cursor to column 0, line 1
  lcd.print("i=");
  lcd.print(i);   // print the number of seconds since reset:
 }
}


Exercise 2a(Pixel Test)


#define sclk 13  // Don't change
#define mosi 11  // Don't change
#define cs_lcd   10
#define dc       9   //dc juga dikenali sbg AO
#define rst      8
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
Adafruit_ST7735 tft = Adafruit_ST7735(cs_lcd, dc, rst);
void setup()
{
 tft.setRotation(0);  // set to 1(90 degree),2(180 degree),3(270 degree)
 tft.initR(INITR_BLACKTAB); //default INITR_REDTAB,INITR_GREENTAB
 tft.fillScreen(ST7735_WHITE); 
 tft.setTextWrap(true);  //jika true, text akan align kebawah jika melebihi pixel
}
void loop()
{
 for ( int y = 0; y < 160; y++ )  //panjang Y adalah 160 pixels
 {
   for ( int x = 0; x < 128; x++ )   //panjang X adalah 128 pixels
    {  
   tft.drawPixel(x,y,ST7735_BLUE);
   delay(10);  
    }  
  }

}


Exercise 2b(Counter Test)


#define sclk 13  // Don't change
#define mosi 11  // Don't change
#define cs_lcd   10
#define dc       9
#define rst      8
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
Adafruit_ST7735 tft = Adafruit_ST7735(cs_lcd, dc, rst);
File myFile;
void setup()
{
 tft.initR(INITR_BLACKTAB);
 tft.fillScreen(ST7735_BLACK);
 tft.setTextWrap(true); //tft.setTextWrap(false);
 tft.setTextSize(2); //text size 
 tft.setCursor(4,0); //text position setCursor(x,y);
 tft.setTextColor(ST7735_WHITE); //text colour 
 tft.print(“Counter Test");  // print(text);
 delay(2000);
}
void loop()
{
 tft.setTextSize(5);
 tft.setTextColor(ST7735_RED, ST7735_BLACK);
 for ( int i = 0; i < 100; i++ )
 {
   tft.setCursor(40, 50);
   tft.print( i );
   delay( 1000 );
 }
}



Exercise 2c(Graphic Test)


#define sclk 13  // Don't change
#define mosi 11  // Don't change
#define cs_lcd   10
#define dc       9   //dc juga dikenali sbg AO
#define rst      8

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>

Adafruit_ST7735 tft = Adafruit_ST7735(cs_lcd, dc, rst);
float p = 3.1415926;

void setup(void) 
{
  Serial.begin(9600);
  Serial.print("Hello! ST7735 TFT Test");

  // Use this initializer if you're using a 1.8" TFT
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab

  // Use this initializer (uncomment) if you're using a 1.44" TFT
  //tft.initR(INITR_144GREENTAB);   // initialize a ST7735S chip, black tab

  Serial.println("Initialized");

  uint16_t time = millis();
  tft.fillScreen(ST7735_BLACK);
  time = millis() - time;

  Serial.println(time, DEC);
  delay(500);

  // large block of text
  tft.fillScreen(ST7735_BLACK);
  testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE);
  delay(1000);

  // tft print function!
  tftPrintTest();
  delay(4000);

  // a single pixel
  tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
  delay(500);

  // line draw test
  testlines(ST7735_YELLOW);
  delay(500);

  // optimized lines
  testfastlines(ST7735_RED, ST7735_BLUE);
  delay(500);

  testdrawrects(ST7735_GREEN);
  delay(500);

  testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
  delay(500);

  tft.fillScreen(ST7735_BLACK);
  testfillcircles(10, ST7735_BLUE);
  testdrawcircles(10, ST7735_WHITE);
  delay(500);

  testroundrects();
  delay(500);

  testtriangles();
  delay(500);

  mediabuttons();
  delay(500);

  Serial.println("done");
  delay(1000);
}

void loop() {
  tft.invertDisplay(true);
  delay(500);
  tft.invertDisplay(false);
  delay(500);
}

void testlines(uint16_t color) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, 0, tft.width()-1, y, color);
  }

  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, 0, 0, y, color);
  }

  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
  }

  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
  }
}

void testdrawtext(char *text, uint16_t color) {
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);
}

void testfastlines(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t y=0; y < tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x < tft.width(); x+=5) {
    tft.drawFastVLine(x, 0, tft.height(), color2);
  }
}

void testdrawrects(uint16_t color) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
  }
}

void testfillrects(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=tft.width()-1; x > 6; x-=6) {
    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
  }
}

void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}

void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}

void testtriangles() {
  tft.fillScreen(ST7735_BLACK);
  int color = 0xF800;
  int t;
  int w = tft.width()/2;
  int x = tft.height()-1;
  int y = 0;
  int z = tft.width();
  for(t = 0 ; t <= 15; t+=1) {
    tft.drawTriangle(w, y, y, x, z, x, color);
    x-=4;
    y+=4;
    z-=4;
    color+=100;
  }
}

void testroundrects() {
  tft.fillScreen(ST7735_BLACK);
  int color = 100;
  int i;
  int t;
  for(t = 0 ; t <= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = tft.width()-2;
    int h = tft.height()-2;
    for(i = 0 ; i <= 16; i+=1) {
      tft.drawRoundRect(x, y, w, h, 5, color);
      x+=2;
      y+=3;
      w-=4;
      h-=6;
      color+=1100;
    }
    color+=100;
  }
}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST7735_RED);
  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(ST7735_YELLOW);
  tft.setTextSize(2);
  tft.println("Hello World!");
  tft.setTextColor(ST7735_GREEN);
  tft.setTextSize(3);
  tft.println("Hello World!");
  tft.setTextColor(ST7735_BLUE);
  tft.setTextSize(4);
  tft.print(1234.567);
  delay(1500);
  tft.setCursor(0, 0);
  tft.fillScreen(ST7735_BLACK);
  tft.setTextColor(ST7735_WHITE);
  tft.setTextSize(0);
  tft.println("Hello World!");
  tft.setTextSize(1);
  tft.setTextColor(ST7735_GREEN);
  tft.print(p, 6);
  tft.println(" Want pi?");
  tft.println(" ");
  tft.print(8675309, HEX); // print 8,675,309 out in HEX!
  tft.println(" Print HEX!");
  tft.println(" ");
  tft.setTextColor(ST7735_WHITE);
  tft.println("Sketch has been");
  tft.println("running for: ");
  tft.setTextColor(ST7735_MAGENTA);
  tft.print(millis() / 1000);
  tft.setTextColor(ST7735_WHITE);
  tft.print(" seconds.");
}

void mediabuttons() {
  // play
  tft.fillScreen(ST7735_BLACK);
  tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
  delay(500);
  // pause
  tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
  tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
  delay(500);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
  delay(50);
  // pause color
  tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
}


Exercise 3(Voltage Sensor)



int analogInput = A0;
float vout = 0.0;
float vin = 0.0;
float R1 = 10000.0; // 30000 if using voltage module
float R2 = 2200.0; // 7500 if using voltage module
int value = 0;
void setup()
{
 pinMode(analogInput, INPUT);
 Serial.begin(9600);
 Serial.print("DC VOLTMETER");
}
void loop()
{ 
value = analogRead(analogInput);
vout = (value * 5.0) / 1024.0; 
vin = vout / (R2/(R1+R2)); 
Serial.print(“value= ");
Serial.print(value);
Serial.print(“ INPUT V= ");
Serial.println(vin,2);
delay(500);
}



Exercise 4(Current Sensor)
const int analogIn = A1;

int mVperAmp = 185;      // use 100 for 20A Module and 66 for 30A Module
int RawValue= 0;
int ACSoffset = 2500;   // at 0A, offset value=2500
double Voltage = 0;
double Amps = 0;
void setup() {
 Serial.begin(9600); }
void loop()
{
RawValue = analogRead(analogIn);
Voltage = (RawValue – 308 / 1024.0) * 5000;      // Gets you mV
Amps = ((Voltage - ACSoffset) / mVperAmp);
Serial.print("Raw Value = " );      // shows pre-scaled value
Serial.print(RawValue);
Serial.print("\t mV = ");    // shows the voltage measured
Serial.print(Voltage,3);    // display 3 digits after decimal point
Serial.print("\t Amps = ");    // shows the voltage measured Serial.println(Amps,3);
delay(1000);
}