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; }