NXC NXT 2.0 test_release20111215 file error

Discussion specific to projects ideas and support.
h-g-t
Posts: 552
Joined: 07 Jan 2011, 08:59
Location: Albania

Re: NXC NXT 2.0 test_release20111215 file error

Post by h-g-t »

Ah, that explains it!

I did not realise it was treated as a 2D array so ignored all the warnings - thank you.
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.
h-g-t
Posts: 552
Joined: 07 Jan 2011, 08:59
Location: Albania

Re: NXC NXT 2.0 test_release20111215 file error

Post by h-g-t »

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.

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 =======================================================
MM_Index.zip
(1.29 KiB) Downloaded 318 times
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.
Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests