Hi all, today I'm testing a formaldehyde sensor with my UDOO NEO. This is the sensor (https://www.seeed.cc/project_detail.html?id=380) and at the same page I found a working Arduino code. Now, that uses softwareSerial but I think our Serial0 is fine... His pinout: VCC -> (Arduino) 3V3 GND -> (Arduino) GND TX -> (Arduino) Pin 8 RX -> (Arduino) Pin 12 My pinout: VCC -> UDOO_3V3 GND -> UDOO_GND TX -> UART5_RX RX -> UART5_TX His setup (part of it): Code: SoftwareSerial airSerial(8, 12); // RX, TX ... Serial.begin(9600); airSerial.begin(9600); In my setup I used Serial0 instead of airSerial. Then, according to the chinese datasheet (sigh!), if you send 0x42, 0x4d, 0x01, 0x00, 0x00, 0x00, 0x90, the sensor replies with the formaldehyde value and other data. So this is his request part in the loop: Code: for (int i=0;i<7;i++) { airSerial.write(testCmd[i]); } // response handle int pos = 0; for (int i=0;i<20;i++) testResponse[i]=0x00; // clean buffer while (airSerial.available() && pos < 20) { testResponse[pos] = airSerial.read(); if (pos == 0 && testResponse[pos] != 0x42) { testResponse[pos] = 0; // clear the buffer } else if (pos == 1 && testResponse[pos] != 0x4d) { testResponse[0] = testResponse[1] = 0; pos = 0; } else { pos++; } } Basically it writes the bytes and then if the Serial is available, it reads 20 byte. The starting bytes are 0x42 and 0x4d. So I changed it a bit with: Code: char testCmd[7] = {0x42, 0x4d, 0x01, 0x00, 0x00, 0x00, 0x90}; void loop() { byte b=0; for (int i=0;i<7;i++) { Serial0.write(testCmd[i]); Serial0.flush(); //According to https://www.udoo.org/forum/threads/issue-with-serial0-write-0.5135/ I need to flush if I want to send 0x00 } // response handle int pos = 0; for (int i=0;i<20;i++) testResponse[i]=0x00; // clean buffer //PUT this control because Serial0.available returns false while(b != 0x42){ Serial.println(b, HEX); b = Serial0.read(); delay(100); } Eventually the code loops without hanging but I'm not reading values from the sensors except for 0xFF. Any ideas? :/
I think you have an issue with the known bug writing 0x00b to serial. I believe a Serial0.flush could solve this for Serial0 (but not for normal Serial). Edit: I see now you already did that......
Exactly Without flush() the sketch hangs. In my case the sketch sends the bytes but the sensor doesn't reply.
I tried them with an Arduino UNO too and they don't work. Probably they're broken..... I will move to this: https://item.taobao.com/item.htm?sp...000&pvid=0e50f87d-da50-4dad-a6e5-861d6a3e2e06