Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
7 years, 4 months ago.
how to send char but receive string on L073RZ using UART?
Troubleshooting!
Hi anyone mind helping me to take a look and help me correct it? cuz i have been trying to change my receiving of char into string but can't seem to do it. The code below is how my current working code looks like.
main.cpp
#include "mbed.h" //-------------------------------------- //| Hyperterminal configuration | //| 115200 bauds, 8-bit data, no parity | //-------------------------------------- Serial pc(SERIAL_TX, SERIAL_RX); //PC to STM32 Board //Serial transmit(PC_4,PC_5); // STM32 writing/reading with Arduino Serial uart(PC_4,PC_5); //DigitalOut myled(LED1); DigitalIn BlueButton(USER_BUTTON); // This is Blue-Button and is on NUCLEO-L153RE DigitalOut pc_activity(LED1); DigitalOut uart_activity(LED2); #define Pressed 0 #define NotPressed 1 int main() { pc.printf("Select one of the following..."); pc.printf("\r\n"); pc.printf("i = deice type and version number"); pc.printf("\r\n"); pc.printf("r = take a single pH reading"); pc.printf("\r\n"); uart.baud(115200); //Setting of baud rate while(1) { if(pc.readable()) { //If PC port got reading/get input of char uart.putc(pc.getc()); //Sending char to arduino pc.printf("Message Sent!\r\n"); pc_activity = !pc_activity; //LED indication } if(uart.readable()) { //UART excute only when receive reading pc.printf("Message Received:"); pc.printf("\r\n"); pc.putc(uart.getc()); //Receving char from arduino pc.printf("\r\n"); uart_activity = !uart_activity; //LED indication } } }
1 Answer
7 years, 4 months ago.
Hi there,
scanf()
might be what you're looking for:
char buffer[20]; if (uart.readable()) { pc.putc(uart.scanf("%s", &buffer)); }
However, the above code snippet will only work if you are also receiving a "carriage return" character (\r
) from your uart.
- Jenny
Troubleshooting!
Hey hi Jenny,
I tried using scanf() but is not working. i currently using "carriage return" on my arduino side but for my STM i also using "carriage return". Now trying to send byte from arduino to STM but i can receive but cannot display on the terminal. Because i am actually trying to receive bytes in array to display on terminal. The code below is what my current code looks like.
while(1) { if(pc.readable()) { //If PC port got reading/get input of char uart.putc(pc.getc()); //Sending char to arduino pc.printf("Message Sent!\r\n"); //pc_activity = !pc_activity; //LED indication } if(uart.readable()) { //UART excute only when receive reading pc.printf("in while getc\n");//test int i=0; while(uart.getc() != 'E') { pc.printf("in \n");//test pc.putc(uart.getc()); buffer[i]=uart.getc(); wait(0.5); i++; } pc.printf("uart is %s",buffer); /* pc.printf("Message Received:"); pc.printf("\r\n"); pc.putc(uart.getc()); //Receving char from arduino pc.printf("\r\n"); uart_activity = !uart_activity; //LED indication */ } }
-Mel
posted by 19 Jul 2017