#include #include #include #define feux_recul PORTD.0 #define feux_temoin PORTD.1 #define croisement PORTD.2 #define CD PORTD.4 #define CG PORTD.3 #define stop PORTB.3 #define position PORTD.6 #define route PORTD.7 #define ON_OFF PINC.6 #define code PINC.5 #define plein PINC.4 #define ICG PINC.3 #define ICD PINC.2 #define Warning PINC.1 #define mode PINC.0 #define posi PINC.7 #define ADC_VREF_TYPE 0x20 // Lire le resultat de la convesion analogique unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; // Demarrer la conversion analogique ADCSRA|=0x40; // Attendre la fin de la conversion analogique while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } void main(void) { int tensionf; int tensionl; int i; // Initialisation du Timer/Counter 0 // Source de l'horloge: horloge systéme // Valeur de l'horloge: 16000,000 kHz // Mode: Generateur de MLI // Sortie OC0 : MLI non-inversée TCCR0=0x61; TCNT0=0x00; OCR0=0x00; // Initialisation Timer/Counter 2 // Source de l'horloge: horloge sytéme // Valeur de l'horloge: 16000,000 kHz // Mode: Generateur de MLI // Sortie OC2 : MLI non inversée ASSR=0x00; TCCR2=0x61; TCNT2=0x00; OCR2=0x00; // Initialisation des interruptions externes // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Initialisation des interruption de(s) Timer(s)/Counter(s) TIMSK=0x10; // Initialisation du comparateur analogique // Comparateur analogique: Off // Capture de l'entrée du comparateur analogique par le Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // Autorisation globale des interruptions #asm("sei") //Declaration et initialisation des ports d'entrée\sortie PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x08; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0xFF; ADMUX=ADC_VREF_TYPE; ADCSRA=0x87; SFIOR&=0xEF; while(1) { //Verification de l'allumage des commandes if (ON_OFF==0) { //Verification du mode automatique if(mode==1) { //Lecture des entrées variables tensionf=read_adc(3); tensionl=read_adc(2); OCR0=((tensionf*175)/213)+20; OCR2=((tensionl*185)/255); if (OCR2>=50) { feux_temoin=1; } else { feux_temoin=0; } //Mode présentation if (plein==0) { feux_temoin=0; position=1; for (i=0; i<=255; i++) { OCR0=((i*175)/213)+20; OCR2=((i*185)/255); delay_ms(20); } feux_recul=1; delay_ms(500); feux_temoin=1; delay_ms(500); croisement=1; delay_ms(500); CD=1; CG=1; delay_ms(1000); for (i=0; i<=9; i++) { feux_recul=!feux_recul; feux_temoin=!feux_temoin; croisement=!croisement; CD=!CD; CG=!CG; delay_ms(100); } feux_recul=0; delay_ms(500); feux_temoin=0; delay_ms(500); croisement=0; delay_ms(500); CD=0; CG=0; delay_ms(500); } else { position=0; feux_recul=0; feux_temoin=0; croisement=0; CD=0; CG=0; } } //Mode manuel else { //Allumage des plein phare if (plein==0) { OCR2=255; feux_temoin=1; } //Extinction des plein phare else { OCR2=0; } //Allumage des feux de croisement if ((code==0)|(plein==0)) { croisement=1; feux_temoin=1; } //Extinction des feux de croisement else { croisement=0; } //Allumage des feux de postion if (posi==0) { position=1; feux_temoin=1; } //Extinction des feux de position else { position=0; } //Extinction des phares arriéres if ((code==1)&&(plein==1)&&(posi==1)) { feux_temoin=0; } } //Allumage du clignotant droit if ((ICD==0)&&(Warning==1)) { CD=!CD; delay_ms(500); } //Allumage du clignotant gauche if ((ICG==0)&&(Warning==1)) { CG=!CG; delay_ms(500); } //Allumage des warnings if (Warning==0) { CD=!CD; CG=!CG; delay_ms(500); } //Extinction de tout les phares clignotants if ((Warning==1)&&(ICD==1)&&(ICG==1)) { CD=0; CG=0; } } //Commande non allumée/ extinction de tout l'éclairage else { feux_recul=0; feux_temoin=0; croisement=0; CG=0; CD=0; OCR0=0; OCR2=0; position=0; OCR0=0; CD=0; CG=0; } } }