Hallo, ich habe mir die Codeschnipsel von muraad runtergeladen und aalles funktioniert auhc wunderbar mit einem Eingang, da ich aber 2 Sensoren (CNY70) habe möchte ich ständig die Werte von diesen in 2 unterschiedlichen integern speichern.
Mein jetziger CodeJedoch funktioniert dieser nicht.Code:int main(void) // Main-Funktion, d.h. dass was der Roboter macht! { init(); warte(2000); unsigned int l; // ADC-Wert für linken Sensor unsigned int r; // ADC-Wert für rechten Sensor ADCinit; ADCchannel_init; //ADCfree; ADCvintern; //ADCinterrupt_on; ADCprescaler_16; while(1==1) { ADCchannel_1; ADCstart; l=getadc(); ADCchannel_reset; ADCchannel_2; ADCstart; r=getadc(); if (l>0 && l<8) // wenn schwarzer Untergrund L_Motor_v(); if (l>=8) // wenn weißer Untergrund L_Motor_r(); if (r>0 && r<8) // wenn schwarzer Untergrund R_Motor_v(); if (r>=8) // wenn weißer Untergrund R_Motor_r(); warte(10); } return 0; }
Bitte um schnelle Hilfe.
PS: Hier noch die Defines aus dem Codeschnipsel:
Code:/* Analog/Digital converting */ #define ADCchannel_init DDRA=0x00 // ADC Port als Eingang deklarieren #define ADCinit ADCSRA|=_BV(ADEN) // Teilt dem Board mit, dass der jeweilige Port für ADC verwendet wird #define ADCdisable ADCSRA &=~_BV(ADEN) // mach das vorherige wieder rückgängig #define ADCstart ADCSRA|=_BV(ADSC) // startet eine Konvertierung auf dem gewünschten Kanal/Pin #define ADCfree ADCSRA|=_BV(ADATE) // schaltet den freilaufenden Modus ein #define ADCvintern ADMUX|=_BV(REFS0) // interne Spannungsversorgung #define ADCinterrupt_on ADCSRA|=_BV(ADIE) // ADC interrupt wird freigeschaltet #define ADCprescaler_2 ADCSRA |=_BV(ADPS0) // gewünschter Teilungsfaktor/Prescaler #define ADCprescaler_4 ADCSRA|=_BV(ADPS1) #define ADCprescaler_8 ADCSRA=_BV(ADPS1) | _BV(ADPS0) #define ADCprescaler_16 ADCSRA|=_BV(ADPS2) #define ADCprescaler_32 ADCSRA=_BV(ADPS2) | _BV(ADPS0) #define ADCprescaler_64 ADCSRA=_BV(ADPS2) | _BV(ADPS1) #define ADCprescaler_128 ADCSRA=_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0) #define ADCprescaler_reset ADCSRA = ~_BV(ADPS2) & ~_BV(ADPS1) & ~_BV(ADPS0) #define ADCchannel_1 // gewünschter Kanal z.B bei ATmega32 PINA0 - PINA7 #define ADCchannel_2 ADMUX|=_BV(MUX0) // wenn kein Freilaufen-Modus muss ADCchannel_x vor ADCstart #define ADCchannel_3 ADMUX|=_BV(MUX1) // kommen, dann kann man mit getadc() den #define ADCchannel_4 ADMUX= _BV(MUX1) | _BV(MUX0) // Adcwert des gewählten Kanals auslesen #define ADCchannel_5 ADMUX|=_BV(MUX2) #define ADCchannel_6 ADMUX= _BV(MUX2) | _BV(MUX0) #define ADCchannel_7 ADMUX= _BV(MUX2) | _BV(MUX1) #define ADCchannel_8 ADMUX= _BV(MUX2) | _BV(MUX1) | _BV(MUX0) #define ADCchannel_reset ADMUX= ~_BV(MUX2) & ~_BV(MUX1) & ~_BV(MUX0) inline unsigned int getadc(void) { while (ADCSRA & _BV(ADSC)) {} return ADC; }







Zitieren


Lesezeichen