Skip to content

5. Embedded programming

This week, we started by downloading two applications: Code with MU and the Arduino IDE. We then began working with microcontrollers to connect and control various devices.

To start, we had a LED already connected to the microcontroller. We first worked on programming the LED, experimenting with the frequency and duration of its blinking. This allowed us to understand how to control the on and off cycles of the LED.

Next, we learned how to use Morse code with the LED.

We used the IDE (which supports C++) to write and send code to the microcontroller, controlling the LED’s blinking pattern to represent Morse code signals. We also explored different microcontroller connectivity options. Some of the controllers we worked with could connect via WiFi, while others used Bluetooth.

For the Code with MU application, we first installed the CircuitPython board device on our laptops and changed the mode. Using the MU editor, we wrote code to send an SOS Morse code message, controlling the number of times the LED blinked and the timing between the blinks.

SOS using MU

# Write your code here :-)
import board
import digitalio
import time

led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT

while True:
    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(.5)

    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(.5)

    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(.5)

    led.value = False
    time.sleep(3)

    led.value = True
    time.sleep(2)
    led.value = False
    time.sleep(.5)

    led.value = True
    time.sleep(2)
    led.value = False
    time.sleep(.5)

    led.value = True
    time.sleep(2)
    led.value = False
    time.sleep(.5)

    led.value = False
    time.sleep(3)

    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(.5)

    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(.5)

    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(.5)

    led.value = False
    time.sleep(3)

After experimenting with the Code with MU application, we moved on to the Arduino IDE. To use it, we had to first download the Arduino software from their website, install it, and then edit the code to create the same SOS Morse code message on the LED.

SOS using Arduino

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {

  digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(2000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500);                      // wait for a second

  digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(2000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500); 

  digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(2000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500);                      // wait for a second

  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(3000);                      // wait for a second

    digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500);                      // wait for a second

  digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500); 

  digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500);                      // wait for a second

  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(3000);  

    digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(2000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500);                      // wait for a second

  digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(2000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500); 

  digitalWrite(LED_BUILTIN, HIGH ); // turn the LED on (HIGH is the voltage level)
  delay(2000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(500);                      // wait for a second

  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(3000);  
}

Through these activities, we gained hands-on experience in programming microcontrollers, controlling connected devices, and utilizing different development environments and connectivity options.


Last update: June 15, 2024