Salut à tous,
Je propose à votre sagacité le problème suivant :
Le projet est de lier en Bluetooth et dans les 2 sens (1 PC et 1 Arduino UNO R3).
Dans le sens PC --> Arduino:
- Commander 3 relais (3 leds pour l'essai)
Dans le sens Arduino --> PC:
- Obtenir une température sur le moniteur série
- Lire le retour d'un capteur PIR (envoi d'un signal HIGH)
- Lire le retour d'un autre capteur (indéterminé pour l'instant) mais susceptible d'envoyer un signal LOW
Le code fonctionne mais les relevés de température sont perturbés dès que les Leds sont allumées.
Les relevés redeviennent corrects quelque temps après l'extinction des Leds.
Le fait d'alimenter le LM35 par une source externe n'améliore pas.
A part le problème de valeur de température, le système avec ou sans le XBee Bluetooth HC-06 est fonctionnel dans les 2 sens.
Ci-joint le schéma Fritzing, le code et copie d'écran du moniteur.
Je sèche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 char saisie; boolean capteur_1_state = 1; // cas capteur PULL_UP au repos boolean capteur_2_state = 0; // cas capteur PULL_DOWN au repos float tension = 5.0; // tension de service pour LM35 capteur temperature float temperature; void setup() { pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); // inter pinMode(7,INPUT_PULLUP); // cas capteur PULL_UP pinMode(5,INPUT); // cas capteur PULL_DOWN Serial.begin(9600); //capteursState(); } void loop() { float LM35value = analogRead(A0); temperature = (LM35value / 1023) * tension * 100; //temperature = LM35value * tension / 1023.0 * 100.0; delay(10); if (digitalRead(7) != capteur_1_state ) { // cas capteur PULL_UP capteur_1_state = digitalRead(7); capteursState(); delay(10); } if (digitalRead(5) != capteur_2_state ) { // cas capteur PULL_DOWN capteur_2_state = digitalRead(5); capteursState(); delay(10); } saisie=Serial.read(); if (saisie == 'r') capteursState(); // interrogation sans modif if (saisie == 'a' || saisie == 'b' || saisie == 'c') { digitalWrite(int(saisie)-87,abs(digitalRead(int(saisie)-87)-1)); // la ligne ci-dessus inverse l'etat du pin concerné. Serial.print(" Capteur en Pin "); Serial.print(int(saisie)-87); Serial.print(" ( "); Serial.print(char(saisie)); Serial.print(" ) "); Serial.print(" passe sur "); if (digitalRead(int(saisie)-87)==1) Serial.println(" ON "); else Serial.println(" OFF "); delay(10); capteursState(); } while(Serial.available()) Serial.read();// vide le buffer delay(500); } void relais(){ /* le code ASCII de 'a' est 97, 'b' 98 et 'c' 99 donc * le code ASCII moins 87 donne le N° pin concerné. */ digitalWrite(int(saisie)-87,HIGH); delay(25); digitalWrite(int(saisie)-87,LOW); delay(25); } void capteursState(){ Serial.println(" Etat des capteurs: ('r' pour relire)"); Serial.print(" Interrupteur a := "); Serial.println((digitalRead(10)==1)?"ON":"OFF"); Serial.print(" Interrupteur b := "); Serial.println((digitalRead(11)==1)?"ON":"OFF"); Serial.print(" Interrupteur c := "); Serial.println((digitalRead(12)==1)?"ON":"OFF"); Serial.print(" Capteur Digital d := "); Serial.println(digitalRead(7)); Serial.print(" Capteur Digital e := "); Serial.println(digitalRead(5)); Serial.print(" temperature en degres := "); Serial.println(temperature); // Serial.println(analogRead(A0)); // pour controle Serial.println(); }
XBeeBluetooth_temp.zip
Partager