hi Dirk,
alle änderungen ausgeführt, beim ersten drücken des buttons 1 stimmt die ausgabe (diesmal dir_neu = 360), beim 2ten drücken immer noch 256...
Code:
#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_OrientationLib.h"
//#include "RP6Control_I2CMasterLib.h"
#include "RP6Control_MultiIOLib.h"
#define I2C_RP6_BASE_ADR 10
uint8_t ch;
char item[12];
char dir[3];
int16_t new_dir; //neue richtung
int16_t old_dir; //gemessene richtung
int16_t temp; //berechnung korrektur richtung
/*
void I2C_requestedDataReady(uint8_t dataRequestID) //macht was?
{
checkRP6Status(dataRequestID);
}
*/
void calculateDir(char* dir, uint16_t heading) //setzt headingwerte grob in himmelsrichtungen um
{
dir[1] = ' ';
dir[2] = '\0';
if ((heading <= 22) || (heading >=338)) dir[0] = 'N';
if ((heading >= 23) && (heading <= 67)) {dir[0] = 'N'; dir[1] = 'E';}
if ((heading >= 68) && (heading <= 112)) dir[0] = 'E';
if ((heading >= 113) && (heading <= 157)) {dir[0] = 'S'; dir[1] = 'E';}
if ((heading >= 158) && (heading <= 202)) dir[0] = 'S';
if ((heading >= 203) && (heading <= 247)) {dir[0] = 'S'; dir[1] = 'W';}
if ((heading >= 248) && (heading <= 292)) dir[0] = 'W';
if ((heading >= 293) && (heading <= 337)) {dir[0] = 'N'; dir[1] = 'W';}
}
void I2C_transmissionError(uint8_t errorState) //gibt I2C fehlermeldungen über LCD aus
{
clearLCD();
writeStringLCD_P("I2C ERROR -->");
setCursorPosLCD(1, 0); // line 2
writeStringLCD_P("TWI STATE: 0x");
writeIntegerLCD(errorState, HEX);
}
/*******************sensorwerte holen*************************/
void sensorwerte_holen(void)
{
intreg2dm = readHDMM01(); // holt sersorwerte
if (!intreg2dm) //daten gültig?
{
normalizeHDMM01(); // daten werden "normalisiert"
heading2dm = headingHDMM01(); // berechnung der headingwerte
}
}
/******************heading auf LCD schreiben**************/
void heading_ausgeben(void)
{
setCursorPosLCD(0, 0); //headingwerte werden auf LCD geschrieben
writeStringLCD_P("Heading ");
writeIntegerLCD(heading2dm, DEC);
}
/*******************berechnung der richtungswerte***********/
void richtung_berechnen(void)
{
calculateDir(dir, heading2dm); //berechnung der richtung (N,S,W,E)
}
/**************ausgabe der richtungswerte*******************/
void richtung_ausgeben(void)
{
setCursorPosLCD(1, 0);
writeStringLCD_P("direction ");
writeStringLCD(dir); //ausgabe der richtung
}
int main(void)
{
initRP6Control();
multiio_init();
initLCD();
orientation_init();
//COMPASS_2D_init();
setLEDs(0b1111);
mSleep(500);
setLEDs(0b0000);
I2CTWI_initMaster(100);
//I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);//macht was?
I2CTWI_setTransmissionErrorHandler(I2C_transmissionError); //aktiviert I2C fehlermeldungen
showScreenLCD(" RP6Control M32", " gyro_quadrat");
mSleep(2500);
clearLCD();
while(true)
{
/*****************anzeige gedrückter buttons****************/
clearLCD();
pressedMultiIOButtonNumber = getMultiIOPressedButtonNumber();
setCursorPosLCD(0, 0);
writeStringLCD("Button: ");
writeIntegerLCD(pressedMultiIOButtonNumber, DEC);
mSleep(500);
uint8_t key = getMultiIOPressedButtonNumber();
/********************funktion der buttons*********************/
if(key)
{
switch(key)
{
case 1://richtung NORD
setLEDs(0b0001); //LED 1 leuchtet
{
new_dir = 360;
sensorwerte_holen();
heading_ausgeben();
old_dir = heading2dm;
setCursorPosLCD(1, 0);
writeStringLCD_P("dir ");
writeIntegerLCD(old_dir, DEC);
writeStringLCD_P(" ");
writeIntegerLCD(new_dir, DEC);
mSleep(1000);
}
// move(150, FWD, DIST_MM(500), true); //fährt 50cm
mSleep(1000);
// rotate(50, 3, 90, 1); //dreht um 90°
clearLCD();
break;
case 2:
setLEDs(0b0010);
break;
case 3:
setLEDs(0b0100);
break;
case 4:
setLEDs(0b1000);
break;
}
}
}
return 0;
}
irgendwie haben die 256 mit der definition der variablen zu tun, aber wie?
Lesezeichen