Commit 664f7f67f90dbf746e282c3fcdf6f5d2929cfac1
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 |