#pragma config(Sensor, S1, LEGOTMP, sensorI2CCustom)
#include "drivers/lego-temp.h"
void accuracyToString(tLEGOTMPAccuracy _accuracy, string &text) {
strcpy(text, "");
switch (_accuracy) {
case A_MIN:
text = "A_MIN";
break;
case A_MEAN1:
text = "A_MEAN1";
break;
case A_MEAN2:
text = "A_MEAN2";
break;
case A_MAX:
text = "A_MAX";
break;
}
}
task main() {
float temp;
tLEGOTMPAccuracy accuracy;
string strAcc;
nxtDisplayCenteredTextLine(0, "LEGO");
nxtDisplayCenteredBigTextLine(1, "Temp");
nxtDisplayCenteredTextLine(3, "Test 1");
nxtDisplayCenteredTextLine(5, "Connect sensor");
nxtDisplayCenteredTextLine(6, "to S1");
wait1Msec(2000);
eraseDisplay();
LEGOTMPsetSingleShot(LEGOTMP);
accuracy = A_MIN;
if (!LEGOTMPsetAccuracy(LEGOTMP, accuracy)) {
nxtDisplayTextLine(0, "Error setAccuracy");
wait1Msec(5000);
StopAllTasks();
}
if (!LEGOTMPreadAccuracy(LEGOTMP, accuracy)) {
nxtDisplayTextLine(0, "Error readAccuracy");
wait1Msec(5000);
StopAllTasks();
}
accuracyToString(accuracy, strAcc);
nxtDisplayTextLine(0, "Accuracy: %s", strAcc);
while (true) {
switch(nNxtButtonPressed) {
case kLeftButton:
switch(accuracy) {
case A_MIN: accuracy = A_MAX; break;
case A_MEAN1: accuracy = A_MIN; break;
case A_MEAN2: accuracy = A_MEAN1; break;
case A_MAX: accuracy = A_MEAN2; break;
}
if (!LEGOTMPsetAccuracy(LEGOTMP, accuracy)) {
nxtDisplayTextLine(0, "Error setAccuracy");
wait1Msec(5000);
StopAllTasks();
}
accuracyToString(accuracy, strAcc);
nxtDisplayTextLine(0, "Accuracy: %s", strAcc);
while (nNxtButtonPressed != kNoButton) EndTimeSlice();
break;
case kRightButton:
switch(accuracy) {
case A_MIN: accuracy = A_MEAN1; break;
case A_MEAN1: accuracy = A_MEAN2; break;
case A_MEAN2: accuracy = A_MAX; break;
case A_MAX: accuracy = A_MIN; break;
}
if (!LEGOTMPsetAccuracy(LEGOTMP, accuracy)) {
nxtDisplayTextLine(0, "Error setAccuracy");
wait1Msec(5000);
StopAllTasks();
}
accuracyToString(accuracy, strAcc);
nxtDisplayTextLine(0, "Accuracy: %s", strAcc);
while (nNxtButtonPressed != kNoButton) EndTimeSlice();
break;
}
if (!LEGOTMPreadTemp(LEGOTMP, temp)) {
eraseDisplay();
nxtDisplayTextLine(0, "Temp reading pb");
wait10Msec(100);
StopAllTasks();
}
nxtDisplayCenteredBigTextLine(2, "Temp:");
switch(accuracy) {
case A_MIN: nxtDisplayCenteredBigTextLine(4, "%4.1f", temp); break;
case A_MEAN1: nxtDisplayCenteredBigTextLine(4, "%5.2f", temp); break;
case A_MEAN2: nxtDisplayCenteredBigTextLine(4, "%6.3f", temp); break;
case A_MAX: nxtDisplayCenteredBigTextLine(4, "%7.4f", temp); break;
}
}
}