ERRORE NELLA SCRITTURA DI UNA LIBRERIA


qualche giorno fa ho deciso di scrivere una libreria per pilotare un display 7 segmenti, 4 digit, catodo in comune con arduino. già che sul web ne esistono sicuramente moltissime al riguardo , ma volevo scriverla io, la libreria, per comprenderne meglio il funzionamento.

purtroppo però dopo aver scritto il file header e il source, e dopo aver scritto un semplice sketch per testarne il funzionamento mi da il seguente errore
code: [select]
arduino:1.6.6 (windows 10), scheda:"arduino/genuino uno"

c:\program files (x86)\arduino\libraries\sevensegments\sevensegments.cpp:26:5: error: prototype 'int sevensegments::stampa(int, int)' not match in class 'sevensegments'

 int sevensegments::stampa(int a, int d)

     ^

in file included c:\program files (x86)\arduino\libraries\sevensegments\sevensegments.cpp:8:0:

c:\program files (x86)\arduino\libraries\sevensegments\sevensegments.h:23:9: error: candidate is: void sevensegments::stampa(int, int)

    void stampa(int a, int d);

         ^

exit status 1
errore durante la compilazione

 


file header
code: [select]
#ifndef sevensegments_h
#define sevensegments_h

#include "arduino.h"

class sevensegments
{
  public:
    sevensegments(int a, int b, int c, int d, int e, int f, int g, int h, int d1, int d2, int d3, int d4);
    int number(int _x);
  private:
   int x;
   int unit;
   int migliaia;
   int centinaia;
   int decina;
   int unita;
   void stampa(int a, int d);
   
};

#endif


file source
code: [select]
#include "arduino.h"
#include "sevensegments.h"

sevensegments::sevensegments(int a, int b, int c, int d, int e, int f, int g, int h, int d1, int d2, int d3, int d4)
{
  pinmode(a, output);
  pinmode(b, output);
  pinmode(c, output);
  pinmode(d, output);
  pinmode(e, output);
  pinmode(f, output);
  pinmode(g, output);
  pinmode(h, output);
  pinmode(d1, output);
  pinmode(d2, output);
  pinmode(d3, output);
  pinmode(d4, output);
}

