Jump to content

Recommended Posts

Posted

Hey!

I'm trying to display a 7-segment LED VHF AM. With Freq1 and 4 no problem but Freq2 and 3 creates a problem. Does anyone have an idea how to solve it?

 

#define DCSBIOS_IRQ_SERIAL
#include <SevenSeg.h>
#include <DcsBios.h>

SevenSeg disp1(2, 3, 4, 5, 6, 7, 8);
SevenSeg disp2(2, 3, 4, 5, 6, 7, 8);
SevenSeg disp3(2, 3, 4, 5, 6, 7, 8);
SevenSeg disp4(2, 3, 4, 5, 6, 7, 8);
 
 const int numOfDigits1 = 2;   
 const int numOfDigits2 = 1;   
 const int numOfDigits3 = 1;   
 const int numOfDigits4 = 2;   
 
 
 int digitPins1[] = {A0,A1};
 int digitPins2[] = {A2};
 int digitPins3[] = {A3};
 int digitPins4[] = {A4,A5};
  

DcsBios::StringBuffer<2> vhfamFreq1StrBuffer(0x1190, NULL);
DcsBios::StringBuffer<1> vhfamFreq2StrBuffer(0x118e, NULL); // did not work
DcsBios::StringBuffer<1> vhfamFreq3StrBuffer(0x118e, NULL); // did not work
DcsBios::StringBuffer<2> vhfamFreq4StrBuffer(0x1192, NULL);

void setup() {
   DcsBios::setup();
  disp1.setDigitPins(numOfDigits1, digitPins1); 
  disp2.setDigitPins(numOfDigits2, digitPins2); 
  disp3.setDigitPins(numOfDigits3, digitPins3); 
  disp4.setDigitPins(numOfDigits4, digitPins4); 
   }

void loop() {
   DcsBios::loop();
       disp1.write(vhfamFreq1StrBuffer.getData());
       disp1.clearDisp();
       disp2.write(vhfamFreq2StrBuffer.getData());
       disp2.clearDisp();
       disp3.write(vhfamFreq3StrBuffer.getData());
       disp3.clearDisp();
       disp4.write(vhfamFreq4StrBuffer.getData());
       disp4.clearDisp();
   }

 

I found this thread but I have no idea how to use it:

http://forums.eagle.ru/showthread.php?t=141095&page=6

 

 

Arduino Uno

DCS-BIOS 0.5.0

DCS Arduino library 0.2.3

Posted

Looks like you started with this from the reference docs:

DcsBios::IntegerBuffer vhfamFreq2Buffer(0x118e, 0x00f0, 4, NULL);

and then changed an IntegerBuffer to a StringBuffer. Why do you expect it to work?

 

The positions of the Freq2 and Freq3 selectors are encoded as integers in different parts of the two bytes starting at offset 0x118e. Your code treats the first byte at 0x118e as a one-character string and tries to write it to the second and third digits on your display.

 

