Sensor setup problem

brickpi-plus

#1

I have a problem with my Brickpi sensor.
Recently, when I use any sensors, BrickPisetup returns 0 (It’s OK), but BrickPiSetupSensors returns -1. So It does not work.
when I try many times, BrickPiSetupSensors sometimes returns 0. And sensors work well. So I don’t think sensor’s breakdown.


#2

What version of the BrickPi are you using?


#3

I have a BrickPi+.
/


#4

Can you share the code you’re running? With a BrickPi+, if you don’t have a pause in between the initiation and the sensor setup, you can cause and error. This could indeed be a dead sensor though.


#5

Here is my code. I used github’s code as it is.

#include <stdio.h> 
#include <math.h> 
#include <time.h> 

#include "tick.h" 
#include "BrickPi.h" 

#include <linux/i2c-dev.h>   
#include <fcntl.h> 

// Compile Using: 
// sudo gcc -o program "EV3 - IR Sensor proximity test.c" -lrt -lm 
// Run the compiled program using: 
// sudo ./program 

//#define DEBUG 
int result,val; 
//#undef DEBUG 
#define IR_PORT         PORT_1                      // Infrared Sensor on Port_1 

int main() { 
  ClearTick(); 

  result = BrickPiSetup(); 
  printf("BrickPiSetup: %d\n", result); 
  if(result)									// Check to see if everything is alive. 
    return 0;									// If not, kill the program. 
  printf("BrickPiSetup Done!\n");				// If so, proceed. 
  BrickPi.Address[0] = 1; 
  BrickPi.Address[1] = 2; 

  BrickPi.SensorType[IR_PORT] = TYPE_SENSOR_EV3_INFRARED_M0;	// Setting SEnsor to mode 0. 
  result = BrickPiSetupSensors();								// Call this to setup the sensors.   
   
  printf("BrickPiSetupSensors: %d\n", result); 					// Print the result of sensor setup. 
  if(!result){ 
    usleep(10000); 
    while(1){ 
      result = BrickPiUpdateValues();			// Update values from the BrickPi. 

      if(!result){ 
      	 val = BrickPi.Sensor[IR_PORT];			// Put values into a variable. 
	     if(val <= 100) 
           printf("Results: %d \n", val );		// Print the value returned.  This is the relative IR sensor, in this example.
      } 
	  //usleep(10000); 
    } 
  } 
  return 0; 
}

#6

Hmm . . . that leaves a question. Can you try modifying the code to have a few sleeps in it between calls? Something like this:

BrickPi.Address[0] = 1; 
BrickPi.Address[1] = 2; 

usleep(10000);

BrickPi.SensorType[IR_PORT] = TYPE_SENSOR_EV3_INFRARED_M0;	// Setting SEnsor to mode 0. 
result = BrickPiSetupSensors();								// Call this to setup the sensors.

I think the calls may be made too rapidly to the BrickPi+, especially if you’re using a newer version of the Raspberry PI.