Commit 664f7f67f90dbf746e282c3fcdf6f5d2929cfac1

Authored by aknockae
1 parent fb352dd1

programme coté capteur terminé avec implémentation du capteur de luminosité

Showing 1 changed file with 47 additions and 47 deletions   Show diff stats
code_arduino/serialArduino/serialArduino.ino
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 BSD license, all text above must be included in any redistribution 15 BSD license, all text above must be included in any redistribution
16 ***************************************************************************/ 16 ***************************************************************************/
17 17
18 -byte requestBytes[3]; // for incoming serial data 18 +byte requestBytes[3]; // for incoming xBee data
19 byte answerBytes[3]; 19 byte answerBytes[3];
20 20
21 21
@@ -23,6 +23,7 @@ byte answerBytes[3]; @@ -23,6 +23,7 @@ byte answerBytes[3];
23 #include <SPI.h> 23 #include <SPI.h>
24 #include <Adafruit_Sensor.h> 24 #include <Adafruit_Sensor.h>
25 #include <Adafruit_BME280.h> 25 #include <Adafruit_BME280.h>
  26 +#include <SoftwareSerial.h>
26 27
27 #define BME_SCK 13 28 #define BME_SCK 13
28 #define BME_MISO 12 29 #define BME_MISO 12
@@ -33,10 +34,21 @@ byte answerBytes[3]; @@ -33,10 +34,21 @@ byte answerBytes[3];
33 //Adafruit_BME280 bme(BME_CS); // hardware SPI 34 //Adafruit_BME280 bme(BME_CS); // hardware SPI
34 Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI 35 Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
35 36
36 -unsigned long delayTime; 37 +//on crée la liaison xBee
  38 +
  39 +SoftwareSerial xBee(2, 3);
  40 +
  41 +
  42 +int luxPin = A0;
  43 +float rawRange = 1024;
  44 +float logRange = 5.0;
37 45
38 void setup() { 46 void setup() {
39 - Serial.begin(9600); 47 + xBee.begin(9600);
  48 + analogReference(EXTERNAL);
  49 + char requestBytes[3];
  50 + //tableau d'octets contenant les données
  51 + byte answerBytes[4];
40 bme.begin(); 52 bme.begin();
41 } 53 }
42 54
@@ -44,60 +56,29 @@ void setup() { @@ -44,60 +56,29 @@ void setup() {
44 void loop() { 56 void loop() {
45 57
46 58
47 - if (Serial.available() <= 3 && Serial.available() >= 1 ) {  
48 - Serial.readBytes(requestBytes,3); 59 + if (xBee.available() <= 3 && xBee.available() >= 1 ) {
  60 + xBee.readBytes(requestBytes,3);
49 if(requestBytes[0] == 'G' && requestBytes[1] == 'E' && requestBytes[2] == 'T') //Si 3 octets correspondant à G,E et T sont envoyé on envoie les données météo 61 if(requestBytes[0] == 'G' && requestBytes[1] == 'E' && requestBytes[2] == 'T') //Si 3 octets correspondant à G,E et T sont envoyé on envoie les données météo
50 { 62 {
51 //on charge les donnée dans la chaîne de bytes d'envoi (modélisé par un tableau) 63 //on charge les donnée dans la chaîne de bytes d'envoi (modélisé par un tableau)
  64 +
52 answerBytes[0] = pressureToByte(bme.readPressure()); 65 answerBytes[0] = pressureToByte(bme.readPressure());
53 answerBytes[1] = tempToByte(bme.readTemperature()); 66 answerBytes[1] = tempToByte(bme.readTemperature());
54 answerBytes[2] = humidityToByte(bme.readHumidity()); 67 answerBytes[2] = humidityToByte(bme.readHumidity());
55 -  
56 - Serial.write(answerBytes,3);  
57 - /*Serial.println(answerBytes[0]+845,DEC);  
58 - Serial.println(answerBytes[1],DEC);  
59 - Serial.println(answerBytes[2],DEC);*/ 68 + answerBytes[3] = luxToByte(getLux());
  69 +
60 70
  71 + //On envoie le buffer constituée des 4 donnée
  72 + xBee.write(answerBytes,4);
  73 +
  74 + //on vide le buffer série pour éviter un décalage des requêtes
  75 + while(xBee.available() > 0)
  76 + xBee.read();
61 } 77 }
62 } 78 }
63 // printValues(); 79 // printValues();
64 } 80 }
65 81
66 -  
67 -void printValues() {  
68 - Serial.print("Temperature = ");  
69 - Serial.print(bme.readTemperature());  
70 - Serial.println(" *C");  
71 -  
72 - Serial.print("Pressure = ");  
73 -  
74 - Serial.print(bme.readPressure() / 100.0F);  
75 - Serial.println(" hPa");  
76 -  
77 - Serial.print("Approx. Altitude = ");  
78 - // Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));  
79 - Serial.println(" m");  
80 -  
81 - Serial.print("Humidity = ");  
82 - Serial.print(bme.readHumidity());  
83 - Serial.println(" %");  
84 -  
85 - Serial.println(pressureToByte(bme.readPressure())+845);  
86 - Serial.println(tempToByte(bme.readTemperature()));  
87 - Serial.println(humidityToByte(bme.readHumidity()));  
88 -  
89 - // Serial.println(sizeof(bme.readPressure()));  
90 - // Serial.println(sizeof(int));  
91 - //sizeof(bme.readTemperature());  
92 - //Serial.println(500.9);  
93 - //Serial.println(arrondiSuperieur(500.9));  
94 - delay(1000);  
95 -  
96 -  
97 -  
98 - Serial.println("*******************************************");  
99 -}  
100 -  
101 int arrondiSuperieur(float val) 82 int arrondiSuperieur(float val)
102 { 83 {
103 int newVal = 0; 84 int newVal = 0;
@@ -110,9 +91,11 @@ int arrondiSuperieur(float val) @@ -110,9 +91,11 @@ int arrondiSuperieur(float val)
110 return newVal; 91 return newVal;
111 } 92 }
112 93
113 -int pressureToByte(float pressure) 94 +//Ces fonctions convertissent chaque donnée en un seul octet
  95 +
  96 +byte pressureToByte(float pressure)
114 { 97 {
115 - return (int)(arrondiSuperieur(pressure/100.0)-845); 98 + return (byte)(arrondiSuperieur(pressure/100.0)-845);
116 } 99 }
117 100
118 byte tempToByte(float temp) 101 byte tempToByte(float temp)
@@ -125,4 +108,21 @@ byte humidityToByte(float humidity) @@ -125,4 +108,21 @@ byte humidityToByte(float humidity)
125 return (byte)arrondiSuperieur(humidity); 108 return (byte)arrondiSuperieur(humidity);
126 } 109 }
127 110
  111 +byte luxToByte(float lux)
  112 +{
  113 + return (byte)(lux*255/10000);
  114 +}
  115 +
  116 +//https://cdn-learn.adafruit.com/downloads/pdf/adafruit-ga1a12s202-log-scale-analog-light-sensor.pdf
  117 +float getLux()
  118 +{
  119 + int raw = analogRead(luxPin);
  120 + float logLux = raw * logRange / rawRange;
  121 + float res = pow(10, logLux);
  122 + if(res > 10000.0)
  123 + {
  124 + res = 10000.0;
  125 + }
  126 + return res;
  127 +}
128 128