Problème dans le codage de VU METRE

Bonjour à tous,

j'essaye actuellement de faire un Vu metre à partir d'une carte arduino(uno), j'ai obtenu le code sur le site instructable : http://www.instructables.com/id/LoL-Shield-Audio-Spectrum-VU-Meter/

J'ai importé les bibliothèques nécessaire à la compilation du code c'est-à-dire : - the FFT library found on the Arduino forum

  • the Charlieplexing library for the LoL Shield
    et lorsque j'essaye de compiler le code j'ai ce message d'erreur qui apparaît :

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:31:22: error: WProgram.h: No such file or directory

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:48: error: 'boolean' does not name a type

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp: In function 'void LedSign::Flip(bool)':

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:185: error: 'videoFlipPage' was not declared in this scope

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:189: error: 'delay' was not declared in this scope

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp: In function 'void __vector_9()':

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:290: error: 'videoFlipPage' was not declared in this scope

Je vous remercie de votre aide, je suis disponible pour n'importe quelle question :slight_smile:

Bonne année!

Yo!

Tu peux nous mettre ton programme s'il te plait =)

Bonjour , je suis nouveau sur le site, mais cela me semple simple
pas besoin de librairie

rentrer sur un In analogique avec ton signal (0-5v), en faire la mesure et mettre en concordance avec une échelle de valeurs

et mettre des leds sur les sorties digitales (une led par sortie)

ensuite tu fais un branching en fonction de l'échelle de concordance

exemple

tu as 5 sortie digitales libres pour tes 5 leds (4,5,6,7,8)
sans mappage ton entrée analogique ira de 0 à 255
Donc les tranches seront egales à 255/5 soit 51

je passe l'initialisation des pins .... ensuite

int signal = 0;
signal = analogRead(n°de ta pin);

if (signal == 0)
{
for (int i =4: i <=8;i++) // toutes leds éteintes
{
digitalwrite(i, LOW) ;
}
}

if ( signal > 0 && signal <= 50) //première led allumée
{

digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
}

if (signal >= 51 && signal <=101) // 1er et 2eme led allumées
{

digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
}

etc etc....
102 152
153 204
205 255

En espérant que cela puisse t'aider

++
Fanfan

Faut donnée tout le code! et utilise les balises de code surtout le début:

if(blalbla) blabla;

et apparemment ya des problèmes avec la libraire Charliplexing.cpp

Tu n'as pas mis la librairie dans le bon dossier, c'est écrit dans la première ligne du message d'erreurs.

Bonsoir tout le monde ,
merci d'avoir répondu aussi vite, je vais essayer de répondre à tout le monde :
------> pour commencer voici le code pour Jimbow :
/*
FFT for LoL Shield v0.9
by Andy Doro

based on FFT library and code from the Arduino forums and
the Charlieplexing library for the LoL Shield.
*/

#include <Charliplexing.h>
#include <fix_fft.h>

#define AUDIOPIN 5

char im[128], data[128];

char data_avgs[14];

int i=0,val;

void setup() {
LedSign::Init(); //Initilizes the LoL Shield
}

void loop() {

for (i=0; i < 128; i++){
val = analogRead(AUDIOPIN);
data = val;
im = 0;
};
fix_fft(data,im,7,0);
for (i=0; i< 64;i++){
data = sqrt(data * data + im * im*); // this gets the absolute value of the values in the array, so we're only dealing with positive numbers*
};
// average bars together
for (i=0; i<14; i++) {
data_avgs = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3]; // average together
data_avgs = map(data_avgs*, 0, 30, 0, 9); // remap values for LoL*
}
// set LoLShield
for (int x=0; x < 14; x++) {
for (int y=0; y < 9; y++) {
if (y < data_avgs[13-x]) { // 13-x reverses the bars so low to high frequences are represented from left to right.
LedSign::Set(x,y,1); // set the LED on
} else {
LedSign::Set(x,y,0); // set the LED off
}
}
}
}
*Pour ce qui est des bibliothèques nécessaire à la compilation je les aie prise directement sur le site : http://www.instructables.com/id/LoL-Shield-Audio-Spectrum-VU-Meter/*_
-----> Jean-François, je te copie le chemin dans lequel j'ai copier les librairies :
C:\Program Files (x86)\Arduino\libraries
Si le chemin ci-joint n'est pas le bon, pourrais-tu me donner le tiens ?
Merci de votre aide !:slight_smile:_

Je suis sur Mac... alors les chemin je sais pas si ce sont les mêmes.

Par contre le compilateur te dit que là il ne trouve pas ton fichier :

C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp

Bonsoir,
je pense avoir réglé le problème des bibliothèques mais du coup j'ai une autre erreur qui s'affiche, que je ne comprends pas, voilà ce que ça donne :
sketch_jan01a.ino: In function 'void loop()':
sketch_jan01a:40: error: incompatible types in assignment of 'int' to 'char [128]'
sketch_jan01a:41: error: incompatible types in assignment of 'int' to 'char [128]'
sketch_jan01a:47: error: invalid operands of types 'char [128]' and 'char [128]' to binary 'operator*'
sketch_jan01a:47: error: invalid operands of types 'char [128]' and 'char [128]' to binary 'operator*'
sketch_jan01a:53: error: incompatible types in assignment of 'int' to 'char [14]'
sketch_jan01a:54: error: invalid conversion from 'char*' to 'long int'
sketch_jan01a:54: error: initializing argument 1 of 'long int map(long int, long int, long int, long int, long int)'
sketch_jan01a:54: error: incompatible types in assignment of 'long int' to 'char [14]'

Une idée du problème ?
MERCI

il faut que tu revoies tes méthodes pour passer d'un int à un char ou tableau de char.... ou le contraire :grin:

