Arduino Oefening 4 – Poort manipulatie

In deze oefening werken we met poort manipulatie om de aangesloten LED’s in of uit te schakelen.

Middels poort manipulatie geven we in één enkele byte aan het poort register door welke poorten binnen een bepaald segment van de Arduino Board ingeschakeld (1) of uitgeschakeld (0) moeten worden (PORTB) en of het om IN of OUTPUT gaat (DDRB). Meer weten? Lees er hier meer over.

Benodigdheden

  • Arduino Board
  • Breadboard & aansluitkabels
  • Rode LED met ingebouwde weerstand of een 220 ohm weerstand
  • Groene LED met ingebouwde weerstand of een 220 ohm weerstand
  • Gele LED met ingebouwde weerstand of een 220 ohm weerstand
  • Pushbutton
  • 10K ohm weerstand

De kit aangeschaft? Dan ben je in het bezit van een Arduino UNO Board en LED’s in diverse kleuren met ingebouwde weerstand. Ook de pushbutton en de 10k ohm weerstand zijn inbegrepen.

Aansluitschema

Oefening-4

Code

/*
 Geschreven door: Rogier van Onna (Elonisas IOT)
 Datum bijgewerkt: 8-3-2016
 Port Manipulation Voorbeeld
*/

const long interval = 10000;

int buttonPin = 2;
bool buttonWaarde;
bool disco;

void setup() {
  DDRB = B11111111;
  pinMode(buttonPin, INPUT);
}

void loop() {

  buttonWaarde = digitalRead(buttonPin);

  if(buttonWaarde==HIGH) {
    disco = !disco;
    delay(1000);
  }

  if(disco) {
    switch(millis() % interval) {
      case 0: { PORTB = B00011100; break; }
      case 1000: { PORTB = B00011100; break; }
      case 2000: case 5000: { PORTB = B00010000; break; }
      case 3000: case 6000: { PORTB = B00011000; break; }
      case 4000: case 7000: { PORTB = B00011100; break; }
      case 8000: { PORTB = B00000000; break; }
      case 9000: { PORTB = B00001110; break; }
      case 10000: { PORTB = B00000000; break; }
    }
  } else {
    PORTB = B00000000;
  }
 
}

Met segment B worden de poorten 8 tot 13 aangestuurd. We vermijden de delay-functie en gebruiken in plaats daarvan de millis-functie om te bepalen welke byte weggeschreven moet worden naar PORTB.