Okay habe das so erstmal geschaft, aber es gibt schon wieder ein neues problem.
Wenn ich es so mache:
Code:
void task_befehle(void)
{
Eingabe();
long pos = atoi(Buffer);
if(pos < 180 && pos > 0)
{
servo1_position = pos;
}
else
if(pos < 360 && pos > 180)
{
servo2_position = pos - 180;
}
else
if(pos < 540 && pos > 360)
{
servo3_position = pos - 360;
}
else
if(pos == -1)
{
I2CTWI_transmitByte(PCF, 0);
}
else
if(pos == -2)
{
I2CTWI_transmitByte(PCF, 3);
}
}
void task_sensoren(void)
{
getAllSensors();
writeIntegerLength((((adcBat/102.4f)+0.1f)), DEC, 2);
writeString_P(".\n");
writeIntegerLength((((adcBat/1.024f)+10)), DEC, 2);
writeString_P("V\n");
writeIntegerLength(adcLSL,DEC,4);
writeString_P("L\n");
writeIntegerLength(adcLSR,DEC,4);
writeString_P("R\n");
}
uint32_t Eingabe(void){
static buffer_pos = 0;
if(getBufferLength())
{
Buffer[buffer_pos]=readChar();
if(Buffer[buffer_pos]=='\n')
{
Buffer[buffer_pos] = '\0';
buffer_pos = 0;
return 1;
}
else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE)
{
Buffer[UART_RECEIVE_BUFFER_SIZE] = '\0';
buffer_pos = 0;
return 2;
}
buffer_pos++;
}
return 0;
}
int main(void)
{
initRP6Control();
initLCD();
initSERVO(SERVO1 | SERVO2 | SERVO3);
WDT_setRequestHandler(watchDogRequest);
I2CTWI_initMaster(100);
I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
setLEDs(0b111111);
mSleep(500);
setLEDs(0b000000);
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);
I2CTWI_transmitByte(PCF, 0);
while(true)
{
task_I2CTWI();
task_befehle();
task_sensoren();
task_SERVO();
}
return 0;
}
Zappeln die Servos nur rum und die Sensordaten ändern sich nicht.
Empfangen mache ich in Visual C# so :
Code:
public void Daten_Empfangen()
{
string[] Volt = serialPort1.ReadLine().Split('.');
string[] LVolt = serialPort1.ReadLine().Split('V');
string[] Licht = serialPort1.ReadLine().Split('L');
string[] LLicht = serialPort1.ReadLine().Split('R');
string Akku = Volt[0] + LVolt[0];
string Licht_L = Licht[0];
string Licht_R = LLicht[0];
label9.Text = Volt[0].Replace("0", "") + "." + LVolt[0] + " Volt";
if (Convert.ToInt32(Akku) > progressBar1.Maximum)
{
progressBar1.Maximum = Convert.ToInt32(Akku);
}
else
progressBar1.Value = Convert.ToInt32(Akku);
if (Convert.ToInt32(Licht_R) > progressBar2.Maximum)
{
progressBar2.Maximum = Convert.ToInt32(Licht_R);
}
else
progressBar2.Value = Convert.ToInt32(Licht_R);
if (Convert.ToInt32(Licht_L) > progressBar3.Maximum)
{
progressBar3.Maximum = Convert.ToInt32(Licht_L);
}
else
progressBar3.Value = Convert.ToInt32(Licht_L);
}
private void timer2_Tick(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
Daten_Empfangen();
}
}
Hoffe ihr könnt mir nochmal helfen.
mfG
Philip
Lesezeichen