Nein, aber ich denke da fehlt noch "while(!Eingabe());"?
Aber dann werden die Sensorwerte nicht geschickt. (bzw. nur wenn ich die Servos umstelle)
Nein, aber ich denke da fehlt noch "while(!Eingabe());"?
Aber dann werden die Sensorwerte nicht geschickt. (bzw. nur wenn ich die Servos umstelle)
Hm, dann solltest du dich definitiv erst mal mit den Grundlagen von "C" vertraut machen.
Prinzipiell hast du mit deinem Vorschlag aber fast Recht. Du musst solange warten, bis die Methode den paasenden Wert zurückliefert.
Dazu sind nur kleine Anpassungen an dem eben geposteten Code nötig.
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.
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