Hallo,
Ich habe hier einen Sensor, den ich per software request antriggern muss, damit er antwortet. Dazu muss ein byte mit dem request, sowie eine byte mit der passenden checksumme übertragen werden.
Ich versuche und versuche, aber ich bekomme keine Antwort vom Sensor.
Jetzt will ich mal nachfragen, ob ich das überhaupt richtig übertrage:
Der Sensor verlangt als request: 0x01
Die checksumme dazu ist: 0xFE, also der Einerkomplement des requests.
Ich habe jetzt lso deklariert:
byte byte0 = 1;
byte byte1;
byte1 = ~byte0;
Serial.print(byte0, BYTE);
Serial.print(byte1, BYTE);
Leider kommt aber nichts vom Sensor zurück.
Ist da was falsch programmiert?
Danke.
Achso, hier mal der ganze Code zum Testen:
// set Baudrate here
#define baudrate 38400
int inByte;
boolean timeout = false;
int i = 0;
// Two bytes to send for software request. Byte0 is the databyte,
// byte1 is the checksum
// Databyte 0x01 means, gyro will return latest data
// Checksum is calculated as one's complement of all bytes before.
// This case only databyte byte0.
byte byte0 = 1;
byte byte1;
void setup() {
// Setup an led output, so we can see if anything happens
pinMode(13, OUTPUT);
// Baudrate debug port
Serial.begin(baudrate);
// Baudrate gyro
Serial1.begin(baudrate);
delay(2000);
}
void loop() {
// First turn on led
digitalWrite(13, HIGH);
// Generate checksum byte from databyte. ~byte0 means bitwise
// NOT byte0
byte1 = ~byte0;
// Debug info on computers COM port
Serial.println("\r\n\r\n");
Serial.println("+++++++++++++++++ Test begin +++++++++++++++++++");
Serial.println("Test conditions are:");
Serial.print("Baudrate: ");
Serial.println( baudrate );
Serial.print("Sending Bytes for Software Trigger: ");
// Show both bytes on debug channel to be sure the correct
// bytes are transmitted
Serial.print( byte0, BYTE);
Serial.print( byte1, BYTE );
Serial.println("Timeout @ each test: 100ms");
Serial.println("Receiving '-1' means: Receiver Buffer Empty.");
Serial.println("\r\nSending Bytes now.");
// Send databyte and checksum to gyro
Serial1.print(byte0, BYTE);
Serial1.print(byte1, BYTE);
// Wait for gyro to reply
Serial.println("Listening...\r\n");
// Start a timeout timer
unsigned long int stime = millis();
// Unless timeout is reached, readout serial buffer connectet
// to gyro
while ( !timeout ){
inByte = Serial1.read();
Serial.print(inByte);
// Timeout reached, print results to debug port
if (millis() >= stime + 100){
timeout = true;
Serial.print("\r\nTest performed w/ Baudrate: ");
Serial.println(baudrate);
Serial.println("Bytes sent: ");
Serial.println(byte0, HEX);
Serial.println(byte1, HEX);
Serial.print("Testcycle: ");
Serial.println(++i);
}
// Buffer returns '-1' when empty, so -1 means gyro did not reply
if ( inByte == -1 ){
Serial.println("Test failed!");
}
// If anythiny else would be received, that would be
// called successsful at first
else Serial.println("Test succsessful!");
}
Serial.println("\r\n\r\n");
Serial.println("+++++++++++++++ Test end +++++++++++++++++++++");
delay(1000);
// Debug info end, turn off the lights
digitalWrite(13, LOW);
delay(1000);
timeout = false;
}