0

ATMEGA8515と Arduino Uno の間の基本的なシリアル通信リンクをセットアップしようとしています。正しい com ポートへのパテ接続です。Arudino の出力「got:got:」が遅延とともに 2 つのバーストで表示されます。問題は、Arduino が何かが送信されていることを認識しているが、文字を取得していないことです。

メインループでデータシートの143ページにある送信コードを使用しようとしています:

int main(void)
{
    //Baud is 9600
    USART_Init(USART_BAUDRATE); 
    //init interrupt
    sei();
    
    DDRA |= _BV(DDA6); 
    while(1)
    {
        USART_Transmit("a\n");
        _delay_ms(5000);
    }
}

そして、ここから取得したこのコードを使用してシリアルを受信しようとしています:

char val; // variable to receive data from the serial port
void setup() {
  Serial.begin(9600);       // start serial communication at 9600bps
}
void loop() {
  if( Serial.available() )       // if data is available to read
  {
    val = Serial.read();         // read it and store it in 'val'
    Serial.print("got:"+val);
  }
  
  delay(100);                    // wait 100ms for next reading
}

これにより、「got:」が 5 秒ごとに 2 回出力されます。 ここに画像の説明を入力

AVR の TX ラインに LED を接続し、いつ送信するかを確認できます。AVR の TX ラインは arduino の RX ラインにフックされ、AVR RX と同じように機能します。

送信しようとしている文字が表示されない理由はありますか?

奇妙なことの1つは、ArduinoでRXライトが点滅しないため、何も取得していないように見えますが、COMポートへの印刷時にTXが常に点滅することです。

編集:これは私が送信に使用しているコードです:

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}

メインコードを変更して、0を出力するarduinoUSART_Transmit("a"); も試しました。 Serial.print(val, HEX);

4

4 に答える 4

2

ループに delay() を使用することはお勧めできません。シリアル データを受信する予定がある場合はなおさらです。

arduino コードではSerial.available()、シリアル データを受信した直後に実行することに頼るのではなく、serialEvent()関数を使用する必要があります。

この機能を実装するだけです

void serialEvent() {
    //write your code here
}

この関数は、対応するシリアル ポートを介してシリアル データが到着するたびに呼び出されることに注意してください。

arduino mega の場合、複数のシリアル ポートがあるため、 、 、 も使用serialEvent1()できserialEvent2()ますserialEvent3()

現在、これらの機能は Esplora、Leonardo、または Micro と互換性がないことを知っておくことも重要です。

これについてはarduinoのリファレンスで詳しく読むことができます

これが例です

于 2013-09-29T23:49:32.693 に答える
0

val16 進数または 10 進数として出力してみてください。印刷できない文字を印刷しようとしている可能性があります。

Serial.print(val, HEX);
Serial.print(val, DEC);
于 2013-09-29T15:11:17.523 に答える