#include #include #define ADC_VREF_TYPE 0x20 unsigned char read_adc(unsigned char adc_input) { ADCSRA|=0x40; while((ADCSRA&0x10)==0); ADCSRA|=0x10; return ADCH; } //variables globales //Déclaration des Sorties #include #define feux_recul PORTD.0 #define feux_arriere PORTD.1 #define feux_avant PORTD.2 #define cligno_g PORTD.3 #define cligno_d PORTD.4 #define feux_stop PORTB.2 #define feux_route PORTD.4 #define croisement PORTD.7 //Déclaration des Entrées #define BP_cligno_g PINC.2 #define BP_cligno_d PINC.3 #define BP_warning PINC.1 #define BP_mode PINC.0 // AUTO/MANU #define BP_feux_route PINC.4 #define BP_feux_crois PINC.5 #define BP_eclairage PINC.6 // ON/OFF //Programme principal void main(void) { float Nf,Ne; //Initialisation du port A PORTA=0x00; DDRA=0x00; //Initialisation du port B PORTB=0x00; DDRB=0x0C; //Initialisation du port C PORTC=0x00; DDRC=0x00; //Initialisation du port D PORTD=0x00; DDRD=0xFF; //Initialisation des compteurs //Compteur 0 TCCR0=0x00; TCNT0=0x00; OCR0=0x00; //Compteur 1 TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BH=0x00; //Compteur 2 ASSR=0x00; TCCR2=0x64; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; ADMUX=ADC_VREF_TYPE; ADCSRA=0x87; SFIOR&=0xEF; while (1) { if(BP_eclairage==0) //Mettre ON { Nf=read_adc(3); OCR0=(48.5*Nf+12.75); if(BP_warning==0) { cligno_d=!cligno_d; //On fait clignoter le clignotant droit cligno_g=!cligno_g; //On fait clignoter le clignotant gauche delay_ms(500); } else { if(BP_cligno_d==0) { cligno_d=!cligno_d; delay_ms(500); } else cligno_d=0; if(BP_cligno_g==0) { cligno_g=!cligno_g; delay_ms(500); } else cligno_g=0; } if(BP_mode==0) // Mode manuel { feux_arriere=1; feux_avant=1; PORTD.7=PINC.4; croisement=!PINC.5; } if(BP_mode==1) // Mode automatique { Ne=read_adc(2); if(Ne>125) { PORTD.7=0; PORTD.6=0; OCR2=173; feux_arriere=1; feux_avant=1; } if(Ne>173) { PORTD.7=0; PORTD.6=1; OCR2=214; feux_arriere=1; feux_avant=1; } if(Ne>220) { PORTD.7=1; PORTD.6=1; OCR2=255; feux_arriere=1; feux_avant=1; } else { PORTD.7=0; PORTD.6=0; OCR2=0; feux_arriere=0; } } } } }