Ah, that explains it!
I did not realise it was treated as a 2D array so ignored all the warnings - thank you.
NXC NXT 2.0 test_release20111215 file error
Re: NXC NXT 2.0 test_release20111215 file error
Last edited by h-g-t on 24 Dec 2011, 19:40, edited 1 time in total.
A sophistical rhetorician, inebriated with the exuberance of his own verbosity, and gifted with an egotistical imagination that can at all times command an interminable and inconsistent series of arguments to malign an opponent and to glorify himself.
Re: NXC NXT 2.0 test_release20111215 file error
My project requires 5 options to be selected each time it runs. This was a bit of a nuisance, especially when most of the time the same options were used.
So I rewrote the first part to display all the options at once; if these do not have to be changed then I only have to press the middle key.
To change an option, I turn the motor attached to port B to select the option(s) and the right key to change it. Middle key continues on to the rest of the program. Options are stored on an array as +1 or -1.
I put it here just in case anyone else finds it useful. If someone more competent than me can convert this into a re-usable subroutine then please let me know how.
So I rewrote the first part to display all the options at once; if these do not have to be changed then I only have to press the middle key.
To change an option, I turn the motor attached to port B to select the option(s) and the right key to change it. Middle key continues on to the rest of the program. Options are stored on an array as +1 or -1.
I put it here just in case anyone else finds it useful. If someone more competent than me can convert this into a re-usable subroutine then please let me know how.
Code: Select all
// Start global variable & constant definitions ------------------------------
string program = "Program #"; // Store the program name & version
long rotation_end_B; // Final reading of rotation counter Port B
long rotation_B; // For use in parameter selection
int MM_Index = 1; // Current line/ element
int MM_Bool[] = {-1,-1,-1,-1,-1,-1}; // Record of options
string MM_D1 = " "; // Blank for 9v relay
string MM_D2 = " "; // Blank for autofocus on
string MM_D3 = " "; // Blank for mirror lock on
string MM_D4 = " "; // Blank for exposure bracketing on
string MM_D5 = " "; // Blank for limited pano size on
string Pt = "<<"; // Selection marker
// End of global variable and constant declarations ===========================
task main ()
{
// Set basic parameters --------------------------------------------------
ClearScreen ();
PlayTone (3000,500);
Wait (500);
TextOut (1,LCD_LINE2,program);
TextOut (1,LCD_LINE3,"RIGHT KEY CHANGE");
TextOut (1,LCD_LINE4,"CENTRE KEY END");
TextOut (1,LCD_LINE5,"MOTOR B = UP/ DOWN");
TextOut (1,LCD_LINE7,"BATTERY ");
NumOut (64,LCD_LINE7,BatteryLevel());
Wait (1000);
while (ButtonPressed(BTNCENTER,true) == false) {} // End when centre button pressed
PlayTone (1000,500);
Wait (1000);
ResetRotationCount(OUT_B); // Reset counter on Port B
Wait (100); // Give sensor time to update
while (ButtonPressed(BTNCENTER,true) == false) // End when centre button pressed
{
ClearScreen ();
TextOut (1,LCD_LINE1,"< 9v RELAY"); TextOut (72,LCD_LINE1,MM_D1);
TextOut (1,LCD_LINE2,"AUTOFOCUS"); TextOut (72,LCD_LINE2,MM_D2);
TextOut (1,LCD_LINE3,"MIRROR LOCK"); TextOut (72,LCD_LINE3,MM_D3);
TextOut (1,LCD_LINE4,"BRACKETING"); TextOut (72,LCD_LINE4,MM_D4);
TextOut (1,LCD_LINE5,"LIMITED PANO"); TextOut (72,LCD_LINE5,MM_D5);
switch(MM_Index) // Set pointer location
{
case 1: TextOut (84,LCD_LINE1,Pt); break;
case 2: TextOut (84,LCD_LINE2,Pt); break;
case 3: TextOut (84,LCD_LINE3,Pt); break;
case 4: TextOut (84,LCD_LINE4,Pt); break;
case 5: TextOut (84,LCD_LINE5,Pt); break;
default: break;
}
if (ButtonPressed(BTNRIGHT,true) == true) // Right button pressed?
{
PlayTone (1000,500);
Wait (500);
MM_Bool[MM_Index] = MM_Bool[MM_Index] * -1 ; // Change sign
if (MM_Bool[1] < 0) {MM_D1 = " ";} else {MM_D1 = "+";}
if (MM_Bool[2] < 0) {MM_D2 = " ";} else {MM_D2 = "+";}
if (MM_Bool[3] < 0) {MM_D3 = " ";} else {MM_D3 = "+";}
if (MM_Bool[4] < 0) {MM_D4 = " ";} else {MM_D4 = "+";}
if (MM_Bool[5] < 0) {MM_D5 = " ";} else {MM_D5 = "+";}
}
rotation_B = MotorRotationCount(OUT_B); // Current reading Port B
Wait (100); // Give sensor time to update
ResetRotationCount(OUT_B); // Reset counter on Port B
Wait (100); // Give sensor time to update
if (abs(rotation_B) > 10) // Ignore small movements
{
if (rotation_B < 1) {MM_Index = MM_Index - 1;} // Decrement index
else {MM_Index = MM_Index + 1;} // Increment index
if (MM_Index < 1) {MM_Index = 5;} // Wrap to bottom
if (MM_Index > 5) {MM_Index = 1;} // Wrap to top
}
} // End of While loop
} // main task ended =======================================================
A sophistical rhetorician, inebriated with the exuberance of his own verbosity, and gifted with an egotistical imagination that can at all times command an interminable and inconsistent series of arguments to malign an opponent and to glorify himself.
Who is online
Users browsing this forum: No registered users and 7 guests