Programming for NKC Electronics RGB LCD

This is what I would like to accomplish: myGLCD.print("Title: ",LEFT,5,0,0,0);
But I would like to insert a variable like this: myGLCD.print(name,LEFT,5,0,0,0);

Where name is a variable.

I am using henning's libraries.

Thank you,

Loren

Where name is a variable.

Is name declared as a char array or a String?

/Henning

I'm not 100% what name is and 'm still trying to get all of the code working.

I think I came up with something.

I declared printChar as a public class in the RGB_GLCD.h and then did this:

int stl, i;
  
  stl = strlen(name);
  for (i=0; i<stl; i++)
    myGLCD.printChar(*name++, 8 + (i*6), 5, 0, 0, 0);

This probably isn't the most efficient and I'm a noob, so any nudges in the right direction are welome.

Thanks,

Loren

If you can post your complete code, I am sure we can figure it out :slight_smile:

/Henning

Here it is (part of an ipod sketch):

#include "AdvancedRemote.h"
#include "Bounce.h"
#include "RGB_GLCD.h"

GLCD myGLCD;

// This sketch needs to be adapted (change serial port config in setup())
// to be used on a non-Mega, so check the board here so people notice.
/*#if !defined(__AVR_ATmega1280__)
#error "This example is for the Mega, because it uses Serial3 for the iPod and Serial for debug messages"
#endif*/

const byte BUTTON_PIN = 9;
const unsigned long DEBOUNCE_MS = 50;

Bounce button(BUTTON_PIN, DEBOUNCE_MS);
AdvancedRemote advancedRemote;

unsigned long chosenSongIndexIntoPlaylist;

//
// our handler (aka callback) implementations;
// these are what get sent data back from the iPod
// when we make requests of it.
//

void feedbackHandler(AdvancedRemote::Feedback feedback, byte cmd)
{
  Serial.print("got feedback of 0x");
  Serial.print(feedback, HEX);
  Serial.print(" for cmd 0x");
  Serial.println(cmd, HEX);

  if (feedback != AdvancedRemote::FEEDBACK_SUCCESS)
  {
    Serial.println("Giving up as feedback wasn't SUCCESS");
    return;
  }

  switch (cmd)
  {
    case AdvancedRemote::CMD_SWITCH_TO_ITEM:
    Serial.println("(Presumably) now at the playlist zero (the main one)");
    Serial.println("Asking for song count");
    advancedRemote.getSongCountInCurrentPlaylist();
    // wait for our song count handler to get called now
    break;

    case AdvancedRemote::CMD_JUMP_TO_SONG_IN_CURRENT_PLAYLIST:
    Serial.println("Jumped to our song");
    Serial.println("Asking for title");
    advancedRemote.getTitle(chosenSongIndexIntoPlaylist);
    // wait for title handler to get called now
    break;

    case AdvancedRemote::CMD_PLAYBACK_CONTROL:
    Serial.println("playback control complete");
    break;

    case AdvancedRemote::CMD_POLLING_MODE:
    Serial.println("polling mode change complete");
    // from experimentation it starts playing automatically
    break;

  default:
    Serial.println("got feedback we didn't expect");
    break;
  }
}

void titleHandler(const char *name)
{
  myGLCD.print("Title: ",LEFT,5,0,0,0);
  
  //to accomplish this:
 //lzREM myGLCD.print(name,9, 5,0,0,0);
 //we try:
  int stl, i;
  
  stl = strlen(name);
  for (i=0; i<stl; i++)
    myGLCD.printChar(*name++, 8 + (i*6), 5, 0, 0, 0);

  Serial.println("Asking for artist");
  advancedRemote.getArtist(chosenSongIndexIntoPlaylist);
  // wait for artist handler to get called
}

void artistHandler(const char *name)
{
  myGLCD.print("Artist: ",LEFT,15,0,0,0);
  Serial.println(name);

  Serial.println("Asking for album");
  advancedRemote.getAlbum(chosenSongIndexIntoPlaylist);
  // wait for album handler to get called
}

void albumHandler(const char *name)
{
  Serial.print("Album: ");
  Serial.println(name);

  Serial.println("Turning on polling (which also seems to make it start playing");
  advancedRemote.setPollingMode(AdvancedRemote::POLLING_START);
  Serial.println("The button will let you do play/pause now. Reset Arduino to go back to normal mode");
}

void currentPlaylistSongCountHandler(unsigned long count)
{
  Serial.print("Current playlist song count is ");
  Serial.println(count, DEC);

  // pick any old song for test porpoises
  chosenSongIndexIntoPlaylist = count / 2;

  Serial.print("Jumping to song at index ");
  Serial.println(chosenSongIndexIntoPlaylist, DEC);
  advancedRemote.jumpToSongInCurrentPlaylist(chosenSongIndexIntoPlaylist);
}

