2

上級設計プロジェクトで Arduino IDE を使用できないため、純粋な C で Arduio Uno を使用しようとしています。シリアル通信、デジタル出力/入力、およびアナログ入力をある程度機能させることに成功しました。アナログ入力から読み取り値を取得していますが、それらのほとんどは 20,000+ で、これは高すぎます。これはおそらく 10 ビット ADC であり、私は 8 ビットのみを使用しようとしています。結果の読み取りが 100 倍になるのはなぜですか?

void init_aio(){
      DIDR0 = 0x00;           //Digital input disabled on all ADC ports
      PRR &= ~(1<<PRADC);     //ADC turned on
      ADMUX = 0x60;           //AVcc, right adjusted, ADC0 pin
      ADCSRA = 0xcF;          //ADC Enabled, no auto trigger, Iterrupt enabled, 128 prescaller
}

int read_analog(){
    reading = APin0;
    ADCSRA |= 1<<ADSC; //conversion start
    reading = abs(reading);
    return reading;
}

私が考えることができる唯一のことは、「int reading_str = itoa(reading, buffer, 10);」を使用していることです。印刷可能な値にします。読み取りを直接印刷すると、端末にゴミが印刷されます。(char buffer[100]; はバッファです)

Uno は Atmega328P を使用しています: www.atmel.com/Images/doc8161.pdf </p>

助けてくれてありがとう。

4

1 に答える 1