Ultraschall und Dunkles Licht? Ist doch Licht unabhänig.

Ich hab die Messung und die Behaviour in 2 verschiedene Header dateien.

Ich denke das da dadurch etwas bei der Übergabe schief geht.



Main Code hier
Code:
#include "RP6RobotBaseLib.h"
#include "SRF.h" 
#include "Verhalten.h"

int main (void)
{ uint8_t button = 0;

	initRobotBase();
	
	setLEDs(0b111111);
	mSleep(2500);
	setLEDs(0b100100); 

	I2CTWI_initMaster(100);
	I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
		
	BUMPERS_setStateChangedHandler(bumpersStateChanged);
	
	ACS_setStateChangedHandler(acsStateChanged);
	powerON();

	startStopwatch1();
	setACSPwrMed();

	while(true) 
	{		
		task_RP6System();
		task_SRF();
		task_I2CTWI();
		behaviourController();	
	}
	
	return 0;
}
SRF Code
Code:
#ifndef SRF_H
#define SRF_H

#include "RP6RobotBaseLib.h" 	

#include "RP6I2CmasterTWI.h"     // Include the I²C-Bus Slave Library

/*****************************************************************************/
// SRF08/SRF10:

#define SRF_ADR  0xE2



/*****************************************************************************/
// I2C Event handlers:


// I2C Data request IDs:
#define MEASURE_US_LOW 	0
#define MEASURE_US_HIGH 1

// The measured distance:
uint16_t distance;

void I2C_requestedDataReady(uint8_t dataRequestID)
{
	uint8_t messageBuf[8];
	static uint8_t dist_tmp;
	switch(dataRequestID)
	{
		case MEASURE_US_HIGH: // High data register
		    // get received data ...
			I2CTWI_getReceivedData(messageBuf, 2);
			dist_tmp = (messageBuf[0]);
			// ... and request low data byte:
			I2CTWI_transmitByte(SRF_ADR, 3);
			I2CTWI_requestDataFromDevice(SRF_ADR, MEASURE_US_LOW, 1);
		break;
		case MEASURE_US_LOW: // low data byte:
			I2CTWI_getReceivedData(messageBuf, 2);
			distance = messageBuf[0] + (dist_tmp << 8);
			// ----------------------------------
			// Output measured distance:
			//writeString_P("Distance: ");
			//writeInteger(distance, DEC);
			//writeString_P(" cm | ");
			// show a simple text bargraph:
			//uint16_t dist_count;
			//for(dist_count = distance; dist_count > 4; dist_count-=2)
			//	writeChar('#');
			//writeChar('\n');
			// ... of course you can also use "distance" as a normal
			// variable everywhere else in your program! 
			// ----------------------------------
		break;
	}
}

/*
 * The SRF needs some time to perform the measurements - here we use Stopwatch1
 * to time the measurement actions.
 */
void task_SRF(void)
{
	static uint8_t measureInProgress = false;
	if(!measureInProgress) // Start measurement ONCE only
	{
		if(TWI_operation == I2CTWI_NO_OPERATION) // If there is no request in progress...
		{
			I2CTWI_transmit2Bytes(SRF_ADR, 0, 81); // 81 means return distance in cm
			measureInProgress = true;
			setStopwatch1(0);
		}
	}
	else if(getStopwatch1() > 70)  // 70ms (measurement delay)
	{
		I2CTWI_transmitByte(SRF_ADR, 2); // range register high byte
		I2CTWI_requestDataFromDevice(SRF_ADR, MEASURE_US_HIGH, 1); // receive it
		measureInProgress = false; 	// allow to start new measurement
		setStopwatch1(0);
	}
}

#endif