The Freq1 and Freq2 selectors have additional, redundant string outputs because it is somewhat cumbersome to convert an integer to a right-adjusted string with leading spaces if you want to use just the Arduino libraries and avoid dynamic memory allocation. If you have a single-digit integer, you can just add it to the character literal '0' to get a string (although the SevenSeg library also accepts integers as far as I know, so you don't even need to do that).

 

The following should work:

 

#define DCSBIOS_IRQ_SERIAL
#include <SevenSeg.h>
#include <DcsBios.h>

SevenSeg disp1(2, 3, 4, 5, 6, 7, 8);
SevenSeg disp2(2, 3, 4, 5, 6, 7, 8);
SevenSeg disp3(2, 3, 4, 5, 6, 7, 8);
SevenSeg disp4(2, 3, 4, 5, 6, 7, 8);
 
 const int numOfDigits1 = 2;   
 const int numOfDigits2 = 1;   
 const int numOfDigits3 = 1;   
 const int numOfDigits4 = 2;   
 
 
 int digitPins1[] = {A0,A1};
 int digitPins2[] = {A2};
 int digitPins3[] = {A3};
 int digitPins4[] = {A4,A5};
  

DcsBios::StringBuffer<2> vhfamFreq1StrBuffer(0x1190, NULL);
DcsBios::IntegerBuffer vhfamFreq2Buffer(0x118e, 0x00f0, 4, NULL);
DcsBios::IntegerBuffer vhfamFreq3Buffer(0x118e, 0x0f00, 8, NULL);
DcsBios::StringBuffer<2> vhfamFreq4StrBuffer(0x1192, NULL);

void setup() {
   DcsBios::setup();
  disp1.setDigitPins(numOfDigits1, digitPins1); 
  disp2.setDigitPins(numOfDigits2, digitPins2); 
  disp3.setDigitPins(numOfDigits3, digitPins3); 
  disp4.setDigitPins(numOfDigits4, digitPins4); 
   }

void loop() {
   DcsBios::loop();
       disp1.write(vhfamFreq1StrBuffer.getData());
       disp1.clearDisp();
       disp2.write(vhfamFreq2Buffer.getData());
       disp2.clearDisp();
       disp3.write(vhfamFreq3Buffer.getData());
       disp3.clearDisp();
       disp4.write(vhfamFreq4StrBuffer.getData());
       disp4.clearDisp();
   }

Posted

"call of overloaded 'write(unsigned int)'is ambiguous"

 

C:\Users\Marcin\Documents\Arduino\VHF_AM\VHF_AM.ino: In function 'void loop()':

VHF_AM:39: error: call of overloaded 'write(unsigned int)' is ambiguous

        disp2.write(vhfamFreq2Buffer.getData());

                                              ^

C:\Users\Marcin\Documents\Arduino\VHF_AM\VHF_AM.ino:39:47: note: candidates are:

In file included from C:\Users\Marcin\Documents\Arduino\VHF_AM\VHF_AM.ino:2:0:

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:48:10: note: void SevenSeg::write(long int)

    void write(long int);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:49:10: note: void SevenSeg::write(int)

    void write(int);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:52:10: note: void SevenSeg::write(char*) <near match>

    void write(char*);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:52:10: note:   no known conversion for argument 1 from 'unsigned int' to 'char*'

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:53:10: note: void SevenSeg::write(String) <near match>

    void write(String);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:53:10: note:   no known conversion for argument 1 from 'unsigned int' to 'String'

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:54:10: note: void SevenSeg::write(double)

    void write(double);

         ^

VHF_AM:41: error: call of overloaded 'write(unsigned int)' is ambiguous

        disp3.write(vhfamFreq3Buffer.getData());

                                              ^

C:\Users\Marcin\Documents\Arduino\VHF_AM\VHF_AM.ino:41:47: note: candidates are:

In file included from C:\Users\Marcin\Documents\Arduino\VHF_AM\VHF_AM.ino:2:0:

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:48:10: note: void SevenSeg::write(long int)

    void write(long int);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:49:10: note: void SevenSeg::write(int)

    void write(int);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:52:10: note: void SevenSeg::write(char*) <near match>

    void write(char*);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:52:10: note:   no known conversion for argument 1 from 'unsigned int' to 'char*'

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:53:10: note: void SevenSeg::write(String) <near match>

    void write(String);

         ^

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:53:10: note:   no known conversion for argument 1 from 'unsigned int' to 'String'

C:\Users\Marcin\Documents\Arduino\libraries\SevenSeg/SevenSeg.h:54:10: note: void SevenSeg::write(double)

    void write(double);

         ^

exit status 1
call of overloaded 'write(unsigned int)' is ambiguous

Posted

It should work if you explicitly typecast to long int, that way the compiler should no longer be confused about which variant of the write() method it should use:

 

void loop() {
   DcsBios::loop();
       disp1.write(vhfamFreq1StrBuffer.getData());
       disp1.clearDisp();
       disp2.write((long int)vhfamFreq2Buffer.getData());
       disp2.clearDisp();
       disp3.write((long int)vhfamFreq3Buffer.getData());
       disp3.clearDisp();
       disp4.write(vhfamFreq4StrBuffer.getData());
       disp4.clearDisp();
   }

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...