1 | #define DegreeMulti 0.4245
|
2 |
|
3 | //werden in anderer Funktion geschriebe
|
4 | unsigned int Cal_RX;
|
5 | unsigned int Cal_RY;
|
6 | unsigned int Cal_LX;
|
7 | unsigned int Cal_LY;
|
8 | //-------------------------------------
|
9 |
|
10 | /*************************************************************************
|
11 | single read from ADC at channel
|
12 | *************************************************************************/
|
13 | uint16_t ADC_Read( uint8_t channel ){
|
14 |
|
15 | // Kanal waehlen, ohne andere Bits zu beeinflußen
|
16 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
|
17 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
|
18 | while (ADCSRA & (1<<ADSC) ) { ; } // auf Abschluss der Konvertierung warten
|
19 |
|
20 | return ADCW; // ADC auslesen und zurückgeben
|
21 | }
|
22 |
|
23 | /*************************************************************************
|
24 | average measurement from channel with n samples
|
25 | *************************************************************************/
|
26 | uint16_t ADC_Read_Avg( uint8_t channel, uint8_t nsamples ){
|
27 | uint32_t sum = 0; // beachte: Wertebereich der Summenvariablen
|
28 | for (uint8_t i = 0; i < nsamples; ++i ) {
|
29 | sum += ADC_Read( channel );
|
30 | }
|
31 |
|
32 | return (uint16_t)( sum / nsamples );
|
33 | }
|
34 |
|
35 |
|
36 |
|
37 | void GetDegree(void){
|
38 | Degree_LX = (Degree_LX + (signed int)(ADC_Read_Avg(7,5)-Cal_LX) * DegreeMulti) /2;
|
39 | Degree_LY = (Degree_LY + (signed int)(ADC_Read_Avg(6,5)-Cal_LY) * DegreeMulti) /2;
|
40 | Degree_RX = (Degree_RX + (signed int)(ADC_Read_Avg(5,5)-Cal_RX) * DegreeMulti) /2;
|
41 | Degree_RY = (Degree_RY + (signed int)(ADC_Read_Avg(4,5)-Cal_RY) * DegreeMulti) /2;
|
42 |
|
43 |
|
44 | {char Buffer[20];itoa(Degree_LX, Buffer, 10 );uart_puts( Buffer );}
|
45 | uart_puts(" ; ");
|
46 | {char Buffer[20];itoa(Degree_LY, Buffer, 10 );uart_puts( Buffer );}
|
47 | uart_puts(" / ");
|
48 | {char Buffer[20];itoa(Degree_RX, Buffer, 10 );uart_puts( Buffer );}
|
49 | uart_puts(" ; ");
|
50 | {char Buffer[20];itoa(Degree_RY, Buffer, 10 );uart_puts( Buffer );}
|
51 | uart_puts("\r\n");
|
52 | }
|