void pollingHandler(AdvancedRemote::PollingCommand command,
                    unsigned long playlistPositionOrelapsedTimeMs)
{
    Serial.print("Poll: ");

    switch (command)
    {
    case AdvancedRemote::POLLING_TRACK_CHANGE:
        Serial.print("track change to: ");
        Serial.println(playlistPositionOrelapsedTimeMs, DEC);
        break;

    case AdvancedRemote::POLLING_ELAPSED_TIME:
        Serial.print("elapsed time: ");
        printTime(playlistPositionOrelapsedTimeMs);
        break;

    default:
        Serial.print("unknown: ");
        Serial.println(playlistPositionOrelapsedTimeMs, DEC);
        break;
    }
}

void printTime(const unsigned long ms)
{
  const unsigned long totalSecs = ms / 1000;
  const unsigned int mins = totalSecs / 60;
  const unsigned int partialSecs = totalSecs % 60;

  Serial.print(mins, DEC);
  Serial.print("m ");
  Serial.print(partialSecs, DEC);
  Serial.println("s");
}

void setup()
{
  pinMode(BUTTON_PIN, INPUT);

  // enable pull-up resistor
  digitalWrite(BUTTON_PIN, HIGH);

  Serial.begin(9600);
myGLCD.initLCD();
myGLCD.fillScr(255,255,255);
myGLCD.print("Starting", CENTER,5,255,255,255);
  // enable debugging
  // #define IPOD_SERIAL_DEBUG
  // direct library's log msgs to the default serial port
  //advancedRemote.setLogPrint(Serial);
  // direct library's debug msgs to the default serial port
  //advancedRemote.setDebugPrint(Serial);

  // lzREM use Serial3 (Mega-only) to talk to the iPod
  advancedRemote.setSerial(Serial);

  // register callback functions for the things we're going to read
  advancedRemote.setFeedbackHandler(feedbackHandler);
  advancedRemote.setTitleHandler(titleHandler);
  advancedRemote.setArtistHandler(artistHandler);
  advancedRemote.setAlbumHandler(albumHandler);
  advancedRemote.setPollingHandler(pollingHandler);
  advancedRemote.setCurrentPlaylistSongCountHandler(currentPlaylistSongCountHandler);
  myGLCD.print("Functions Registered", CENTER,15,255,255,255);

  // let the library set itself up, now we've done our configuration of it
  advancedRemote.setup();
  //myGLCD.setColor();
//advancedRemote.enable();
  // start in simple remote mode
 advancedRemote.disable();
}

void loop()
{
  // service iPod serial. this is who will end up
  // calling our handler functions when responses
  // come back from the iPod
  advancedRemote.loop();
  


  // use the button as a toggle
  if (button.update() && (button.read() == LOW))
  {
    //Serial.print("button pressed");
    if (advancedRemote.isCurrentlyEnabled())
    {
      //advancedRemote.disable();
      advancedRemote.controlPlayback(AdvancedRemote::PLAYBACK_CONTROL_PLAY_PAUSE);
      
    }
    else
    {
      advancedRemote.enable();

      // start our commands - we'll do them in sequence
      // as our handlers get called. for example, this
      // one will call our Feedback handler when it's done
      advancedRemote.switchToItem(AdvancedRemote::ITEM_PLAYLIST, 0);
    }
  }
}

The OP contained a snippet from the "titleHandler" function

Work is crazy so I might not be able to respond as quickly as I'd like.

Thanks,

Loren

You have to remove const from your function header.

void titleHandler(const char *name)

This works for me:

#include <RGB_GLCD.h>

GLCD myGLCD;

void titleHandler(char *name)
{
  myGLCD.print("Title:", LEFT, 5);
  myGLCD.print(name, 40, 5);
}


void setup()
{
  myGLCD.initLCD();
  myGLCD.clrScr();
  myGLCD.setColor(255,255,255);
}

void loop()
{
  titleHandler("Testing");
  
  while (true) {};
}

/Henning

Thanks for your response

I get this after I made the changes that were suggested:

secondAdv:183: error: invalid conversion from 'void ()(char)' to 'void ()(const char)'
secondAdv:183: error: initializing argument 1 of 'void AdvancedRemote::setTitleHandler(void ()(const char))'

What does the error mean?

I am not sure, but I think that the setTitleHandler does not accept titleHander without the const in the declaration.

As I dont have the hardware or the other libraries you are using I am unable to help any further.

/Henning