Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比较UART寄存器UDR0与无符号字符数组_C++_Arduino_Avr_Uart_Usart - Fatal编程技术网

C++ 比较UART寄存器UDR0与无符号字符数组

C++ 比较UART寄存器UDR0与无符号字符数组,c++,arduino,avr,uart,usart,C++,Arduino,Avr,Uart,Usart,我使用RX0引脚通过USB端口接收到Arduino(ATmega2560)的串行通信。在接收函数中,我想将接收信息的寄存器UDR0与无符号字符pckaffe[4]进行比较。通过USB端口发送到Arduino的数据来自pc,如果一切正常,它应该发送无符号字符数组,这就是为什么我将UDR0与无符号字符pckaffe进行比较的原因 但是,在if语句中,编译器说的是“代码>错误”,ISO C++禁止指针和整数之间的比较[fime]。 为什么呢 unsigned char pckaffe[4] = {

我使用RX0引脚通过USB端口接收到Arduino(ATmega2560)的串行通信。在接收函数中,我想将接收信息的寄存器
UDR0
无符号字符pckaffe[4]
进行比较。通过USB端口发送到Arduino的数据来自pc,如果一切正常,它应该发送无符号字符数组,这就是为什么我将
UDR0
无符号字符pckaffe
进行比较的原因

但是,在if语句中,编译器说的是“代码>错误”,ISO C++禁止指针和整数之间的比较[fime]。

为什么呢

unsigned char pckaffe[4] = { 0x0C, 0x0A, 0x0F, 0x0E };

void USART_Receive(){
    while(!(UCSR0A & (1<<RXC0)) );
    if(UDR0 == pckaffe){
        PORTB ^= (1 << PB1);
    }
}
unsigned char pckaffe[4]={0x0C,0x0A,0x0F,0x0E};
无效USART_接收(){
而(!(UCSR0A&(1
为什么呢

unsigned char pckaffe[4] = { 0x0C, 0x0A, 0x0F, 0x0E };

void USART_Receive(){
    while(!(UCSR0A & (1<<RXC0)) );
    if(UDR0 == pckaffe){
        PORTB ^= (1 << PB1);
    }
}
pckaffe
是一个无符号字符指针,您试图将其与此处的整数进行比较

if(UDR0 == pckaffe)

pckaffe
是指向字符数组的指针,因此if语句将
UDR0
(一个
int
)的值与
pckaffe
的地址进行比较,这是不兼容的类型

我想比较接收信息UDR0的寄存器与无符号字符pckaffe[4]

URD0
包含一个字节的数据。
pckaffe[4]
-其中四个。您想如何比较它们

当然,如果(UDR0==pckaffe)
没有意义,
pckaffe
不带索引会隐式转换为指向数组的指针。这会导致编译错误

也许你想要这样的东西:

unsigned char pckaffe[4] = { 0x0C, 0x0A, 0x0F, 0x0E };
unsigned int pckaffe_pos = 0;

void USART_Receive(){
    while(!(UCSR0A & (1<<RXC0)) ); // Wait for next received byte
    uint8_t data = UDR0; // Get received byte
    if (data == pckaffe[pckaffe_pos]) { // Compare the byte with next position in the array
        pckaffe_pos++; // if matches, increase position
        if (pckaffe_pos >= 4) { // If all bytes matched
             pckaffe_pos = 0; // reset the pointer
             PORTB ^= (1 << PB1); // do something
        }
    } else if (data == pckaffe[0]) { // next byte does not match, but matches the first
       pckaffe_pos = 1; // next byte assumed to be the second in the sequence
    } else { // does not match anything
       pckaffe_pos = 0; // wait for the first byte in the sequence
    }
}
unsigned char pckaffe[4]={0x0C,0x0A,0x0F,0x0E};
无符号整数pckaffe_pos=0;
无效USART_接收(){

虽然(!(UCSR0A&(1)您应该了解数组和单个字节之间的差异。(即使在使用arduino读取函数时)顺便说一句:为什么不使用它?@datafiddler那么您是说UDR0一次只接收一位?这是否意味着我需要使用for循环?…并且您应该了解位和字节之间的差异…)SCNR。如果需要四个字节,则需要逐个读取它们。(即使使用Arduino
Serial.read();