bonjour, je suis entrain de réaliser le projet d'une balance qui est sensé chanter une chanson quand il dépasse un certain poids, le problème c'est quand la balance atteint ce poids le mémo ne fait que se répéter chaque deux seconde, on dirait qu'il re détecte le poids a chaque fois...
j'ai essayer avec des port analogique, et avec des port numérique ça donne le même résultat..
voilà le code analogique:
// Hx711.DOUT - pin #A11
// Hx711.SCK - pin #A10
#include <Hx711.h>
Hx711 scale(A11, A10);
int test;
int weight;
int pinLedvert,pinLedroug;
///////////////////////////////////////////////
////////// blibliothèque speaker /////////////
///////////////////////////////////////////////
#include <pcmConfig.h>
#include <pcmRF.h>
#include <TMRpcm.h>
#include <SD.h>
#define SD_Pin 53 //define CS pin
TMRpcm speaker; //objet "speaker
////////////////////////////////////////////////////
////////////////voice///////////////
///////////////////////////////////
String voice;
int voix;
void setup() {
Serial.begin(9600);
pinLedvert = 20;
pinLedroug = 23;
pinMode(pinLedvert, OUTPUT);
pinMode(pinLedroug, OUTPUT);
///////////////////////////////////////////////
////////// déclaration speaker ///////////////
///////////////////////////////////////////////
speaker.speakerPin = 46; //définnie le pin du speaker. Il faut utiliser le 9 car la library utilise ce pin !
if (!SD.begin(SD_Pin)) { // si carte non inceré, ne rien faire
return;
}
speaker.setVolume(6); //volume level : 0 to 7
}
void loop() {
weight=scale.getGram();
Serial.print(weight, 1);
Serial.println(" g");
delay(200);
if (weight < 40) //on teste si etatAllumage est à 1
{
digitalWrite(pinLedvert, HIGH);
digitalWrite(pinLedroug, LOW);
}
if (weight > 40)
{
digitalWrite(pinLedvert, LOW);
digitalWrite(pinLedroug, HIGH);//on éteint la LED
speaker.play("17.wav");
return;
}
}
et voilà le code en numérique:
#include "HX711.h"
#define DOUT A11
#define CLK A10
HX711 scale(DOUT, CLK);
float weight;
float calibration_factor = -99300; // for me this value works just perfect 419640
///////////////////////////////////////////////
////////// blibliothèque speaker /////////////
///////////////////////////////////////////////
#include <pcmConfig.h>
#include <pcmRF.h>
#include <TMRpcm.h>
#include <SD.h>
#define SD_Pin 53 //define CS pin
TMRpcm speaker; //objet "speaker
////////////////////////////////////////////////////
////////////////voice///////////////
///////////////////////////////////
String voice;
int voix;
int pinBouton, pinLedvert, pinLedroug;
void setup() {
Serial.begin(9600);
long zero_factor = scale.read_average(); //Get a baseline reading
Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
Serial.println(zero_factor);
pinLedvert = 20;
pinLedroug = 23;
pinBouton = 21;
etatAllumage = 0;
pinMode(pinBouton, INPUT_PULLUP);
pinMode(pinLedvert, OUTPUT);
pinMode(pinLedroug, OUTPUT);
///////////////////////////////////////////////
////////// déclaration speaker ///////////////
///////////////////////////////////////////////
speaker.speakerPin = 46; //définnie le pin du speaker. Il faut utiliser le 9 car la library utilise ce pin !
if (!SD.begin(SD_Pin)) { // si carte non inceré, ne rien faire
return;
}
speaker.setVolume(6); //volume level : 0 to 7
scale.set_scale();
scale.tare(); //Reset the scale to 0
}
void alarme() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor
weight = scale.get_units(5);
//Serial.print(scale.get_units(), 2);
// Serial.print(" lbs"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
if (Serial.available())
{
char temp = Serial.read();
if (temp == '+' || temp == 'a')
calibration_factor += 100;
else if (temp == '-' || temp == 'z')
calibration_factor -= 100;
}
/////////////////////////////////////////////////////
if (weight < 0.2) //on teste si etatAllumage est à 1
{
digitalWrite(pinLedvert, HIGH);
digitalWrite(pinLedroug, LOW);
}
if (weight > 0.5)
{
digitalWrite(pinLedvert, LOW);
digitalWrite(pinLedroug, HIGH);//on éteint la LED
speaker.play("17.wav");
}
}
void loop() {
Serial.print("Kilogram:");
Serial.print( weight);
Serial.print(" Kg");
alarme();
}