Czujnik pyłu

Keil uvision, IAR ...
ODPOWIEDZ
stachu
Użytkownik
Posty: 38
Rejestracja: 18 paź 2017, 19:29

Czujnik pyłu

Post autor: stachu » 20 sty 2019, 0:03

Witam serdecznie

Od paru dniu zmagam się z czujnikiem pyłu, chciałbym ulepszyć swoją stacje pogodową.

Walczę z czujnikiem SPS30

Którego dokumentację można zobaczyć tutaj

https://www.sensirion.com/fileadmin/use ... asheet.pdf

Znajduje sobie nagłówek i ładuje dane do buforu dane są ok
po fragmencie kodu

  1.  for (int i = 0; i < 60; i++)
  2.       {
  3.         Serial.print(buff[i], HEX);
  4.       }
  5.       Serial.println();


kiedy chcę konwertować wartości wszystko się sypie i dostaję same zera na wyjściu

Poniżej kod
  1.  
  2. void readme()
  3. {
  4.  
  5.   if (Serial1.read() == 0x7e) //Start with 0x7e
  6.   { if (Serial1.read() == 0) //Address is always 0
  7.     { CMD(Serial1.read());//Command
  8.       errorCode(Serial1.read());//State
  9.       len = Serial1.read(); //Read data length
  10.       int j = 0;
  11.       do {
  12.         buff[j] = Serial1.read();
  13.         j++;
  14.       } while (buff[j - 1] != 0x7e); //read data+checksum to the 0x7e
  15.  
  16.       for (int i = 0; i < 60; i++)
  17.       {
  18.         Serial.print(buff[i], HEX);
  19.       }
  20.       Serial.println();
  21.  
  22.  
  23.       if (len > 0) { //for read procedure
  24.         for (int i = 0; i < (j - 2); i++) { //replace special values and
  25.           if (buff[i] == 0x7d) {
  26.  
  27.             if (buff[i + 1] = 0x5E) {
  28.               buff[i] = 0x7E;
  29.             };
  30.             if (buff[i + 1] = 0x5D) {
  31.               buff[i] = 0x7D;
  32.             };
  33.             if (buff[i + 1] = 0x31) {
  34.               buff[i] = 0x11;
  35.             };
  36.             if (buff[i + 1] = 0x33) {
  37.               buff[i] = 0x13;
  38.             };
  39.  
  40.             for (int c = i + 1; c < (j - 3); c++) {
  41.               buff[c] = buff[c + 1];
  42.             }
  43.           }
  44.         }
  45.         //to float convertion
  46.         for (int i = 0; i < 10; i++) {
  47.           integer = ((buff[4 * i] << 24) | (buff[4 * i + 1] << 16) | (buff[4 * i + 2] << 8) | buff[4 * i + 3]);
  48.           memcpy(&decimal, &integer, sizeof(integer));
  49.           Serial.print(decimal); Serial.print(" ");
  50.         }//show data
  51.       }
  52.       Serial.println();
  53.     }
  54.   }//no troubles
  55.   else
  56.   { Serial.println("Troubles");//is troubles
  57.   }
  58. }
Będę wdzięczny za pomoc bo czujnik ma kilka fajnych bajerów,

Pozdrawiam serdecznie.

edytowałem formatowanie kodu. Nef..

ODPOWIEDZ