librairie DHT fontionne sur arduino uno mais pas sur genuino mkr 1000

bonjour à tous,

Je suis novice dans la monde arduino et je sèche depuis deux jours sur un problème surement basique.
J'ai modifié un code pour pouvoir allumer ou eteindre une ventalition grace à un relais en fonction de la temperture et du niveau d'humiditée.

Tout fonction á merveille sur un arduino uno.

Je désire maintenant telecharger le programme sur un mkr1000 pour pouvoir regler a distance via Wifi, les conditions de temperature et d'humidité qui declencheront la ventilation.

voic le code :

#include <LiquidCrystal.h>
#include <dht.h>

dht DHT;

#define DHT11_PIN 2

// the output pin of the LM35 temperature sensor
int temphum = 3;
int lcdRSPin = 8;
int lcdEPin = 9;
int lcdD4Pin = 4;
int lcdD5Pin = 5;
int lcdD6Pin = 6;
int lcdD7Pin = 7;
LiquidCrystal lcd(lcdRSPin, lcdEPin,
                  lcdD4Pin, lcdD5Pin, lcdD6Pin, lcdD7Pin);

void setup()
{
    Serial.begin(9600);
    lcd.begin(16, 2);
    pinMode(temphum, OUTPUT);
}

void loop()
{ 
  int chk = DHT.read11(DHT11_PIN);
   
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(DHT.temperature);
    lcd.print("C");
    lcd.setCursor(0,1);
    lcd.print("Hum: ");
    lcd.print(DHT.humidity);
    lcd.print("%");
    Serial.print("Temp: ");
    Serial.print(DHT.temperature);
    Serial.print("C");
    Serial.print("Hum: ");
    Serial.print(DHT.humidity);
    Serial.print("%");
    // wait 1s before reading the temperature again
if (DHT.humidity >35.00 && DHT.temperature >3)
    { 
      digitalWrite(temphum, HIGH);
    }
      else
      {
      digitalWrite(temphum, LOW);
      }
    
     delay(60000);
}

Le code est compilé et téléchargé sans probleme sur le uno et tout fonctionne tres bien.

Voici le code d'erreur que j'obtiens lorsque je le vérifie en sélectionnant le mkr1000 comme type de carte :

In file included from C:\Users\Geoffroy GARNIER\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.12\cores\arduino/delay.h:27:0,

from C:\Users\Geoffroy GARNIER\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.12\cores\arduino/Arduino.h:81,

from C:\Users\Geoffroy GARNIER\Documents\Arduino\libraries\DHTLib\dht.h:18,

from C:\Users\Geoffroy GARNIER\Documents\Arduino\libraries\DHTLib\dht.cpp:30:

C:\Users\Geoffroy GARNIER\Documents\Arduino\libraries\DHTLib\dht.cpp: In member function 'int dht::_readSensor(uint8_t, uint8_t)':

C:\Users\Geoffroy GARNIER\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.12\variants\mkr1000/variant.h:47:78: error: invalid conversion from 'PortGroup*' to 'uint8_t {aka unsigned char}' [-fpermissive]

#define digitalPinToPort(P) (&(PORT->Group[g_APinDescription[P].ulPort]))

^

C:\Users\Geoffroy GARNIER\Documents\Arduino\libraries\DHTLib\dht.cpp:115:17: note: in expansion of macro 'digitalPinToPort'

uint8_t port = digitalPinToPort(pin);

^

C:\Users\Geoffroy GARNIER\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.12\variants\mkr1000/variant.h:51:41: error: base operand of '->' is not a pointer

#define portInputRegister(port) (&(port->IN.reg))

^

C:\Users\Geoffroy GARNIER\Documents\Arduino\libraries\DHTLib\dht.cpp:116:29: note: in expansion of macro 'portInputRegister'

volatile uint8_t *PIR = portInputRegister(port);

^

Utilisation de la bibliothèque Adafruit_Sensor-master version 1.0.2 dans le dossier: C:\Users\Geoffroy GARNIER\Documents\Arduino\libraries\Adafruit_Sensor-master
Utilisation de la bibliothèque LiquidCrystal version 1.0.5 dans le dossier: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal
Utilisation de la bibliothèque DHTLib prise dans le dossier : C:\Users\Geoffroy GARNIER\Documents\Arduino\libraries\DHTLib (legacy)
exit status 1
Erreur de compilation pour la carte Arduino/Genuino MKR1000

Merci beaucoup pour votre aide !

La carte MKR1000 utilise un processeur ARM. Il semblerait que la librairie ne soit pas adaptée à cette famille de processeur.

@fdufnews
Tu as vu juste, les dernières versions ont été modifiées pour utiliser les registres des avr à la place de digitalRead()

@ggarnier
Peut-tu donner un lien vers la bibliothèque que tu utilises.
Historique de cette bibliothèque :
Les premières versions de cette bibliothèque utilisaient la fonction digitalRead() qui est lente sur micro avr, trop lente pour le DHT qui est un capteur rapide et qui provoquait des erreurs de lecture.
Les dernières versions ont été modifiées pour utiliser les registres du micro avr, d'où l'incompatibilité avec un ARM.

Je pense que des anciennes versions comme chez Adafruit qui utilisent encore digitalRead() pourrait fonctionner avec ta carte.
Le micro étant plus rapide tu ne devrais pas rencontrer d'erreurs de somme de contrôle.

@fdufnews et @68tjs

Merci beaucoup !! Effectivement, après avoir fouillé, j'ai trouvé une version compatible.
Je l'ai trouvé en utilisant le IDE en ligne, qui m'a proposer de télécharger la bibliothèque appropriée !

Merci encore