arduino aide
Posté : jeu. 3 avr. 2014 11:42
Bonjour, nous sommes actuellement élèves en terminal, et nous rencontrons un problème avec un code sur Arduino. Nous utilisons un capteur de température et humidité nommé "Sensirion Sht7x" et un capteur CO2 nommé T6615
C'est avec le capteur température et humidité que nous avons une complication.
En effet, dans notre programme, nous avons instauré des librairies qui sont : "Sensirion.h" pour notre capteur et "ColorLCDShield.h" pour afficher les données en local sur un écran LCD (Shield Arduino)
Voici notre code complet :
#include ColorLCDShield.h
#include Sensirion.h
#define BACKGROUND BLACK
#define C_COLOR RED
#define H_COLOR BLUE
#define M_COLOR GREEN
#define S_COLOR YELLOW
#define W_COLOR WHITE
LCDShield lcd;
int recu;
byte envoye;
int test;
char affichageco2 [16];
char affichagetemperature [16];
char affichagehumidite [16];
char mystring[] = "CO2";
char mystring1[] = "Temperature";
char mystring2[] = "Humidite";
char assignationresult;
//Temperature
const uint8_t dataPin = 9;
const uint8_t sclkPin = 8;
const uint8_t ledPin = 13;
const uint32_t TRHSTEP = 5000UL;
const uint32_t BLINKSTEP = 250UL;
Sensirion sht = Sensirion(dataPin, sclkPin);
uint16_t rawData;
float temperature;
float humidity;
float dewpoint;
byte ledState = 0;
byte measActive = false;
byte measType = TEMP;
unsigned long trhMillis = 0;
unsigned long blinkMillis = 0;
void setup()
{
Serial.begin(9600);
lcd.init(PHILIPS);
lcd.contrast(0);
lcd.clear(BACKGROUND);
//Temperature
pinMode(ledPin, OUTPUT);
delay(15);
sht.measTemp(rawData);
temperature = sht.calcTemp(rawData);
sht.measHumi(rawData);
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
//
afficheText();
}
void loop()
{
envoye=0xFF;
Serial.write(envoye);
envoye=0xFE;
Serial.write(envoye);
envoye=0x02;
Serial.write(envoye);
envoye=0x02;
Serial.write(envoye);
envoye=0x03;
Serial.write(envoye);
assignationresult = Serial.read();
assignationresult = Serial.read();
assignationresult = Serial.read();
assignationresult = Serial.read();
sprintf (affichageco2, "%d", assignationresult);
assignationresult = Serial.read();
sprintf (affichageco2, "%d", assignationresult);
//////Temperature
unsigned long curMillis = millis();
// Rapidly blink LED. Blocking calls take too long to allow this.
if (curMillis - blinkMillis = BLINKSTEP) { // Time to toggle the LED state?
ledState ^= 1;
digitalWrite(ledPin, ledState);
blinkMillis = curMillis;
}
// Demonstrate non-blocking calls
if (curMillis - trhMillis = TRHSTEP) {
measActive = true;
measType = TEMP;
sht.meas(TEMP, rawData, NONBLOCK);
trhMillis = curMillis;
}
if (measActive sht.measRdy()) {
if (measType == TEMP) {
measType = HUMI;
temperature = sht.calcTemp(rawData);
sht.meas(HUMI, rawData, NONBLOCK);
} else {
measActive = false;
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
}
//
afficheText();
delay(1000);
}
//Temperature
void logData() {
Serial.print("Temperature = "); Serial.print(temperature);
Serial.print(" C, Humidity = "); Serial.print(humidity);
Serial.print(" %, Dewpoint = "); Serial.print(dewpoint);
Serial.println(" C");
}
//
void afficheText()
{
lcd.setStr(mystring, 0, 50, W_COLOR, BACKGROUND);
lcd.setStr(affichageco2, 20, 50, W_COLOR, BACKGROUND);
lcd.setStr(mystring1, 40, 22, W_COLOR, BACKGROUND);
lcd.setStr(affichagetemperature, 60, 50, W_COLOR, BACKGROUND);
lcd.setStr(mystring2, 80, 32, W_COLOR, BACKGROUND);
lcd.setStr(affichagehumidite, 100, 50, W_COLOR, BACKGROUND);
}
C'est à cause de cette ligne que nous sommes bloqués
"Sensirion sht = Sensirion(dataPin, sclkPin);"
Je vous explique, lorsque nous mettons cette ligne, il n'y a aucune erreur, seulement l'écran LCD ne s'allume plus mais nous pouvons voir nos données dans le moniteur directement sur Arduino. Quand nous enlevons toutes les lignes concernant le capteur de température et humidité l'écran s'allume mais il n'y a pas de données malheureusement.
Merci de bien vouloir nous répondre et peut-être nous aider et nous donner une solution à notre problème.
Après quelques recherches, nous pensons que cela vient des bibliothèques utilisées qui rentrent en conflit (ColorLCDShield.h et Sensirion.h)
C'est avec le capteur température et humidité que nous avons une complication.
En effet, dans notre programme, nous avons instauré des librairies qui sont : "Sensirion.h" pour notre capteur et "ColorLCDShield.h" pour afficher les données en local sur un écran LCD (Shield Arduino)
Voici notre code complet :
#include ColorLCDShield.h
#include Sensirion.h
#define BACKGROUND BLACK
#define C_COLOR RED
#define H_COLOR BLUE
#define M_COLOR GREEN
#define S_COLOR YELLOW
#define W_COLOR WHITE
LCDShield lcd;
int recu;
byte envoye;
int test;
char affichageco2 [16];
char affichagetemperature [16];
char affichagehumidite [16];
char mystring[] = "CO2";
char mystring1[] = "Temperature";
char mystring2[] = "Humidite";
char assignationresult;
//Temperature
const uint8_t dataPin = 9;
const uint8_t sclkPin = 8;
const uint8_t ledPin = 13;
const uint32_t TRHSTEP = 5000UL;
const uint32_t BLINKSTEP = 250UL;
Sensirion sht = Sensirion(dataPin, sclkPin);
uint16_t rawData;
float temperature;
float humidity;
float dewpoint;
byte ledState = 0;
byte measActive = false;
byte measType = TEMP;
unsigned long trhMillis = 0;
unsigned long blinkMillis = 0;
void setup()
{
Serial.begin(9600);
lcd.init(PHILIPS);
lcd.contrast(0);
lcd.clear(BACKGROUND);
//Temperature
pinMode(ledPin, OUTPUT);
delay(15);
sht.measTemp(rawData);
temperature = sht.calcTemp(rawData);
sht.measHumi(rawData);
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
//
afficheText();
}
void loop()
{
envoye=0xFF;
Serial.write(envoye);
envoye=0xFE;
Serial.write(envoye);
envoye=0x02;
Serial.write(envoye);
envoye=0x02;
Serial.write(envoye);
envoye=0x03;
Serial.write(envoye);
assignationresult = Serial.read();
assignationresult = Serial.read();
assignationresult = Serial.read();
assignationresult = Serial.read();
sprintf (affichageco2, "%d", assignationresult);
assignationresult = Serial.read();
sprintf (affichageco2, "%d", assignationresult);
//////Temperature
unsigned long curMillis = millis();
// Rapidly blink LED. Blocking calls take too long to allow this.
if (curMillis - blinkMillis = BLINKSTEP) { // Time to toggle the LED state?
ledState ^= 1;
digitalWrite(ledPin, ledState);
blinkMillis = curMillis;
}
// Demonstrate non-blocking calls
if (curMillis - trhMillis = TRHSTEP) {
measActive = true;
measType = TEMP;
sht.meas(TEMP, rawData, NONBLOCK);
trhMillis = curMillis;
}
if (measActive sht.measRdy()) {
if (measType == TEMP) {
measType = HUMI;
temperature = sht.calcTemp(rawData);
sht.meas(HUMI, rawData, NONBLOCK);
} else {
measActive = false;
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
}
//
afficheText();
delay(1000);
}
//Temperature
void logData() {
Serial.print("Temperature = "); Serial.print(temperature);
Serial.print(" C, Humidity = "); Serial.print(humidity);
Serial.print(" %, Dewpoint = "); Serial.print(dewpoint);
Serial.println(" C");
}
//
void afficheText()
{
lcd.setStr(mystring, 0, 50, W_COLOR, BACKGROUND);
lcd.setStr(affichageco2, 20, 50, W_COLOR, BACKGROUND);
lcd.setStr(mystring1, 40, 22, W_COLOR, BACKGROUND);
lcd.setStr(affichagetemperature, 60, 50, W_COLOR, BACKGROUND);
lcd.setStr(mystring2, 80, 32, W_COLOR, BACKGROUND);
lcd.setStr(affichagehumidite, 100, 50, W_COLOR, BACKGROUND);
}
C'est à cause de cette ligne que nous sommes bloqués
"Sensirion sht = Sensirion(dataPin, sclkPin);"
Je vous explique, lorsque nous mettons cette ligne, il n'y a aucune erreur, seulement l'écran LCD ne s'allume plus mais nous pouvons voir nos données dans le moniteur directement sur Arduino. Quand nous enlevons toutes les lignes concernant le capteur de température et humidité l'écran s'allume mais il n'y a pas de données malheureusement.
Merci de bien vouloir nous répondre et peut-être nous aider et nous donner une solution à notre problème.
Après quelques recherches, nous pensons que cela vient des bibliothèques utilisées qui rentrent en conflit (ColorLCDShield.h et Sensirion.h)