[RISOLTO]Problema con la libreria DigiPot.h

Salve, ho scritto il seguente codice per Arduino YUN:

#include<AD5231.h>
#include <DigiPot.h>

const int pin0 = 0;        // setup the analog pin 0 as an input read out pin
int val = 0;               // set up the value for transmission to the MCP4251

// this constant won't change:
const int buttonPin1 = 2;  // Pin 2(nonPWM) is attached to the first button
const int buttonPin2 = 4;  // Pin 4 (nonPWM) is attached to the second button
const int ledPin1 = 5;     // the pin that the LED is attached to
const int ledPin2 = 6;    // the pin that LED 2 is attached to


// Variables will change:
int buttonPushCounter1 = 0;   // counter for the number of button1 presses
int buttonPushCounter2 = 0;  // counter for the number of button2 presses
int potlevel = 0;            // This is the counter number that's added to or subtracted from for the digital pot
int steplevel = 0;          // The pot's step value from buttonPushCounter1

int button1 = 0;
int button2 = 0;

int buttonState1 = 0;         // current state of button1
int buttonState2 = 0;          // current state of button 2

int lastButtonState1 = 0;     // previous state of button 1
int lastButtonState2 = 0;     // previous state of button 2

int potval = 0;               // the value initial of the digital p
DigiPot  mcp4251(10, 13, 11); //Start a new instance called "mcp4251"
//format: DigiPot <instance>(CS, SCK, SDI), and connect it to the digital outputs of
// 10, 13, and 11 from the Arduino board.

void setup() {
  // initialize the button pins as a input:
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  
  // initialize the LED as an output:
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  
  // initialize the digital pot
  mcp4251.clear(0); //clear both pots; they default to 127
  mcp4251.clear(1); //format: <instance>.clear(pot)....pot is either 0 or 1
  
  // initialize serial communication:
  Serial.begin(9600);
}


void loop() {
  
  val = analogRead(pin0);  // read the input from digital pot wiper 0
  
  // read the pushbutton input pin:
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);

  // compare the buttonState to its previous state
  if (buttonState1 != lastButtonState1) {
    // if the state has changed, increment the counter
    if (buttonState1 == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      digitalWrite(ledPin1, HIGH);    // And let's indicate the button's being pushed on the led
      buttonPushCounter1 = constrain(buttonPushCounter1++, 1, 20);  // And increment the counter, but constrain it
    } 
    else {
      digitalWrite(ledPin1, LOW);    // Turn it off when released
    }
  }
  // save the current state as the last state, 
  //for next time through the loop
  lastButtonState1 = buttonState1;

  // compare the buttonState2 to its previous state
  if (buttonState2 != lastButtonState2) {
    // if the state has changed, increment the counter
    if (buttonState2 == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      digitalWrite(ledPin2, HIGH);    // Let's indicate the LED on when button 2 is pressed
      buttonPushCounter2 = constrain(buttonPushCounter2++, 1, 20);
    } 
    else {
      digitalWrite(ledPin2, LOW);    // And shut it off when it's off.
    }
  }
  // save the current state as the last state, 
  //for next time through the loop
  lastButtonState2 = buttonState2;

  if (buttonPushCounter1 > buttonPushCounter2) {
    buttonPushCounter1 = buttonPushCounter1 - buttonPushCounter2;
  } else {
    buttonPushCounter2 = buttonPushCounter2 - buttonPushCounter1;
  }
  Serial.println(buttonPushCounter1);  
 
// Serial.println(potlevel);
 
//  if (potlevel < 1) {
//    steplevel1 = 1;
//  } else {
//    steplevel1 = potlevel;
//  }
//  Serial.println(steplevel1);
//  int potval = map(steplevel1, 3, 1023, 1, 255);  // map the values from 
  // the steplevel1 which is 0-1023
  // re spread them across 0-255, which is the amount the 
  // mcp4251 can process
  
//  mcp4251.write(0, potval);  // send the value to the digital pot
// Serial.println(val);
 

ed ottengo il seguente messaggio di errore:

Arduino:1.6.13 (Linux), Scheda:"Arduino Yún"

/home/utente/Desktop/DigiPot()/DigiPot__.ino/DigiPot__.ino.ino:2:21: fatal error: DigiPot.h: No such file or directory
 #include <DigiPot.h>
                     ^
compilation terminated.
exit status 1
Errore durante la compilazione per la scheda Arduino Yún.


Ho cercato su internet ma non trovo soluzione.
Avevo installato due librerie Ad5231 ma il problema permane cancellandone una.
Sembra non riconosca DigiPot.h
Sto cercando di pilotare un MCP4251 con lo YUN.

Aiutatemi per favore.

Mmm ... roba vecchia di 7 anni, mancano tutti i files che ora il nuovo IDE vuole per riconoscerla come una libreria valida ... (specialmente il library.properties) ... non so esattamente se te la riconosce e te la fa usare ... :roll_eyes:

