Bonjour,
Je suis néophyte en code C et en arduino. J'aimerais des réponses claires et ludique et non des redirection vers les cours de base Merci.
Je souhaite réaliser un appareil portatif pour nous aider en spéléo.
L'appareil contiendra les capteurs suivants:
-Temperature
-Hygrometrie
-Magnetometre
-Monoxyde de carbone
et sera équipé des elements suivants:
-Ecran 4x20
-Vibreur
-Laser
-Buzzer
-Bouton rotatif
-Led rgb
L'appareil servira a présenter a l'utilisateur la temperature, le taux d'humidité et de monoxyde de carbone et l'angle en degrès.
Le laser servira a pointer l'appareil entre les différentes bases pour faire des relevé de topographie.
Pour la sécurité je compte aussi ajouter un detecteur d'oxygène quand j'aurais tout fini.
Actuellement l'appareil devra vibrer et sonnera partir d'un taux de 25ppm de Co.
Pour le moment j'ai reçu et essayé les capteurs d'humidité/temperature et magnetometre. J'arrive a ressortir les données clairement sur le moniteur.
Je décide donc d'essayer l'alarme sur la temperature (devra sonner lors de 30°) mais je bloque sur le fait que l'arduino bloque sur l'alarme. Il décide de faire une boucle que dessus et si je l'insère apres mon relevé il sonne a chaque passage de la boucle. Est-il possible de creer une boucle juste pour cela ?
#include <dht11.h>
dht11 DHT11; //Instancier un capteur de type dht11
#define DHT11PIN 2 //Branché sur pin2 digital
int alarm =7;
#include <Wire.h> //Librairie Wire pour la communication I2C
#define HMC5803L_Address 0x1E //Adresse I2C du module
#define X 3 //Adresses de registres pour les données X Y et Z
#define Y 7
#define Z 5
double Xmagnetic;
double Ymagnetic;
double Zmagnetic;
double Module_magnetic;
double angle;
void setup()
{
Serial.begin(9600);
Wire.begin(); //Initialisation de la livrairie Wire
Init_HMC5803L(); //Initialiser le module boussole
pinMode(alarm,OUTPUT);
}
// Boucle de mesures de champ magnétique
void loop()
{
int chk = DHT11.read(DHT11PIN); //Tester le capteur
//Hygrométrie %
Serial.print("Humidite = ");
Serial.print((float)DHT11.humidity, 2);
Serial.print(" % ");
//Température °C
Serial.print("Temp = ");
Serial.print((float)DHT11.temperature, 2);
Serial.print(" C ");
if (DHT11.temperature >28) {
unsigned char i, j ;// define variables
{
for (i = 0; i <80; i++) // Wen a frequency sound
{
digitalWrite (7, HIGH) ;// send voice
delay (1) ;// Delay 1ms
digitalWrite (7, LOW) ;// do not send voice
delay (1) ;// delay ms
}
for (i = 0; i <10; i++) // Wen Qie out another frequency sound
{
digitalWrite (7, HIGH) ;// send voice
delay (2) ;// delay 2ms
digitalWrite (7, LOW) ;// do not send voice
delay (2) ;// delay 2ms
}
}
} else {
digitalWrite(7,LOW);
}
Xmagnetic = HMC5803L_Read(X); //lecture sur 3 axes et sortie sur le port sériel
Ymagnetic = HMC5803L_Read(Y);
Zmagnetic = HMC5803L_Read(Z);
Module_magnetic = Xmagnetic * Xmagnetic + Ymagnetic * Ymagnetic + Zmagnetic * Zmagnetic;
Module_magnetic = sqrt(Module_magnetic);
//Calculer l'angle de la boussole à partir de X et Y (à plat)
angle= atan2(Ymagnetic,Xmagnetic) * (180 / 3.14159265); // angle en degres
if (angle<0) {angle=angle+360;}
Serial.print(" ");
Serial.print("Angle "); //en degres
Serial.println(angle);
delay(10);
}
// === Fonction qui initialise le module boussole (à lancer une seule fois)
void Init_HMC5803L(void)
{
/* Set the module to 8x averaging and 15Hz measurement rate */
Wire.beginTransmission(HMC5803L_Address);
Wire.write(0x00);
Wire.write(0x70);
Wire.write(0x01);
Wire.write(0xA0); //Règle un gain de 5
Wire.endTransmission();
}
// === Fonction qui lit le module boussole (registre d'un des 3 axes, retourne 16 bits)
int HMC5803L_Read(byte Axis)
{
int Result;
/* Initiate a single measurement */
Wire.beginTransmission(HMC5803L_Address);
Wire.write(0x02);
Wire.write(0x01);
Wire.endTransmission();
delay(6);
/* Move modules the resiger pointer to one of the axis data registers */
Wire.beginTransmission(HMC5803L_Address);
Wire.write(Axis);
Wire.endTransmission();
/* Read the data from registers (there are two 8 bit registers for each axis) */
Wire.requestFrom(HMC5803L_Address, 2);
Result = Wire.read() << 8;
Result |= Wire.read();
return Result;
}