Labbrapport Introduktionskurs i datateknik (II1310) Stefan Dalarsson, 940728 6278 2012 08 30 sdal@kth.se Introduktionskurs i datateknik (II1310)
Sammanfattning I denna rapport redovisas resultaten av laborationen i Introduktionskursen i datateknik (II1310). I laborationsgruppen bestående av mig själv och en annan gruppmedlem, har vi programmerat om en liten lego robot, med inbyggd motor och ljussensorer. Vi har sökt igenom den tillhandahållna koden som styrde robotens funktioner och hittat vissa fel i den. Därefter har vi rättat identifierade fel och ordnat att roboten fungerar som den ska. ICT Skolan KTH Sida 2 av 9
Innehållsförteckning Sammanfattning... 2 1. Inledning... 4 1.1 Bakgrund... 4 1.2 Syfte och målsättning... 4 2. Genomförande... 4 3. Resultat... 5 4. Analys... 5 5. Diskussion... 5 Referenser... 5 Bilaga 1. Skärmdump på mitt dagboksinlägg på KTH Social... 6 Bilaga 2. Den rättade koden... 7 ICT Skolan KTH Sida 3 av 9
1. Inledning Denna rapport redovisar resultaten av laborationen i Introduktionskursen i datateknik (II1310). Laborationssuppgiften gick ut på att jag, tillsammans med en annan gruppmedlem, skulle programmera om en liten lego robot, med inbyggd motor och ljussensorer, enligt givna instruktioner. Planen var att vi skulle söka igenom koden som styrde robotens funktioner och hitta eventuella fel i den, samt rätta dem och se till att roboten fungerar som den ska. 1.1 Bakgrund Utbildningen på ICT skolan har som mål att förbereda studenterna till arbete med de olika informationstekniska utmaningar [1] som finns i samhället. Att styra olika maskiner och robotar med hjälp av datorer är en sådan utmaning. Därför bör en student på ICT skolan och en IT ingenjör kunna detta. 1.2 Syfte och målsättning Laborationen i sig hade för konkret syfte att vi skall lära oss om hur man läser och felsöker datorkod och gör kodrättningar samt funktionstestar den rättade koden. Syftet med denna rapport är att vi skall lära oss om hur man rapporterar resultat från olika laborationer och utredningar under främst utbildningen, men även i någon mån senare under yrkeslivet. 2. Genomförande Vi började med att ladda ner nödvändig programvara och instruktioner från kurshemsidan [2]. När detta var klart, öppnade vi upp kodlistan och tittade igenom den flera gånger tills vi förstod logiken i den. Sedan började vi ändra och ta bort kod som vi tyckte inte stämde. Jag och min gruppkompis hade inte en förutbestämd arbetsfördelning, utan vi fick byta uppgifter vid några tillfällen. En av oss skulle programera in den nya koden och en av oss skulle notera ändringar och provköra. Vid varje ändring i koden noterade vi vad vi hade ändrat på, i vilken kodrad och resultatet av provkörningen vid varje ändring. Efter flera försök, började vi förstå hur koden fungerade och vi kunde komma på hur vi skulle rätta felen i den. ICT Skolan KTH Sida 4 av 9
3. Resultat Resultat av kodförändringsarbetet redovisas i tabellen nedan. Tabellen innehåller radnummer från orginalkoden, beskrivning av kodändringar och motsvarande kommentarer. Radnummer Ny kod Kommentar 2 3 35 36 SpeedFast 60 SpeedSlow 30 Stefan, Daniel Ändrade hastigheten på motorerna. Lade till våra namn som skulle matas ut senare 98 102+115 (Tagit bort kod) Tagit bort kod onödig kod. 46 60 (8*i) Wait(SEC_10) 69 (In_3) Slåg på ljus sensorn 85 87 91 93 SpeedSlow SpeedFast SpeedSlow SpeedFast Fixade funktionen så att den loopar våra nam efter kraschen, samt kortade ner avstängnings tiden för roboten. Såg till att roboten inte svänger ifrån den svarta linjen. Såg till att roboten inte svänger ifrån den svarta linjen. 4. Analys Den koden vi fick att utgå ifrån var inte rätt programmerad, och vi har lyckats att identifiera, rätta och funktionstesta ett antal fel. Därigenom har vi lyckats att få roboten att fungera som den ska. Arbetet gick ganska bra och det var inget som verkade gå dåligt på något sätt. Vi stötte inte på några problem som vi inte kunde lösa när vi började förstå uppgiften bättre. Mina korta reflektioner över laborationen i finns i Bilaga 1. Den rättade koden finns i Bilaga 2. 5. Diskussion Laborationens syfte och mål var att vi skall lära oss om hur man läser och felsöker datorkod och gör kodrättningar samt funktionstestar den rättade koden. Uppgiften var att rätta den givna koden som innehöll ett antal fel. Vi upplevde inte några nämnvärda problem och har lärt oss en del om kodanalys, kodrättning och praktiska funktionstester. Då detta är min första kontakt med den här typen av programvaran och NXC, har jag inte några bestämda åsikter om dessa. Det verkade vara smidigt att arbeta med detta. Då målet med vår utbildning är att lära oss hur man arbetar med olika informationstekniska utmaningar, så är fallet med att styra legoroboten ett exempel på sådana utmaningar och det är bra för oss att kunna detta. Referenser 1. kth.se, Skolan för informations och kommunikationsteknik, "KTH Kista Studera i en av Stockholms mest dynamiska stadsdelar", http://www.kth.se/ict/om (2012) 2. kth.se, "Kurshemsidan II1310 Introduktionskurs i datateknik (H12)", https://bilda.kth.se/courseid/8498/content.do?id=19121762 (2012) ICT Skolan KTH Sida 5 av 9
Bilaga 1. Skärmdump på mitt dagboksinlägg på KTH Social ICT Skolan KTH Sida 6 av 9
Bilaga 2. Den rättade koden //Definierar hastigheterna som motorerna går i #define SpeedSlow 80 #define SpeedFast 100 //Gränsvärden för ljussensorn (ändra ej dessa) #define TopThreshold 630 #define BotThreshold 600 //Definierar raderna på robotens skärm #define LCD_LINE1 56 #define LCD_LINE2 48 #define LCD_LINE3 40 #define LCD_LINE4 32 #define LCD_LINE5 24 #define LCD_LINE6 16 #define LCD_LINE7 8 #define LCD_LINE8 0 int lightintensity; bool finished = false; //En liten trudelutt Tone done[] = TONE_C4, MS_50, TONE_E4, MS_50, TONE_G4, MS_50, TONE_C5, MS_50, TONE_E5, MS_50, TONE_G5, MS_50, TONE_C6, MS_200 ; //Fyll i namnen på gruppmedlemmarna i listan string groupmembers[] = "Stefan" "Daniel" ; //Skriv ut namnen på skärmen void printnamestoscreen(string names[]) TextOut(0, LCD_LINE1, "Stefan och Daniel"); int i; for(i = 0; i < ArrayLen(names); i++) /* Loopar igenom listan med namn */ TextOut(0, (LCD_LINE2 (8*i 16)), names[i]); ICT Skolan KTH Sida 7 av 9
//Läs av värden från tryckknapparna task readtouchsensors() while(true) if(sensor(in_1) Sensor(IN_4)) finished = true; PlayTones(done); /* Spela den lilla trudelutten */ printnamestoscreen(groupmembers); Wait(SEC_20); abort(); //Läs av värdet från ljussensorn void readlightsensor() lightintensity = SensorRaw(IN_1); //Följ linjen! task followline() while(true) if(finished == true) Off(OUT_AB); break; readlightsensor(); if(lightintensity < TopThreshold) OnFwd(OUT_A, SpeedSlow); else OnFwd(OUT_A, SpeedSlow); if(lightintensity > BotThreshold) OnFwd(OUT_B, SpeedFast); else OnFwd(OUT_B, SpeedFast); ICT Skolan KTH Sida 8 av 9
//Main aktiviteten (körs alltid först!) task main() Precedes(readTouchSensors, followline); SetSensorType(IN_1, IN_TYPE_SWITCH); SetSensorMode(IN_1, IN_MODE_BOOLEAN); SetSensorType(IN_3, IN_TYPE_LIGHT_ACTIVE); SetSensorMode(IN_3, IN_MODE_RAW); SetSensorType(IN_4, IN_TYPE_SWITCH); SetSensorMode(IN_4, IN_MODE_BOOLEAN); ICT Skolan KTH Sida 9 av 9