
Ett projekt som skapades som en avslutande del i en CAD-kurs vid Växjö Universitet 2001.
Målet var att bilen ska kunna köra utan mänsklig inblandning. Dock är AI-delen väldigt begränsad, den kan på sin höjd att märka när den kört in i ett föremål och då backa en bit (med sväng) för att sedan köra tills den träffar något igen...
Hur ska då detta gå till? Hjärnan i projektet är en PIC16F84 som styr de båda motorerna som redan finns monterade i bilen. Omgivningssensorer är realiserade i form av två känselspröt monterade fram på bilen. Vidare finns där två stycken lysdioder som indikera var i programmet han befinner sig, för att det ska bli lättare att felsöka.
Mer information finns i rapporten (pdf).
Koden är enkel men uppfyllde mitt syfte :-)
Filnamn: kod/nikko.c
#include <NIKKO.H>
#int_rb
int i;
rb_isr() { /* OBS AVKOMMENTERAT.... */
// Change on port B
}
void RAKTFRAM() {
output_low(PIN_B2); /* Sväng INTE */
output_low(PIN_B3);
output_low(PIN_B1); /* Kör framåt */
output_high(PIN_B0);
}
void BACKA_H() { /* Backa och sväng åt höger */
output_low(PIN_B2); /* Sväng */
output_high(PIN_B3);
output_high(PIN_B1); /* Backa */
output_low(PIN_B0);
}
void BACKA_V() { /* Backa och sväng åt vänster */
output_high(PIN_B2); /* Sväng */
output_low(PIN_B3);
output_high(PIN_B1); /* Backa */
output_low(PIN_B0);
}
void SW_B4() { /* Gå hit om någon tryckte på kontakten.... */
output_low(PIN_A0); /* Släck Grön */
BACKA_H();
for(i=0;i<25;i++) {
/* 1MHz 25??? -> 4MHz 25*4 för samma tid.... */
delay_ms(50);
}
}
void SW_B5() { /* Gå hit om någon tryckte på kontakten.... */
output_low(PIN_A1); /* Släck Grön */
BACKA_V();
for(i=0;i<25;i++) {
delay_ms(50);
}
}
main() {
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
/*enable_interrupts(RB_CHANGE);*/
enable_interrupts(GLOBAL);
do {
output_high(PIN_A0); /*LED_GREEN=1;*/
output_high(PIN_A1); /*LED RED=1*/
RAKTFRAM();
if(input(PIN_B4)==1) {
SW_B4();
}
if(input(PIN_B5)==1) {
SW_B5();
}
} while(true);
}