Skip to main content
Fixed syntax highlighting.
Source Link
VE7JRO
  • 2.5k
  • 19
  • 28
  • 31

I have a function that concatenates a print line, however I am having trouble getting some of the strings to format correctly. Using

Using Serial.print formats the output from keypad.getKey() correctly, however when I try to output the same format using printConcatLine() it does not give me the same output. I've tried casting it as both a char and an int...

void printConcatLine(const char* mask, ...) {
    va_list params;
    va_start(params, mask);
    
    while(*mask != '\0') {
      if (*mask == 'i') {
          Serial.print(va_arg(params, int));
      } else if(*mask == 'c') {
          Serial.print(va_arg(params, const char *));
      } else if (*mask == 'f' || *mask == 'd') {
          Serial.print(va_arg(params, double));
      } 
      ++mask;    
    }
    
    va_end(params);
    Serial.println();
}

char btnPressed = keypad.getKey();
  if (btnPressed) {
    Serial.print("BtnPressed: ");
    Serial.println(btnPressed);
    // Output: "BtnPressed: 1"
    
    printConcatLine("ci", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: 49"
    
    printConcatLine("cc", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: "  
  }
void printConcatLine(const char* mask, ...) {
    va_list params;
    va_start(params, mask);
    
    while(*mask != '\0') {
      if (*mask == 'i') {
          Serial.print(va_arg(params, int));
      } else if(*mask == 'c') {
          Serial.print(va_arg(params, const char *));
      } else if (*mask == 'f' || *mask == 'd') {
          Serial.print(va_arg(params, double));
      } 
      ++mask;    
    }
    
    va_end(params);
    Serial.println();
}

char btnPressed = keypad.getKey();
  if (btnPressed) {
    Serial.print("BtnPressed: ");
    Serial.println(btnPressed);
    // Output: "BtnPressed: 1"
    
    printConcatLine("ci", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: 49"
    
    printConcatLine("cc", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: "  
  }

which also did nothing.
How

How can I modify the call to va_arg() to properly output the same output as Serial.print()?

I have a function that concatenates a print line, however I am having trouble getting some of the strings to format correctly. Using Serial.print formats the output from keypad.getKey() correctly, however when I try to output the same format using printConcatLine() it does not give me the same output. I've tried casting it as both a char and an int...

void printConcatLine(const char* mask, ...) {
    va_list params;
    va_start(params, mask);
    
    while(*mask != '\0') {
      if (*mask == 'i') {
          Serial.print(va_arg(params, int));
      } else if(*mask == 'c') {
          Serial.print(va_arg(params, const char *));
      } else if (*mask == 'f' || *mask == 'd') {
          Serial.print(va_arg(params, double));
      } 
      ++mask;    
    }
    
    va_end(params);
    Serial.println();
}

char btnPressed = keypad.getKey();
  if (btnPressed) {
    Serial.print("BtnPressed: ");
    Serial.println(btnPressed);
    // Output: "BtnPressed: 1"
    
    printConcatLine("ci", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: 49"
    
    printConcatLine("cc", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: "  
  }

which also did nothing.
How can I modify the call to va_arg() to properly output the same output as Serial.print()?

I have a function that concatenates a print line, however I am having trouble getting some of the strings to format correctly.

Using Serial.print formats the output from keypad.getKey() correctly, however when I try to output the same format using printConcatLine() it does not give me the same output. I've tried casting it as both a char and an int...

void printConcatLine(const char* mask, ...) {
    va_list params;
    va_start(params, mask);
    
    while(*mask != '\0') {
      if (*mask == 'i') {
          Serial.print(va_arg(params, int));
      } else if(*mask == 'c') {
          Serial.print(va_arg(params, const char *));
      } else if (*mask == 'f' || *mask == 'd') {
          Serial.print(va_arg(params, double));
      } 
      ++mask;    
    }
    
    va_end(params);
    Serial.println();
}

char btnPressed = keypad.getKey();
  if (btnPressed) {
    Serial.print("BtnPressed: ");
    Serial.println(btnPressed);
    // Output: "BtnPressed: 1"
    
    printConcatLine("ci", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: 49"
    
    printConcatLine("cc", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: "  
  }

which also did nothing.

How can I modify the call to va_arg() to properly output the same output as Serial.print()?

Source Link

Formatting variables from a variadic function

I have a function that concatenates a print line, however I am having trouble getting some of the strings to format correctly. Using Serial.print formats the output from keypad.getKey() correctly, however when I try to output the same format using printConcatLine() it does not give me the same output. I've tried casting it as both a char and an int...

void printConcatLine(const char* mask, ...) {
    va_list params;
    va_start(params, mask);
    
    while(*mask != '\0') {
      if (*mask == 'i') {
          Serial.print(va_arg(params, int));
      } else if(*mask == 'c') {
          Serial.print(va_arg(params, const char *));
      } else if (*mask == 'f' || *mask == 'd') {
          Serial.print(va_arg(params, double));
      } 
      ++mask;    
    }
    
    va_end(params);
    Serial.println();
}

char btnPressed = keypad.getKey();
  if (btnPressed) {
    Serial.print("BtnPressed: ");
    Serial.println(btnPressed);
    // Output: "BtnPressed: 1"
    
    printConcatLine("ci", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: 49"
    
    printConcatLine("cc", "BtnPressed: ", btnPressed); 
    // Output: "BtnPressed: "  
  }

I also tried changing:

va_arg(params, const char *)

to

va_arg(params, char)

which also did nothing.
How can I modify the call to va_arg() to properly output the same output as Serial.print()?