To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.robotics.rcx.legosOpen lugnet.robotics.rcx.legos in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / RCX / legOS / 2028
2027  |  2029
Subject: 
Re: tweaking around dlcd_show( )
Newsgroups: 
lugnet.robotics.rcx.legos
Date: 
Mon, 3 Sep 2001 21:21:22 GMT
Viewed: 
3984 times
  
Alexandre Bec <laleks@free.fr> writes:

> Hi all legOS users,
> 
> need help  about dlcd_*   utilities
> 
> I'd like to display on the lcd a sequence of digits:
> something like :
> 
>    dlcd_show (LCD_4_BOTL);
>    lcd_refresh();
>    msleep(250);
>    lcd_clear();
>    dlcd_show (LCD_4_TOPL);
>    lcd_refresh();
>    msleep(250);
>    lcd_clear();
>    dlcd_show (LCD_4_TOP);
>  ...
> 
> But of course this is not a good idea to hardcode a long sequence.
> So I tried to make a pattern of segments stored in an array, and access to
> the good one with an index value in a for {   } loop.
> 
> int progressPattern[PATTERN_ITEMS_NB]={
>  {LCD_4_BOTL} ,
>  {LCD_4_TOPL} ,
>  {LCD_4_TOP }
> };
> 
> and later
> for (...){
> ...
>  lcd_clear();
>  dlcd_show(progressPattern[ i ] );
>  lcd_refresh();
>  msleep(250);
> ...
> }
> 
> and I obtain the following compilation errors concerning dlcd_show( );
> 
>   macro `BIT_OF' used with just one arg
>   macro `BYTE_OF' used with just one arg
> 
> I tried lots of braces combination , a declaration of a bidimensional array
> too, but in vain.
> 
> Since I'm not an expert in C and macros, I certainly made something wrong
> when filling this array with defines, and maybe it is not the right way to
> proceed.

The macros LCD_?_* expand to two integers, separated by a comma; dlc_show()
is a macro that expects one argument but uses it as an argument to macros
expecting two arguments.  I don't know exactly how this works, but it's
to do with the order of macro expansions.

A workaround may be using your own definition of dlcd_show, like this (not
fully tested, but should work :-) :


/* This one takes two arguments */
#define my_dlcd_show(a,b)    bit_set((a),(b))

/* A bidimensional array */
int progressPattern[][2]={
{LCD_4_BOTL} ,
{LCD_4_TOPL} ,
{LCD_4_TOP }
};

..

/* Show i-th pattern */
my_dlcd_show( progressPattern[i][0], progressPattern[i][1] );


bye
Bernardo
e-mail: dibbe@freestation.it



Message has 1 Reply:
  Re: tweaking around dlcd_show( )
 
Thank you Bernardo. As I explained during the discussion with Martin, I decided to use rather arrays of functions. So now I've got my own functions like void Lcd4BotL(){ dlcd_show(LCD_4_BOTL); } and the use of the array with an index is now fully (...) (25 years ago, 4-Sep-01, to lugnet.robotics.rcx.legos)

Message is in Reply To:
  tweaking around dlcd_show( )
 
Hi all legOS users, need help about dlcd_* utilities I'd like to display on the lcd a sequence of digits: something like : dlcd_show (LCD_4_BOTL); lcd_refresh(); msleep(250); lcd_clear(); dlcd_show (LCD_4_TOPL); lcd_refresh(); msleep(250); (...) (25 years ago, 25-Aug-01, to lugnet.robotics.rcx.legos)

10 Messages in This Thread:


Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact

This Message and its Replies on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR