Bonjour à tous,
J'ai besoin d'enregistrer des températures sur une carte SD. Je vais utiliser une DS18b20. J'ai donc téléchargé la librairie OneWire. Il y a plusieurs bout de code sur le net, j'en ai essayé plusieurs mais j'ai une erreur de compilation à chaque fois.
J'essaye donc le fichier exemple livré avec la librairie, mais même problème.
J'ai raté quelque chose ?
#include <OneWire.h>
/* DS18S20 Temperature chip i/o */
OneWire ds(10); // on pin 10
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print("No more addresses.\n");
ds.reset_search();
delay(250);
return;
}
Serial.print("R=");
for( i = 0; i < 8; i++) {
Serial.print(addr[i], HEX);
Serial.print(" ");
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.print("CRC is not valid!\n");
return;
}
if ( addr[0] != 0x10) {
Serial.print("Device is not a DS18S20 family device.\n");
return;
}
// The DallasTemperature library can do all this work for you!
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print("P=");
Serial.print(present,HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print( OneWire::crc8( data, 8), HEX);
Serial.println();
}
La librairie OneWire provient du site Arduino directement.
Si quelqu'un à une idée...
Le code compile sans erreur chez moi.
Librairie mal installée?
Quel message d'erreur?
Donc c'est chez moi qu'il y a un problème. J'ai essayé sur un mac et un ordinateur équipé windows, j'ai le même problème.
voilà le message d'erreur un peu long :
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp: In constructor 'OneWire::OneWire(uint8_t)':
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:93: error: 'digitalPinToBitMask' was not declared in this scope
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:94: error: 'digitalPinToPort' was not declared in this scope
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:94: error: 'portInputRegister' was not declared in this scope
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp: In member function 'uint8_t OneWire::reset()':
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:127: error: 'delayMicroseconds' was not declared in this scope
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:134: error: 'delayMicroseconds' was not declared in this scope
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp: In member function 'void OneWire::write_bit(uint8_t)':
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:157: error: 'delayMicroseconds' was not declared in this scope
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:165: error: 'delayMicroseconds' was not declared in this scope
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp: In member function 'uint8_t OneWire::read_bit()':
/Users/gunsman76/Documents/Arduino/libraries/OneWire/OneWire.cpp:185: error: 'delayMicroseconds' was not declared in this scope
Je viens d'essayer une autre librairie (la même pourtant mais trouvé sur un autre site) et là ça compile sans problème.
Merci pour votre aide, reste à faire les essais.
Je pense que celle que tu utilisais était un peu ancienne. Les fonctions qui manquaient sont des fonctions de base du core arduino. Je pense à une librairie qui ne gérerait pas correctement l'IDE >1.00
Oui c'est très certainement le problème. Enfin c'est résolu.
Et mon petit montage fonctionne !