測定結果はだいたい下のとおりであった。
x_minが254/1023、x_midが523/1023、x_maxが782/1023
y_minが244/1023、y_midが518/1023、y_maxが791/1023
#include <avr/io.h> #include <util/delay.h> extern "C"{ #include "USART.h" } void initADC(){ ADMUX |= (1 << REFS0); // AVCCを基準電圧として使うことにする。 ADCSRA |= (1 << ADPS2) | (1 << ADPS0); // ADCへ供給するクロックの分周比を決める。ここでは32分周にしておく。 ADCSRA |= (1 << ADEN); // ADCを有効化する。 } uint16_t readADC(uint8_t ch){ ADMUX = ((0xF0 & ADMUX) | ch); // チャンネル選択ビットを全部一旦クリアしてから目的のチャンネルをセットして、 ADCSRA |= (1 << ADSC); // AD変換を開始して、 loop_until_bit_is_clear(ADCSRA, ADSC); // AD変換が終わるのを待って、 return ADC; // 10ビット値を返す。 } int main(){ initUSART(); initADC(); while(1){ // PC4端子にx軸のワイパーを、PC5端子にy軸のワイパーを、それぞれ接続する。 printString("x: "); printWord(readADC(PC4)); printString(", "); printString("y: "); printWord(readADC(PC5)); printString("\n"); _delay_ms(500); } return 0; }