j'ai commencé à rassembler mes différents codes dans un seul
j'ai quelques problèmes
je voudrais que si une nouvelle poule est présente sur le nid et quelle n'a pas était
identifiée il soit affiché comme tel , c'est ce que je veux faire à la ligne 228
nomPoule =="poule inconnue";
or c'est toujours la dernière poule identifiée qui s'affiche.
il faudrait peut-être travailler un peu la "loop"
voici ou j'en suis:
guillaumetell:
voici un début de sketch sans prétention concernant la partie pesage et qui parait fonctionnel/*
Example using the SparkFun HX711 breakout board with a scale
By: Nathan Seidle
SparkFun Electronics
Date: November 19th, 2014
License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
This example code uses bogde's excellent library: GitHub - bogde/HX711: An Arduino library to interface the Avia Semiconductor HX711 24-Bit Analog-to-Digital Converter (ADC) for Weight Scales.
bogde's library is released under a GNU GENERAL PUBLIC LICENSE
The HX711 est compatible avec n'importe quel capteur monté en pont de wheatstone
et peut donc mesurer n'importe quelle charge de quelques grammes à plusieurs tonnes.
Arduino pin 2 -> HX711 CLK
3 -> DAT
5V -> VCC
GND -> GND
Le HX711 peut être alimenté entre 2.7 et 5 v donc le 5v de l'arduino peut très bien convenir.
//Exemple de sketch pour RFID ID-20LA reader ou autre
//plus d'info sur http://tutorial.cytron.com.my/
// adapté au RDM6300
//Les fils du RDM6300 1( TX) et 2( RX) sont sur broches 0(RX) et 1 (TX) de l'arduino: donc il y a un croisement.
//ils doivent etre débranches pour téléverser ou alors il faut mettre la bib.
//et là on peut choisir d'autres broches
/*liste des codes des 10 bagues en hexadécimal : tête version tag checksum queue
2 5D 009670DD 66 3
2 5D 009646A7 2A 3
2 5D 00968376 3E 3
2 5D 0096985F 0C 3
2 5D 00962ABE 5F 3
2 5D 00963AFB 0A 3
2 5D 00966407 A8 3
2 5D 009664D6 79 3
2 5D 00965CA5 32 3
2 5D 00963EB4 41 3
*/
#include <SoftwareSerial.h>
SoftwareSerial RFID = SoftwareSerial(6, 7); // RX and TX //c'était SoftwareSerial RFID(6.7);faux
byte IDtag[12];
boolean lecturetag = false;
String nomPoule = "poule inconnue";
#include "HX711.h"
#define calibration_factor 240.8
//Cette valeur est obtenue en utilisant le sketch SparkFun_HX711_Calibration
#define DOUT 3
#define CLK 2
HX711 scale(DOUT, CLK);
void setup() {
Serial.begin(9600);
Serial.println("PESAGE POULES et OEUFS");
scale.set_scale(calibration_factor); //Cette valeur est obtenue en utilisant le sketch de calibration SparkFun_HX711
scale.tare(); //S'assurer qu'il n'y a pas de charge sur la balance au départ , remise à zéro de l'échelle
Serial.println("Lecture: ");
Serial.print(scale.get_units());
Serial.println(" g");
RFID.begin(9600);
}
void loop()
{
identification();
pesage();
enregistrement();
}
void identification()
{
/*liste des codes des 10 bagues en hexadécimal :
tête version tag checksum queue
2 5D 009670DD 66 3
2 5D 009646A7 2A 3
2 5D 00968376 3E 3
2 5D 0096985F 0C 3
2 5D 00962ABE 5F 3
2 5D 00963AFB 0A 3
2 5D 00966407 A8 3
2 5D 009664D6 79 3
2 5D 00965CA5 32 3
2 5D 00963EB4 41 3
*/
if (RFID.available() >= 13) //s'assurer que l'ensemble du code est reçu
{
if (RFID.read() == 0x02) //Verifie le byte de départ = 0x02
{
lecturetag = true; //un nouveau tag est lu
for (int index = 0; index < sizeof(IDtag); index++)
{
byte val = RFID.read();
//convertir de la valeur ASCII en une plage de valeurs de 0 à 9 et A à F
if ( val >= '0' && val <= '9')
val = val - '0';
else if ( val >= 'A' && val <= 'F')
val = 10 + val - 'A';
IDtag[index] = val;
}
}
else
{
lecturetag = false; //Ignorer et sauter
}
}
if (lecturetag == true) //Un nouveau tag est lu
{
affiche_tag(); //Affiche l'ID de la balise
efface_tag(); //Effacer l'ID du tag et prepare pour la balise suivante
lecturetag = false;
}
delay(10);
}
void affiche_tag()
{
Serial.print("Tag ID: ");
for (int index = 0; index < 10; index++)
{
Serial.print(IDtag[index], HEX); //Affiche IDtag
}
Serial.print("\r\nChecksum: ");
Serial.print(IDtag[10], HEX); //Affiche somme de controle
Serial.println(IDtag[11], HEX);
if (IDtag[11] == 0x06) // il n'est traite que le second chiffre du cheksum qui est different sur chaque bague
{
nomPoule = "poule 1";
Serial.println(nomPoule);
}
if (IDtag[11] == 0x0A)
{
nomPoule = "poule 2";
Serial.println(nomPoule);
}
if (IDtag[11] == 0x0E)
{
nomPoule = "poule 3"; // a continuer ->"poule 10"
Serial.println(nomPoule); // un tableau serait mieux
}
/* else
{
nomPoule = "poule non identifiee ";
Serial.println(nomPoule);
}
*/
}
void efface_tag()
{
for (int index = 0; index < sizeof(IDtag); index++)
{
IDtag[index] = 0;
}
}
void pesage()
{
if (scale.get_units() > 500) //s'ily a plus de 500 grammes c'est qu'une poule est présente
{
Serial.print("il y a une poule de ");
Serial.print(scale.get_units());
Serial.println(" grammes sur le nid");
Serial.print("cette poule est ");
Serial.println(nomPoule);
nomPoule == "poule inconnue";
/*je voudrais que le dernier nom détecté ne continue pas
à s'afficher s'il n'y a pas de nouvelle identification et çà ne fonctionne pas
*/
}
if ((scale.get_units() > 40) && (scale.get_units() < 110)) //c'est la fourchette de poids d'un oeuf
{
Serial.print("la poule a pondu un oeuf de ");
Serial.print(scale.get_units());
Serial.println(" grammes");
}
}
void enregistrement()
{
//pas encore fait
}
//le but final sera d'enregister ces evenements horodates sur carte SD en ajoutant une identification par bague RFTD