Parte dei commandi dalla libreria SPI non compilano.

Necessitavo della libreria SPI che il mio Arduino IDE possiede, ho incluso quindi la libreria <SPI.h> con:

#include <SPI.h>

ho provato a compilare un esempio di comunicazione SPI con Arduino, quello del potenziometro digitale. Al suo interno ci sono i comandi della libreria:

SPI.begin();
SPI.transfer();

che compilano correttamente. In particolare begin e transfer assumono il colore tipico arancione.

Il problema è che ad esempio il comando:

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

non compila. A differenza dei primi due beginTransaction rimane nero. In particolare l’ errore è il seguente:

DigitalPotControl.ino: In function ‘void setup()’:
DigitalPotControl.ino:40:7: error: ‘class SPIClass’ has no member named ‘beginTransaction’
DigitalPotControl.ino:40:65: error: ‘SPISettings’ was not declared in this scope

Quindi penso che la libreria abbia solo una parte dei comandi. Forse sbaglio la sintassi? il comando l’ ho inserito nel setup dell’ esempio fornito da Arduino IDE.

(Fra l altro non capisco come sia possibile e come faccia l’ esempio fornito a funzionare, dato che il comando serve proprio per impostare il periodo di clock, la modalità di trasmissione dei bit attraverso MOSI etc…)

Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:

Versione di IDE che usi ?

Mi scuso per non essermi presentato, e di non aver letto il regolamento. La prossima volta userò il tag code.

La versione Arduino IDE è 1.0.5. Mi sono dimenticato di dire che uso il sistema operativo Ubuntu v15.04.

La libreria SPI è cambiata dal IDE 1.0.5 Se fai riferimento a qualche tutorial o doc bisogna vedere a che versione di IDE/SPI si riferisce.

la funzione SPI.beginTransaction() è stata introdotta dalla versione 1.6.x in poi, forse è il caso che tu usi
un IDE un pò più recente

Vi ringrazio. Avendolo scaricato dall' Ubuntu Software la versione più recente che si trova è quello che ho. Ora lo scarico da qui direttamente la versione più recente.

L' unica domanda che mi rimane è: senza questo comando, l' arduino come faceva a capire in quale modalità funzionava il rispettivo slave CPOL=0 CPHA=0, CPOL=1 CPHA=0,etc.... , e con quale periodo di clock.

Con la 1.8.1 compila tranquillamnete la segunete riga:

SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));

Ah, altra cosa, i colori NON significano nulla, arancione o nero è solo se, chi ha scritto la libreria, ha dedicato del tempo a creare bene il file di "colorazione" che accompagna la lib, ovvero il file "keywords.txt".

In particolare, in quello del SPI, mancano varie cose e quindi la colorazione NON avviene per tutto, ma è SOLO una cosa estetica.

Guglielmo

AI_Frgss:
senza questo comando, l' arduino come faceva a capire in quale modalità funzionava il rispettivo slave CPOL=0 CPHA=0, CPOL=1 CPHA=0,etc.... , e con quale periodo di clock.

Quelli che ti ho indicato nell'esempio sono i valori di default.

Se vai a leggere i sorgenti della libreria ritrovi il tutto.

Guglielmo

No io mi riferisco alla versione 1.0.5. Quello che dicevo era: dato che questo comando mancava nella versione 1.0.5. non capivo come gestiva le due cose(cioè modalità e periodo di clock). Infatti nell’ esempio fornito dall’ arduino IDE non c’ è questa istruzione.

Ok, apri la libreria SPI della tua versione di IDE, studiala e vedrai che comunque ha dei valori di default :wink:

Guglielmo