int sevensegments::stampa(int a, int d)
{
 switch (a){
  case 0:
  digitalwrite(a, high);
  digitalwrite(b, high);
  digitalwrite(c, high);
  digitalwrite(d, high);
  digitalwrite(e, high);
  digitalwrite(f, high);
  digitalwrite(g, low);
  digitalwrite(h, low);
  case 1:
  digitalwrite(a, low);
  digitalwrite(b, high);
  digitalwrite(c, high);
  digitalwrite(d, low);
  digitalwrite(e, low);
  digitalwrite(f, low);
  digitalwrite(g, low);
  digitalwrite(h, low);
  case 2:
  digitalwrite(a, high);
  digitalwrite(b, high);
  digitalwrite(c, low);
  digitalwrite(d, high);
  digitalwrite(e, high);
  digitalwrite(f, low);
  digitalwrite(g, high);
  digitalwrite(h, low);
  case 3:
  digitalwrite(a, high);
  digitalwrite(b, high);
  digitalwrite(c, high);
  digitalwrite(d, high);
  digitalwrite(e, low);
  digitalwrite(f, low);
  digitalwrite(g, high);
  digitalwrite(h, low);
  case 4:
  digitalwrite(a, low);
  digitalwrite(b, high);
  digitalwrite(c, high);
  digitalwrite(d, low);
  digitalwrite(e, low);
  digitalwrite(f, high);
  digitalwrite(g, high);
  digitalwrite(h, low);
  case 5:
  digitalwrite(a, high);
  digitalwrite(b, low);
  digitalwrite(c, high);
  digitalwrite(d, high);
  digitalwrite(e, low);
  digitalwrite(f, high);
  digitalwrite(g, high);
  digitalwrite(h, low);
  case 6:
  digitalwrite(a, high);
  digitalwrite(b, low);
  digitalwrite(c, high);
  digitalwrite(d, high);
  digitalwrite(e, high);
  digitalwrite(f, high);
  digitalwrite(g, high);
  digitalwrite(h, low);
  case 7:
  digitalwrite(a, high);
  digitalwrite(b, high);
  digitalwrite(c, high);
  digitalwrite(d, low);
  digitalwrite(e, low);
  digitalwrite(f, high);
  digitalwrite(g, low);
  digitalwrite(h, low);
  case 8:
  digitalwrite(a, high);
  digitalwrite(b, high);
  digitalwrite(c, high);
  digitalwrite(d, high);
  digitalwrite(e, high);
  digitalwrite(f, high);
  digitalwrite(g, high);
  digitalwrite(h, low);
  case 9:
  digitalwrite(a, high);
  digitalwrite(b, high);
  digitalwrite(c, high);
  digitalwrite(d, high);
  digitalwrite(e, low);
  digitalwrite(f, high);
  digitalwrite(g, high);
  digitalwrite(h, low);
 }
 switch (d){
  case 1:
  digitalwrite(d4, high)
  digitalwrite(d3, low);
  digitalwrite(d2, low);
  digitalwrite(d1, low);
  case 2:
  digitalwrite(d3, high)
  digitalwrite(d4, low);
  digitalwrite(d2, low);
  digitalwrite(d1, low);
  case 3:
  digitalwrite(d2, high)
  digitalwrite(d3, low);
  digitalwrite(d4, low);
  digitalwrite(d1, low);
  case 4:
  digitalwrite(d1, high)
  digitalwrite(d3, low);
  digitalwrite(d2, low);
  digitalwrite(d4, low);
 }
int sevensegments::number(int _x)
{
  if (_x >= 0 && _x < 10000){
    x = _x;
  }
  else{
   x = 9999;
  }
  if( x >= 0 && x <= 9){
    unit = 1;
  }
  else if( x >= 10 && x <= 99){
    unit = 2;
  }
  else if( x >= 100 && x <= 999){
    unit = 3;
  }
  else if( x >= 1000 && x <= 9999){
    unit = 4;
  }
  switch (unit){
    case 1:
    do{
      stampa(x, 1);
    } while(x = _x);
    case 2:
    do{
      decina = x/10;
      stampa(decina, 2);
      delay(20);
      unita = x - (decina*10);
      stampa(unita, 1);
      delay(20);
    } while(x = _x);
    case 3:
    do{
      centinaia = x/100;
      stampa(centinaia, 3);
      delay(10);
      decina = (x - centinaia*100)/10;
      stampa(decina, 2);
      delay(10);
      unita = (x - centinaia*100) - (decina*10);
      stampa(unita, 1);
      delay(10);
      } while(x = _x);
    case 4:
    do{
      migliaia = x/1000;
      stampa(migliaia, 4);
      delay(7);
      centinaia = (x - migliaia*1000)/100;
      stampa(centinaia, 3);
      delay(7);
      decina = (x - migliaia*1000 - centinaia*100)/10;
      stampa(decina, 2);
      delay(7);
      unita = x - migliaia*1000 - centinaia*100 - decina*10;
      stampa(unita, 1);
      delay(7);
    } while(x = _x);
  }
}

sketch di prova
code: [select]
#include <sevensegments.h>
sevensegments ssg(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
void setup(){
 
}
void loop(){
  ssg.number(5);
}


spero possiate aiutarmi

la definizione del metodo stampa è la seguente:
code: [select]

int sevensegments::stampa(int a, int d)

il metodo restituisce un dato di tipo int

mentre la dichiarazione (cioè il prototipo) nel file header è la seguente:

code: [select]

void stampa(int a, int d);


qui invece il metodo restituisce void

quindi dovresti risolvere modificando la definizione, togliendo int e al suo posto inserendo void

code: [select]

void sevensegments::stampa(int a, int d)


tutto qui.

ciao.



Arduino Forum > International > Italiano > Software (Moderator: leo72) > ERRORE NELLA SCRITTURA DI UNA LIBRERIA


arduino

Comments

Popular posts from this blog

Error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode - Raspberry Pi Forums

class MPU6050 has no member named begin

missing filename after '-o'