Arduino Forum

International => Italiano => Software => Topic started by: tubbadu on Apr 23, 2019, 05:41 pm

Title: Errore nella creazione di una libreria
Post by: tubbadu on Apr 23, 2019, 05:41 pm
Ciao a tutti! mi sono appena iscritto a questo forum, spero di non sbagliare qualcosa :smiley-confuse:
ho scopiazzato questo sketch per leggere i valori inviati da un nunchuck wii, con qualche modifica:
Code: [Select]

#include <Wire.h>

int info [6];
int n = 0;
int j_x, j_y, a_x, a_y, a_z, b_z = 1, b_c = 1;
 
void setup()
{
  Setup ();
}

void Setup ()
{
  Serial.begin (9600);
  Wire.begin ();
  Wire.beginTransmission (0x52);
  Wire.write (0x40);
  Wire.write (0x00);
  Wire.endTransmission ();
}

void Reset()
{
  Wire.beginTransmission (0x52);
  Wire.write (0x00);
  Wire.endTransmission ();
}

void loop()
{

  Reset();
  GetData();
  delay(tempo);
}
 
void GetData()
{
  Wire.requestFrom (0x52, 6);
  while (Wire.available ()) {
    info[n] = Wire.read ();
    n++;
  }
  n = 0;
  Reset();
  j_x = info[0];
  j_y = info[1];
  a_x = info[2];
  a_y = info[3];
  a_z = info[4];
  b_z = 1;
  b_c = 1;
  if ( info[5]       & 1) b_z = 0;
  if ((info[5] >> 1) & 1) b_c = 0;
  if (b_c+b_z == 2) {b_c = 0;}
  else if (b_z == 1){b_c = 1;}
}

int read_x()
{
  GetData();
  return j_x;
}
int read_y()
{
  GetData();
  return j_y;
}
int read_ax()
{
  GetData();
  return a_x;
}
int read_ay()
{
  GetData();
  return a_y;
}
int read_az()
{
  GetData();
  return a_z;
}
int read_z()
{
  GetData();
  return b_z;
}
int read_c()
{
  GetData();
  return b_c;
}


funziona, ma è un po' lunghetto, e volevo creare una libreria chiamata "Nunchuck" per chiamarlo velocemente quando mi serve.
così sono andato sul sito di Arduino.cc alla voce 'libraries (https://www.arduino.cc/en/hacking/libraries)', ho scaricato la versione di prova e ho cominciato a scriverci il codice.
questi sono i due file
Code: (Teest.cpp) [Select]

// include core Wiring API
#include <Arduino.h>
#include <Wire.h>

// include this library's description file
#include "Teest.h"

// include description files for other libraries used (if any)
#include "HardwareSerial.h"


    int info [6];
    int n = 0;
    int tempo = 10;
    int j_x, j_y, a_x, a_y, a_z, b_z = 1, b_c = 1;
// Constructor /////////////////////////////////////////////////////////////////
// Function that handles the creation and setup of instances

Teest::Teest(int givenValue)
{
  Serial.begin (9600);
  Wire.begin ();
  Wire.beginTransmission (0x52);
  Wire.write (0x40);
  Wire.write (0x00);
  Wire.endTransmission ();
}

// Public Methods //////////////////////////////////////////////////////////////
// Functions available in Wiring sketches, this library, and other libraries
int Teest::read_x()
{
  GetData();
  return j_x;
}
int Teest::read_y()
{
  GetData();
  return j_y;
}
int Teest::read_ax()
{
  GetData();
  return a_x;
}
int Teest::read_ay()
{
  GetData();
  return a_y;
}
int Teest::read_az()
{
  GetData();
  return a_z;
}
int Teest::read_z()
{
  GetData();
  return b_z;
}
int Teest::read_c()
{
  GetData();
  return b_c;
}

// Private Methods /////////////////////////////////////////////////////////////
// Functions only available to other functions in this library

void Teest::Reset()
{
  Wire.beginTransmission (0x52);
  Wire.write (0x00);
  Wire.endTransmission ();
}

void Teest::GetData()
{
  Wire.requestFrom (0x52, 6);
  while (Wire.available ())
  {
    info[n] = Wire.read ();
    n++;
  }
  n = 0;
  Reset();
  j_x = info[0];
  j_y = info[1];
  a_x = info[2];
  a_y = info[3];
  a_z = info[4];
  b_z = 1;
  b_c = 1;
  if ( info[5]       & 1) b_z = 0;
  if ((info[5] >> 1) & 1) b_c = 0;
  if (b_c+b_z == 2) {b_c = 0;}
  else if (b_z == 1){b_c = 1;}
}


Code: (Teest.h) [Select]

// ensure this library description is only included once
#ifndef Teest_h
#define Teest_h

// include types & constants of Wiring core API
#include <Arduino.h>

// library interface description
class Teest
{
  // user-accessible "public" interface
  public:
    Teest(int);
    int read_x (void);
    int read_y (void);
    int read_ax(void);
    int read_ay(void);
    int read_az(void);
    int read_c (void);
    int read_z (void);

  // library-accessible "private" interface
  private:
    int info [6];
    int n = 0;
    int tempo = 10;
    int j_x, j_y, a_x, a_y, a_z, b_z = 1, b_c = 1;
    void Reset(void);
    void GetData(void);
};

#endif


se includo in uno sketch vuoto #include <Teest.h> non mi da errori, ma quando si tratta di chiamare una funzione si arrabbia e mi da questo errore:

Code: [Select]

C:\Users\Ale Ribaudo\Desktop\sketch_apr23a\sketch_apr23a.ino: In function 'void loop()':

sketch_apr23a:11:16: error: expected primary-expression before '.' token

   int p = Teest.read_c();

                ^

exit status 1
expected primary-expression before '.' token


questo è lo sketch:
Code: [Select]

#include <Teest.h>

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.print("ciaooo \n");
}

void loop() {
  // put your main code here, to run repeatedly:
  int p = Teest.read_c();
}


perchè non va? cosa sto sbagliando? vi ringrazio in anticipo :D ciaoo!
Title: Re: Errore nella creazione di una libreria
Post by: fabpolli on Apr 23, 2019, 05:52 pm
Buona sera,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del nostro regolamento, ti chiedo cortesemente di presentarti QUI (http://forum.arduino.cc/index.php?topic=113640.0) (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO (http://forum.arduino.cc/index.php?topic=149082.0) ... Grazie. :)
Title: Re: Errore nella creazione di una libreria
Post by: fabpolli on Apr 24, 2019, 10:23 am
Ciao, l'errore sta nel fatto che non puoi accedere direttamente ai metodi della libreria in quanto tu dentro di essa definisci una classe e quindi devi istanziare un oggetto di tale classe ed utilizzarne i metodi, hai fatto praticamente tutto, ti manca un piccolo passaggio, guarda questo  (https://www.arduino.cc/en/Hacking/LibraryTutorial) tutorial che è fatto abbastanza bene ed è pure conciso e si adatta perfettamente al tuo caso
Title: Re: Errore nella creazione di una libreria
Post by: tubbadu on Apr 24, 2019, 11:13 am
Il regolamento lo avevo letto ma la presentazione mi era sfuggita :D
Grazie mille! adesso funziona! o meglio, riesco ad usare la libreria, perchè non fa quello che vorrei, ma questo è un altro discorso :D
ancora Grazie!