L'hai messa nella cartella delle librerie dell'utente?

Guglielmo

Altrimenti, invece di metterla tra le librerie di Arduino, metti sia il .cpp che il .h nella stessa cartella dove hai il .ino e poi fai:

#include "DigiPot.h"

... con i doppi apici.

Guglielmo

Che versione ha la nuova IDE? Io sto usando la versione 1.6.13

Ho fatto come mi hai detto e continua a non riconoscere la libreria

Questo non è possibile, stai sbagliando qualche cosa ... se guardi, anche il loro esempio è fatto allo stesso modo, includendo il .h tra doppi apici (quindi mettendo .h e .cpp assieme al .ino).

Quando apri il .ino, ti apre altri due TAB con il .h e il .cpp?

... versione 1.8.19

Guglielmo

Però non capisco, il potenziometro digitale AD5231 e ben diverso dal potenziometro MCP4251.

La libreria per MCP4251 dovrebbe essere questa

Mentre per AD5231 dovrebbe essere questa

In entrambe non vedo alcuna classe dal nome DigiPot.

Quale guida stai seguendo?

Ciao.

... inoltre, non so se hai dato un'occhiata ai sorgenti, DigiPot si tira dietro "Energia.h" che, a sua volta, si porta appresso un'infinità di altre librerie ... :open_mouth:

#ifndef Energia_h
#define Energia_h

#include <msp430.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include "binary.h"
#include <avr/dtostrf.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
...

Guglielmo

Ho installato in wi10 la versione 1.8.19, apro il progetto compreso dei file .cpp ed .h ed ottengo il seguente messsaggi odi errore:

Arduino:1.8.19 (Windows 10), Scheda:"Arduino Uno"
DigiPot__.ino:2:10: fatal error: DigiPot.h: No such file or directory

 #include "DigiPot.h"

          ^~~~~~~~~~~

compilation terminated.

exit status 1

DigiPot.h: No such file or directory

Perchè non mi riconosce DigiPot.h ?

No, io proprio non ho trovato DigiPot.h in rete.

Ora cosa c'entra #include <msp430.h>

Textas??

Sono molto confuso.:confused:

Ciao.

... sta QUI ... ma non capisco a lui a cosa serva.

Hai verificato quanto ti ho scritto al post #6? Perché io SI e la vede correttamente!

Guglielmo

Se io su google scrivo DigiPot.h mi fa riferiemnto alla lib AD5231 che permette di scrivere codice pure per il mio MCP4251.

Ho scaricato il zip del DigiPot a cu ifai riferiemnto te GitHub - fmilburn3/DigitalPot_MCP41010: Library and example to control a Microchip MCP41010 digital potentiometer with a MSP-EXP430F5529LP over SPI. ed ora una volta installato mi dice che amnca Energia.h:
qui c'è uno sterminio di lib che dipendono da DigiPot.h, che casino!!!

Lascia stare, hai sbagliato libreria e progetto.

Usa la libreria che ti ha indicato Maurotec la post #7.

Guglielmo

Guglielmo, le lib indicateda Mauro non funzionano con mio chip e non capisco perchè, motivo per cui ora voglio provare ocn DigiPot() che gesisce pure MCP4251 e mi da la possibiilità di decidere i tre PIN 13,10 e 11 dell'Arduino, cosa che non fa il codice indicato da Mauro, capisci?

Bene, dove il link perché con il motore di ricerca google io non lo trovo.

Anche questa non ha il costruttore che usi tu e cioè non puoi usare dei pin generici ma quella della SPI hardware.

Mi chiedo perché non puoi usare la SPI hardware? hai questi pin già impegnati?

Da dove l'hai presa questa sotto:

DigiPot  mcp4251(10, 13, 11); //Start a new instance called "mcp4251"
//format: DigiPot <instance>(CS, SCK, SDI), and connect it to the digital outputs of
// 10, 13, and 11 from the Arduino board.

Io una classe di nome DigiPot che prende 3 pin non l'ho trovata.

Ciao.

E allora posta il link che trovi.
Nelle mie ricerche (e mi pare anche di maurotec) nessuna libreria AD5231 oppure MCP4251 ha una classe DigiPot. Inoltre nessuna libreria AD5231 dice che è compatibile con MCP4251.

Usa la libreria MCP4251 che ti ha indicato maurotec al post #7
Guarda gli esempi di quella libreria, prova con uno di quegli esempi.

P.S. Guglielmo la lib che hai indicato è per la Texas Energia

... immaginavo, comunque, basta commentare un paio di righe e compila l'esempio allegato senza nulla d'altro :wink:

Guglielmo

Guglielmo che intendi per commentare un paio di righe?
Quali righe devo commentare su che file ?
Spiegati meglio.

Quelle che danno errore che, per l'esempio allegato alla libreria, in realtà non servono ...

Ecco questo: DigiPotControl.zip (2.1 KB) compila senza problemi ... ovviamente NON ho l'hardware per provarlo.

Guglielmo