task main () {
  nNxtButtonTask  = -2;
  nxtDisplayCenteredTextLine(0, "Mindsensors");
  nxtDisplayCenteredBigTextLine(1, "Angle");
  nxtDisplayCenteredTextLine(3, "Test 1");
  nxtDisplayCenteredTextLine(5, "Connect sensor");
  nxtDisplayCenteredTextLine(6, "to S1");
  wait1Msec(2000);

  eraseDisplay();
  nxtDisplayCenteredTextLine(0, "GlideWheel-AS");
  nxtDisplayTextLine(1, "-------------------");
  nxtDisplayTextLine(5, "-------------------");
  while (true) {
    // Reset the angle to 0
    if (nNxtButtonPressed == kEnterButton)
    {
      MSANGresetAngle(MSANG);
      while (nNxtButtonPressed != kNoButton) EndTimeSlice();
    }

    // Read the current angle, accumulated angle and RPM and display them
    nxtDisplayTextLine(2, "Ang: %7d deg", MSANGreadAngle(MSANG));
    nxtDisplayTextLine(3, "Raw: %7d", MSANGreadRaw(MSANG));
    nxtDisplayTextLine(4, "RPM: %7d", MSANGreadRPM(MSANG));
    nxtDisplayTextLine(7, "   Reset angle");
    wait1Msec(50);
  }
}
// Allow the user to calibrate the scales
void calibrateScales()
{
    int calibrateWeight = 0;

    eraseDisplay();
    nxtDisplayCenteredTextLine(0, "GlideWheel-AS");
    nxtDisplayCenteredTextLine(2, "Place the object");
    nxtDisplayCenteredTextLine(3, "on the scales");
    nxtDisplayCenteredTextLine(4, "and press");
    nxtDisplayCenteredTextLine(5, "[enter]");
    nxtDisplayCenteredTextLine(6, "to calibrate");
    while (nNxtButtonPressed != kEnterButton) EndTimeSlice();
    debounce();
    eraseDisplay();
    calibrateWeight = weighObject();
    nxtDisplayCenteredTextLine(0, "GlideWheel-AS");
    nxtDisplayCenteredTextLine(2, "Enter the weight");
    nxtDisplayCenteredTextLine(3, "in grams");
    nxtDisplayCenteredTextLine(7, "-     OK     +");
    while (true)
    {
        nxtDisplayCenteredBigTextLine(5, "%d", calibrateWeight);
        switch(nNxtButtonPressed)
        {
        case kLeftButton:
            PlayTone(500,10);
            calibrateWeight--;
            calibrateWeight = max2(0, calibrateWeight);
            break;
        case kRightButton:
            PlayTone(1000,10);
            calibrateWeight++;
            break;
        case kEnterButton:
            PlayTone(1500,10);
            gramsPerUnit = (float)calibrateWeight / (float)MSANGreadRaw(MSANG);
            eraseDisplay();
            return;
        }
        wait1Msec(20);
        debounce();
    }
}
// Get the current weight of the object
short weighObject()
{
  return max2(0, round(MSANGreadRaw(MSANG) * gramsPerUnit));
}