Okay habe das so erstmal geschaft, aber es gibt schon wieder ein neues problem.
Wenn ich es so mache:
Zappeln die Servos nur rum und die Sensordaten ändern sich nicht.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; }
Empfangen mache ich in Visual C# so :
Hoffe ihr könnt mir nochmal helfen.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(); } }
mfG
Philip







Zitieren

Lesezeichen