首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C的Arduino不接收Python输入

使用C的Arduino不接收Python输入
EN

Stack Overflow用户
提问于 2018-11-09 18:57:56
回答 1查看 73关注 0票数 0

因此,我有一个学校项目,我们必须向Arduino Uno发送命令,当它接收到命令时,它将从传感器返回数据。现在,我让它工作到一个部分,如果我发送一个命令对putty,它会对它作出反应。但问题是:当我通过Python发送命令时,它不会对它做任何事情。为了清楚起见,我可以用Python接收我的传感器的输出,但是我有一个C程序不断地推动我的数据。

下面是我的Python代码:

代码语言:javascript
复制
import serial,time
ComPort = serial.Serial('COM3')
ComPort.baudrate = 19200
ComPort.bytesize = 8
ComPort.parity = 'N'
ComPort.stopbits = 1
data = "4"
data = data.encode("utf-8")
time.sleep(1.6)
ComPort.write(data)
out = " "
i = 0
while i < 1:
   while ComPort.inWaiting() > 0: 
      out +=ComPort.read(1).decode()
      i = i + 1
ComPort.close()

这是我的C代码;我遗漏了一些部分,因为这与传感器有关,传感器工作正常。

代码语言:javascript
复制
#define F_CPU 16E6
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

#define UBBRVAL 51
void uart_init() {
    // set the baud rate
    UBRR0H = 19200;
    UBRR0L = UBBRVAL;
    // disable U2X mode
    UCSR0A = 0;
    // enable transmitter and receiver
    UCSR0B = _BV(TXEN0)|_BV(RXEN0);
    // set frame format : asynchronous, 8 data bits, 1 stop bit, no parity
    UCSR0C = _BV(UCSZ01) | _BV(UCSZ00);
}

void UART_Putstring(char* eenstring)
{
    while(*eenstring != 0X00)
    {
        transmit(*eenstring);
        eenstring++;
    }
}

unsigned char receive( void )
{
    /* Wait for data to be received */
    while ( !(UCSR0A & (1<<RXC0)) );
    /* Get and return received data from buffer */
    return UDR0;
}
void transmit(uint8_t data)
{
    // wait for an empty transmit buffer
    // UDRE is set when transmit buffer is empty
    loop_until_bit_is_set(UCSR0A, UDRE0);
    // send the data
    UDR0 = data;
}

int main(void)
{
    char tot_string[6];
    uint8_t tijdelijk;
    float tijdelijk_float;
    char input;

    DDRD |= 1<<5; // Setup HC-SR04 Trigger as an output
    DDRD &= ~(1<<4); // Setup HC-SR04 Echo a an input
    _delay_ms(50);
    uart_init();

    while(1)
    {   
        input = receive();
        if(input==0x34)
        {
            // This is converting sensor Data
            tijdelijk = hcsr04();
            tijdelijk_float = (float)(tijdelijk) * 40;
            tijdelijk_float = tijdelijk_float/58; 
            dtostrf(tijdelijk_float, 2, 2, tot_string);
            UART_Putstring(tot_string);
        }               
    }
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 09:24:03

所以我找到了答案,真的很简单。只需在C中这样做:

代码语言:javascript
复制
if(input() == '4')
{
    tijdelijk = hcsr04();
    tijdelijk_float = (float)(tijdelijk) * 40;
    tijdelijk_float = tijdelijk_float/58; 
    dtostrf(tijdelijk_float, 2, 2, tot_string);
    UART_Putstring(tot_string);
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53231797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档