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)); }