Die 2-Motoren-Steuerung funktioniert super solange der Kompasssensor nicht abgefragt wird (NEPO).
Bei einem Programm mit Kompasssensor-Abfrage läuft der Motor am Port B viel zu langsam.
Dabei ist es unerheblich ob die Kompasssensor-Abfrage vor oder nach dem Motorstart stattfindet.
Hier laufen beide Motoren gleich schnell:
#define _GNU_SOURCE
#include "MicroBit.h"
#include <array>
#include <stdlib.h>
MicroBit uBit;
int initTime = uBit.systemTime();
int main()
{
uBit.init();
uBit.soundmotor.motorAOn(80);
uBit.soundmotor.motorBOn(80);
uBit.sleep(5000);
uBit.soundmotor.motorAOff();
uBit.soundmotor.motorBOff();
release_fiber();
}
Und nach Initialisierung des accelerometer läuft
der Motor an Port A schneller als an Port B:
#define _GNU_SOURCE
#include "MicroBit.h"
#include <array>
#include <stdlib.h>
MicroBit uBit;
int initTime = uBit.systemTime();
int main()
{
uBit.init();
uBit.accelerometer.updateSample();
uBit.soundmotor.motorAOn(80);
uBit.soundmotor.motorBOn(80);
uBit.sleep(5000);
uBit.soundmotor.motorAOff();
uBit.soundmotor.motorBOff();
uBit.display.scroll(ManagedString(uBit.compass.heading()));
release_fiber();
}
Allerdings nach Entfernen der 5-Sekunden-Warteschleife laufen die Motoren auch gleich schnell. Beeinflussen sich da irgendwelche interne Timer?
#define _GNU_SOURCE
#include "MicroBit.h"
#include <array>
#include <stdlib.h>
MicroBit uBit;
int initTime = uBit.systemTime();
int main()
{
uBit.init();
uBit.accelerometer.updateSample();
uBit.soundmotor.motorAOn(80);
uBit.soundmotor.motorBOn(80);
uBit.display.scroll(ManagedString(uBit.compass.heading()));
release_fiber();
}