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);