Exercise 08

Embedded Programming

The data sheet gives an detailed overview of the microcontroller. It provides information regarding the features and how to access them. Some features are not that obvious and reading about them might offer advantages for your project. For example some microcontroller have integrated pull up resistors for the reset pin (Atiny) meaning that one can save space on the board by dropping the additional resistor. I used the Energia IDE to programm the MSP430 board. The huge advantage of using such an IDE is that one code can be used for several different microcontrollers. The access to the registers is hidden and translated by the IDE respectively. The code for the Dalek board is shown below. Apart from some presets which can be extended or added. The code handles serial input und changes the LEDs, motors, and speaker accordingly. To get a better idea take a look at the final project page.

Code: Board(Energia IDE)

//String mode = "drivebeepdrive";
String mode = "remote";
boolean blink = false;

void setup()
{
  Serial.begin(9600);

  pinMode(12, OUTPUT); //motor1
  pinMode(13, OUTPUT); //motor2
  pinMode( 9, OUTPUT); //speaker
  pinMode( 8, OUTPUT); //LEDs
  pinMode( 2, OUTPUT); //test
}

void loop()
{
  if(mode == "drivebeepdrive"){
    digitalWrite(12, HIGH);
    digitalWrite(13, HIGH);
    delay(3000);
    for(int i = 0; i <=3; i++){
      digitalWrite(8, HIGH);
      delay(300);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      Serial.println("test");
      delay(300);
    }
    delay(3000);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    delay(5000);
  }
  
  
  if(mode == "driveledblink"){
    digitalWrite(9, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(13, HIGH);
    digitalWrite(8, HIGH);
    delay(500);
    digitalWrite(8, LOW);
    delay(300);
  }
  
  if(mode == "remote"){
    if (Serial.available()){
      swith(Serial.read()){
        case 'w':     digitalWrite(12, HIGH);
                      digitalWrite(13, HIGH); break;
        case 'a':     digitalWrite(12,  LOW);
                      digitalWrite(13, HIGH); break;
        case 'd':     digitalWrite(12, HIGH);
                      digitalWrite(13,  LOW); break;
        case 'b':     blink = !blink;
        default:      digitalWrite(12, LOW);
                      digitalWrite(13, LOW);        
      }
      if(blink){
        digitalWrite(8, HIGH);
        delay(500);
        digitalWrite(8, LOW);
        delay(500);
      }
    }
  }
}