Cambridge Hackathon


Mbed Cambridge Hackathon

You are viewing an older revision! See the latest version

First Mbed Application

Building an Mbed Application

This will guide you through creating an Mbed application. We first will cover Mbed OS to read/write to sensors and peripherals on the Mbed Connect Cloud board.

Prerequisites

Required Hardware

Setup

  1. Connect the board to your computer via the micro USB port.
  2. The board mounts as a mass-storage device (like a USB drive). Verify that you can see it (the drive name will be DAPLINK).
  3. Add the Mbed Connect Cloud board to your online Mbed Compiler here

Making an mbed application

Import the example program.

Import programMbed-Connect-Cloud-Demo

Demo for the Mbed Connect Cloud board

Printing on the LCD screen

We will add some code to print a message to the LCD screen of the shield.

Open main.cpp

Declare an object to instantiate the driver for the LCD screen. Under 'GLOBAL VARIABLES HERE' add the following code:

C12832  lcd(PE_14, PE_12, PD_12, PD_11, PE_9);

Add a function that prints a message to the LCD screen at a specified location (x, y). Under 'FUNCTION DEFINITIONS HERE' add the following code:

void lcd_print(const char* message, int x, int y) {
    lcd.locate(x, y);
    lcd.printf(message);
}

Invoke the previous function to print "Hello World!" to the LCD screen. Under 'MAIN CODE HERE' add the following code:

lcd_print("Hello World!");

Compile and run

  1. Select a target board in the upper right hand corner
  2. Press "Compile"
  3. Wait for a binary to be downloaded
  4. Drag the binary to the DAPLINK disk
  5. Press the board's reset button
  6. "Hello World!" should show on the LCD screen

Blinking the LED

We will add some code to start blinking the blue LED when we push the button (SW1) down. If we release the button, it will stop blinking.

Open main.cpp

Instansiate a DigitalOut object to write to the LED and a DigitalIn object to read the button input. Under 'GLOBAL VARIABLES HERE' add the following code:

DigitalOut led(D9, 1);
DigitalIn button(BUTTON, PullUp);

Add two functions. blink_led that will switch the state of the LED. And set_blink_led that will read the button. If the button is pressed, the LED will blink continuously until the button is pressed again. Under 'FUNCTION DEFINITIONS HERE' add the following code:

void blink_led() {
    led = !led;
}

void set_blink_led() {
    static int blink_id = NULL;
    // Read the button
    int blink = !button.read();
    // If the button is pressed and the light is not currently blinking
    if (blink == 1 && blink_id == NULL) {
        // Add blinking the LED to event queue
        blink_id = queue.call_every(500, blink_led);
    }
    else if (blink == 0) {
        // Cancel the blinking event
        queue.cancel(blink_id);
        blink_id = NULL;
        led = 1;
    }
}

Add set_blink_led to the queue, so we can read the state of the button every 100 ms. Under 'MAIN CODE HERE' add the following code:

    queue.call_every(100, set_blink_led);

NOTE: Make sure to add this line above the while loop from the previous step.

Compile and run

  1. Select a target board in the upper right hand corner
  2. Press "Compile"
  3. Wait for a binary to be downloaded
  4. Drag the binary to the DAPLINK disk
  5. Press the board's reset button
  6. The LED will blink if you push the button down.
    1. SW2 on K64F, SW0 on Odin

Reading the temperature/humidity sensor

We will add some code to read the temperature and humidity values of the temperature/humidity sensor and print them to the LCD screen.

Open main.cpp

Instantiate a Sht31 object to read from the temperature/humidity sensor. Under 'GLOBAL VARIABLES HERE' add the following code:

Sht31   temp_sensor(PF_0, PF_1);

Add a function that reads the temperature/humidity sensor and prints the value to the LCD screen. Under 'FUNCTION DEFINITIONS HERE' add the following code:

void read_temp() {
    float t = temp_sensor.readTemperature();
    float h = temp_sensor.readHumidity();
    lcd_print("[TEMP/HUM]", 0, 3);
    char val[13];
    sprintf(val, "TEMP:%3.2fC, HUM:%3.2f%%", t, h);
    lcd_print(val, 0, 15);
}

Add a while loop to continuously read the values from the temperature/humidity sensor. Under 'MAIN CODE HERE' add the following code:

while(1) {
    read_temp();
}

Compile and run

  1. Select a target board in the upper right hand corner
  2. Press "Compile"
  3. Wait for a binary to be downloaded
  4. Drag the binary to the DAPLINK disk
  5. Press the board's reset button
  6. The humidity and temperature values should now be displaying and updating on the LCD screen

Publishing changes

  1. Right click the project folder
  2. Select "Publish"
  3. Write a commit message in the "Revision Commit" menu
  4. Press OK
  5. Select "Fork..." in the "Publish Repository" menu
  6. Write a Description
  7. Press OK
  8. Make a note of the URL for your fork. We will use it to locally clone this repository.

All wikipages