Aber dann werden die Sensorwerte nicht geschickt. (bzw. nur wenn ich die Servos umstelle)
Kann man das auch machen das dann die sensorwerte immer noch geschickt werden?
Aber dann werden die Sensorwerte nicht geschickt. (bzw. nur wenn ich die Servos umstelle)
Kann man das auch machen das dann die sensorwerte immer noch geschickt werden?
@Fabian E. Dein Postfach ist voll ;->
Kennt jemand eine methode um UART zu empfangen, aber so, dass das Programm nicht die while schleife blockiert??
mfG
Philip
Immer noch ?? Das hatte ich eigentlich komplett gelöscht als die Benachrichtigung kam...
@Fabian E.
Wie empfängst du die Daten, in deinem C# programm??
Die Klasse heißt SerialPort.
Ja soweit bin ich auch gekommen ;->
Ich meine du sendest ja "Bat: 123" wie "schneidest" du das "Bat: " aus?
Naja, das ist simple Stringverarbeitung... Das hat erstmal nichts mit dem RP6 zu tun sondern ist einfach Grundlagenwissen in C#.
Guck dir mal die Methoden an, die ein String bereitstellt...
Der USART kann einen Interrupt auslösen, wenn er ein Zeichen empfangen hat:
http://www.rn-wissen.de/index.php/UA...Mit_Interrupts
http://www.tschallener.net/AVR/intr_usart.pdf
Der RP6 verwendet das offensichtlich schon in seiner Lib:
(Aus RP6uart.c)Code:/** * UART receive ISR. * Handles reception to circular buffer. */ ISR(USART_RXC_vect) { static volatile uint8_t dummy; if(((uint8_t)(write_size - read_size)) < UART_RECEIVE_BUFFER_SIZE) { uart_receive_buffer[write_pos++] = UDR; write_size++; if(write_pos > UART_RECEIVE_BUFFER_SIZE) write_pos = 0; } else { dummy = UDR; uart_status = UART_BUFFER_OVERFLOW; } }
In RP6RobotBaseLib.c wird in initRobotBase() der entsprechende Receive-Interrupt freigegeben:
UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen