Am incercat realizarea unei masinute controlata prin tastatura , trimitand date pe interfata seriala catre placuta realizata in prima etapa a proiectului.
Cu ajutorul microcontrolerului descifrez datele primite (tastele apasate de utilizator) iar apoi trimit mai departe o comanda catre telecomanda.
Descifrarea datelor primite de la utilizator se reduce la verificarea codului ascii al caracterului primit.
Telecomanda actioneaza asupra uneia din cele 4 comenzi(fata,spate,stanga,dreapta, comenzi actionate initial mecanic) cu ajutorul semnalului primit de la microcontroler ce deschide unul dintre cele 4 relee.
Semnalul trece de la pinul microcontrolerului printr-o rezistenta ajungand la baza tranzistorului . Curentul ce ajunge la tranzistor deschide circuitul care trece prin releul corespunzator. Am folosit de asemenea pentru protectia releelor 4 diode 4007.
int main()
{
inregistrare = 0;
salvez = 0;
final = 0;
f=1;
for(;;)
{
if ((int)message==(int)stanga) PORTA=0x04;
else if ((int)message==(int)dreapta) PORTA=0x08;
else PORTA=0;
scanf("%c",&message);
switch((int)message)
{
case ((int)stanga):
printf("stanga\n");
if (f==1) PORTA=6;
if (f==0) PORTA=5;
break;
case ((int)dreapta):
printf("dreapta\n");
if (f==1) PORTA=10;
if (f==0) PORTA=9;
break;
case ((int)sus):
printf("sus\n");
PORTA = 2;
f=1;
break;
case ((int)jos):
printf("jos\n");
PORTA = 1;
f=0;
break;
case((int)start):
printf("salvez\n");
salvez = 1;
break;
case((int)stop):
printf("nu mai salvez\n");
salvez = 0;
final = inregistrare;
inregistrare = 0;
break;
case((int)replay):
printf("replay\n");
f=1;
for(i=0;i<final;i++)
{
if ((int)c==(int)stanga) PORTA=0x04;
else if ((int)c==(int)dreapta) PORTA=0x08;
c = EEPROM_read(i);
switch((int)c)
{
case ((int)stanga):
printf("stanga\n");
if (f==1) PORTA=6;
if (f==0) PORTA=5;
break;
case ((int)dreapta):
printf("dreapta\n");
if (f==1) PORTA=10;
if (f==0) PORTA=9;
break;
case ((int)sus):
printf("sus\n");
PORTA = 2;
f=1;
break;
case ((int)jos):
printf("jos\n");
PORTA = 1;
f=0;
break;
}
astept();
}
break;
}
if (salvez == 1)
{
EEPROM_write(inregistrare,message);
inregistrare++;
}
astept();
}
return 0;
}
int uart_putchar(char c, FILE *unused)
{
if (c == '\n')
uart_putchar('\r', 0);
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
return 0;
}
int uart_getchar(FILE* f)
{
char c;
loop_until_bit_is_set(UCSRA, RXC);
c = UDR;
if(c=='\r')
c='\n';
return c;
}
void astept()
{
int i,j,k;
for(i=0;i<256;i++)
for(j=0;j<256;j++)
{
k=0;
while(k<256)
{
k++;
}
}
}
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
while(EECR & (1<<EEWE));
EEAR = uiAddress;
EEDR = ucData;
EECR |= (1<<EEMWE);
EECR |= (1<<EEWE);
}
unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1<<EEWE));
EEAR = uiAddress;
EECR |= (1<<EERE);
return EEDR;
}