Enkele recente Arduino-boards zoals de Nano 33 BLE Sense en de Nano RP2040 Connect hebben een Arm Cortex-M Processor. Deze Processor biedt veel meer mogelijkheden dan die op de traditionele Arduino-boards zoals bijvoorbeeld de Uno.
Op de Uno volstond de bootloader om je programma op de processor te zetten zodat dit kon uitgevoerd worden. Voor de nieuwere boards gebruikt Arduino een apart besturingssysteem van Arm: MbedOS.
Doorgaans kan je je bestaande Arduino-sketches ook op dit OS uitvoeren, maar wanneer je volop gebruik wil maken van de mogelijkheden van de processor, dan zal je ook de typische functies van Mbed OS moeten gebruiken.
Hieronder vind je links naar enkele Boards die je hiermee kan gebruiken.
Van beide boards staat al wat info op deze site.
De Pico is een bord van Raspberry Pi, met dezelfde processor als de Nano RP2040 Connect. Je kan dit bord ook via de Arduino IDE programmeren. Van dit bord staat er voorlopig nog geen info op onze site.
Het grote verschil met de RP 2040 Connect is dat de Pico geen extra sensoren bevat en veel minder mogelijkheden tot communicatie heeft dan de RP2040. Dat maakt wel dat de Pico veel goedkoper is dan de RP2040.
Mbed OS installeren in de Arduino IDE doe je via het menu:
Hulpmiddelen > Board > Boardbeheer.
Je krijgt dan een venster zoals hiernaast te zien. In de zoekbalk geef je Mbed in en je ziet meteen de verschillende versies voor de verschillende boards. Hier kan je de versie kiezen die je wil installeren.
Voor de nummers van de pins zal je moeten kijken naar de nummers van de poorten van de Microcontroller. Dat betekent dat we bij de Arduino Nano 33 BLE voor pin A2 bijvoorbeeld nummer p2 zullen gebruiken.
Op de Arduino site kan je bij elk board een pinoverzicht zoals hiernaast vinden.
Hiernaast zie je een eenvoudig voorbeeld van een programma waar op de Nano 33 BLE met een drukknop een LED wordt aangestuurd. De led is verbonden met pin 23, de drukknop met pin 30.
Bovenaan wordt de mbed library geïnstalleerd met
#include "mbed.h"
Let op, hier niet afsluiten met een ;
mbed::DigitalOut led (p23);
pin 23 is een digitale Out pin en krijgt de naam 'led'
mbed::DigitalIn button (p30);
pin 30 is een digitale IN pin en krijgt de naam 'button'
led=button;
De waarde van 'led' is gelijk aan de waarde van 'button', zodat de led brandt als de button op 1 staat.
Eén van de sterktes van de nieuwere Arduino-boards is dat ze gebruikt kunnen worden om onafhankelijk bepaalde taken uit te voeren. Ze kunnen met erg weinig energie van bijvoorbeeld batterijen heel wat taken uitvoeren, maar dan moet het programma ook efficiënt opgebouwd worden. Met een 'interrupt' of onderbreking wordt het hoofdprogramma tijdelijk gepauseerd in afwachting van een bepaald signaal. Zolang gebruikt de CPU dus geen energie. In het volgende programma gebruiken we zo'n interrupt-functie of een 'interrupt service routine' (ISR).
Wanneer we een interrupt gebruiken voor een input (hier de drukknop) dan gebruiken we InterruptIn.
Hiernaast zie je hoe DigitalIn vervangen werd door InterruptIN.
In void rise_ISR en void fall_ISR wordt beschreven wat er moet gebeuren indien de ISR een merkt dat de waarde van button stijgt tot 1 (rise) of daalt naar 0 (fall).
We initialiseren de button functie in void setup.
Void loop zou hier zelfs leeg mogen blijven maar door gebruik te maken van delay gebruikt onze processor nog minder stroom.