Pour être honnête je débute dans le monde arduino, donc si tu pouvais me donner quelques petites indications pour 'améliorer' le code ça serait fort bien sympa :slight_smile:

Il faut enlever les ; après les }

Le problème est de ce coté

for (i=0; i < 128; i++){
val = analogRead(AUDIOPIN);
data = val;
im = 0;
};

fix_fft(data,im,7,0);

for (i=0; i< 64;i++){
data = sqrt(data * data + im * im); // this gets the absolute value of the values in the array, so we're only dealing with positive numbers
};

data et im sont des tableaux. Tu ne peux pas les utiliser comme ça.
Il faut utiliser un index pour écrire les éléments des tableaux

for (i=0; i < 128; i++){
val = analogRead(AUDIOPIN);
data[i] = val;
im[i] = 0;
};

fix_fft(data,im,7,0);

for (i=0; i< 64;i++){
data[i] = sqrt(data[i] * data[i] + im[i] * im[i]); // this gets the absolute value of the values in the array, so we're only dealing with positive numbers
};

D'autre part, on ne connais pas la dynamique des signaux d'entrée mais ces lignes sont problématiques

val = analogRead(AUDIOPIN);
data[i] = val;

analogRead retourne un int (donc sur 16 bits) mais avec seulement 10 bits significatifs et data est un tableau de char (donc sur 8 bits). Le résultat risque donc d'être inattendu.
Il serait préférable d'écrire comme ça.

val = analogRead(AUDIOPIN);
data[i] = (val>>2) & 0xFF;

ainsi val est divisée par 4 ce qui passe le contenu de la variable de 10 à 8 bits en ne retenant que les 8 bits de poids faible. Si par hasard la dynamique d'entrée était plus faible il suffirait de ne décaler que de 1 vers la droite au lieu de 2.

Bonjour, merci de ton aide je vais essayer tout ça pour voir ce que ça donne

Rebonjour,

du coup j'ai recommencé en remplaçant les lignes de codes qui n'étaient pas correctes mais le résultat reste le même ... Après modification j'obtient un code qui a cette tête :
#include <Charliplexing.h>

#include <fix_fft.h>

#define AUDIOPIN 5

char im[128], data[128];

char data_avgs[14];

int i=0,val;

void setup() {
LedSign::Init(); //Initilizes the LoL Shield
}

void loop() {

for (i=0; i < 128; i++){
val = analogRead(AUDIOPIN);
data = (val>>2) & 0xFF;
_ im = 0;_
* };*

* fix_fft(data,im,7,0);*

* for (i=0; i< 64;i++){*
data = sqrt(data * data + im * im*); // this gets the absolute value of the values in the array, so we're only dealing with positive numbers*
* };*

* // average bars together*
* for (i=0; i<14; i++) {*
data_avgs = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3]; // average together
data_avgs = map(data_avgs*, 0, 30, 0, 9); // remap values for LoL*
* }*

* // set LoLShield*

* for (int x=0; x < 14; x++) {*
* for (int y=0; y < 9; y++) {*
* if (y < data_avgs[13-x]) { // 13-x reverses the bars so low to high frequences are represented from left to right.
_ LedSign::Set(x,y,1); // set the LED on*
* } else {
LedSign::Set(x,y,0); // set the LED off*

* }
}
}*_

* }*
Et mon message d'erreur est le suivant :
C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:31:22: error: WProgram.h: No such file or directory
C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:48: error: 'boolean' does not name a type
C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp: In function 'void LedSign::Flip(bool)':
C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:185: error: 'videoFlipPage' was not declared in this scope
C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:189: error: 'delay' was not declared in this scope
C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp: In function 'void __vector_9()':
C:\Users\Léonard\Documents\Arduino\libraries\libraries\Charliplexing.cpp:290: error: 'videoFlipPage' was not declared in this scope

Une petite idée du problème ?
Merci de votre aide
Bonne journée

Enfaite j'ai pris la mauvaise correction ... Ducoup mon message d'erreur est le suivant

sketch_jan09c.ino: In function 'void loop()':
sketch_jan09c:37: error: incompatible types in assignment of 'int' to 'char [128]'
sketch_jan09c:43: error: invalid operands of types 'char [128]' and 'char [128]' to binary 'operator*'
sketch_jan09c:43: error: invalid operands of types 'char [128]' and 'char [128]' to binary 'operator*'

Avec le code suivant :

#include <Charliplexing.h>

#include <fix_fft.h>

/*
FFT for LoL Shield v0.9
by Andy Doro

based on FFT library and code from the Arduino forums and
the Charlieplexing library for the LoL Shield.
*/

#define AUDIOPIN 5

char im[128], data[128];

char data_avgs[14];

int i=0,val;

void setup() {
LedSign::Init(); //Initilizes the LoL Shield
}

void loop() {

for (i=0; i < 128; i++){
val = analogRead(AUDIOPIN);
data = (val>>2) & 0xFF;
im = 0;
};
fix_fft(data,im,7,0);
for (i=0; i< 64;i++){
data = sqrt(data * data + im * im); // this gets the absolute value of the values in the array, so we're only dealing with positive numbers
};
// average bars together
for (i=0; i<14; i++) {
data_avgs = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3]; // average together
data_avgs = map(data_avgs*, 0, 30, 0, 9); // remap values for LoL*
}
// set LoLShield
for (int x=0; x < 14; x++) {
for (int y=0; y < 9; y++) {
if (y < data_avgs[13-x]) { // 13-x reverses the bars so low to high frequences are represented from left to right.
LedSign::Set(x,y,1); // set the LED on
} else {
LedSign::Set(x,y,0); // set the LED off
}
}
}
}

Une idée ? merci de votre aide