Bonsoir à tous,
J'aimerais que l'on me conseille sur un programme (atmega 8Mhz) que j'ai créer pour une serrure électronique, pourquoi ne fonctionne-t-il pas ? Le corps du programme est-il convenable ?
#include <mega16.h>
#include <delay.h>
#include <stdlib.h>
#define LEDR (PORTB.7) // Led rouge
#define LEDV (PORTC.0) // Led Verte
#define P (PORTC.1) // Relais
#define C1 (PINB.0) //Colonnes
#define C2 (PINB.1)
#define C3 (PINB.2)
#define L1 (PINB.3) //Lignes
#define L2 (PINB.4)
#define L3 (PINB.5)
#define L4 (PINB.6)
int I,V,N,N1,N2,N3,N4,C,Clef;
void init(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x80;
PORTC=0x00;
DDRC=0x03;
PORTD=0x00;
DDRD=0x00;
}
void main(void)
{
init();
while(1)
{
if(C1==1 && L1==1)
{
N=1;
}
else if(C1==1 && L2==1)
{
N=4;
}
else if(C1==1 && L3==1)
{
N=7;
}
else if(C1==1 && L4==1)
{
N=20;
}
else if(C2==1 && L1==1)
{
N=2;
}
else if(C2==1 && L2==1)
{
N=5;
}
else if(C2==1 && L3==1)
{
N=8;
}
else if(C2==1 && L4==1)
{
N=0;
}
else if(C3==1 && L1==1)
{
N=3;
}
else if(C3==1 && L2==1)
{
N=6;
}
else if(C3==1 && L3==1)
{
N=9;
}
else if(C3==1 && L4==1)
{
N=21;
}
else
{
N=-1;
if(N==20)
{
C=N1*1000+N2*100+N3*10+N4;
if (C==1444)
{
I=1;
LEDV=1;
delay_ms(100);
LEDV=0;
LEDR=1;
delay_ms(100);
LEDR=0;
LEDV=1;
delay_ms(100);
LEDV=0;
LEDR=1;
delay_ms(100);
LEDR=0;
LEDV=1;
delay_ms(100);
LEDV=0;
LEDR=1;
delay_ms(100);
LEDR=0;
}
else
{
I=0;
}
if (C==Clef)
{
P=1;
LEDV=1;
delay_ms(3000);
P=0;
LEDV=0;
V=0;
}
else if (I==1 && C>999)
{
Clef=C;
}
else
{
V=V+1;
LEDR=1;
delay_ms(2000);
LEDR=0;
N1=-1;
N2=-1;
N3=-1;
N4=-1;
}
}
if(N>=0)
{
if(N1==-1)
{
N1=N;
}
else
{
if(N2==-1)
{
N2=N;
}
else
{
if(N3==-1)
{
N3=N;
}
else
{
if(N4==-1)
{
N4=N;
}
else
{
LEDR=1;
delay_ms(1000);
LEDR=0;
N1=-1;
N2=-1;
N3=-1;
N4=-1;
}
}
}
}
}
}
}
}
-----