上級設計プロジェクトで 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>
助けてくれてありがとう。