LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

STM32Butterfly: współpraca z 3-osiowym czujnikiem przyspieszenia MEMS (LIS35D)

Do odczytu wartości przyspieszeń służy poniższa funkcja:

void LIS35_GetPosition(signed char * x, signed char * y, signed char * z)
{
	SPI_CS_Enable();
	SPI_Transmit(LIS35_READ|LIS35_ADDR_INC|LIS35_REG_OUTX);
	*x=SPI_Receive();
	SPI_Receive();
	*y=SPI_Receive();
	SPI_Receive();
	*z=SPI_Receive();
	SPI_CS_Disable();
}

Program główny

Aplikacja umożliwia wyświetlenie wartości przyspieszeń na dwa sposoby. Pierwsza wersja wyświetla trzy paski, których długość jest proporcjonalna do odczytanego przyspieszenia. Paski rysowane są tylko w przypadku, gdy któraś z wartości przyspieszenia różni się o co najmniej 3 od poprzedniej wartości, dzięki temu unikamy migotania spowodowanego częstym odrysowywaniem pasków.

 

 

	while(1)
	{
		// Read KAmodMEMS orientation
		LIS35_GetPosition(&x, &y, &z);
		
		
		if (abs(xo - x) > 3 || abs(yo - y) > 3 || abs(zo - z) > 3)
		{
			DrawBar(x, 0, 20, 0x3);
			DrawBar(y, 40, 60, 0x1C);
			DrawBar(z, 80, 100, 0xE0);
			xo = x; yo = y; zo = z;
		}	
	}

Druga wersja wyświetla siatkę sześcianu, sześcian jest obrócony w trzech osiach o kąty proporcjonalne do odczytanych przyspieszeń.

 

 

	while(1)
	{
		// Read KAmodMEMS orientation
		LIS35_GetPosition(&x, &y, &z);
	
		// If MEMS moved then redraw cube
		if (abs(xo - x) > 3 || abs(yo - y) > 3 || abs(zo - z) > 3)
		{
			// Erase previous cube
			DrawCube(xo, yo, zo, 0x0);

			// Draw new cube
			DrawCube(x, y, z, 0xFF);

			// Store old orientation
			xo = x; yo = y; zo = z;
		}
	}