KUNGLIGA TEKNISKA HÖGSKOLAN [Introduktion till programmering ] [Laboration med NXC] Tobias Johansson 05/09/13 tobiaj@kth.se Introduktionskurs i datateknik, II1310
Sammanfattning Vad som gör en ingenjör till en ingenjör är att kunna lösa problem och uppgifter på ett smart och systematiskt sätt. Den här rapporten handlar om hur de nya studenterna vid ICT-skolan fick sin första programmeringsuppgift med inriktning på arbetsgången vid ingenjörs arbete. Alla fick som uppgift att utföra en laboration med användning av lego-robotar. Uppgiften var att felsöka ett program och modifiera om det så att lego-roboten kunde utföra rätt uppgifter. Metoden som användes för att lösa uppgiften var att försöka lösa ett problem i taget, och sen fortsätta på det sättet till dess att hela uppgiften var löst. Det som visades var att det gav mycket att lägga lite extra tid på att tänka efter var exakt problemet i programmet fanns. Innehållsförteckning 1. Inledning... 3 1.1 Bakgrund... 3 1.2 Syfte och målsättning... 3 2. Genomförande... 3 3. Resultat... 4 4. Analys... 4 5. Diskussion... 5 Referenser... 5 Bilagor... 6 Datateknik Kungliga tekniska högskolan Sida 2 av 6
1. Inledning Rapporten handlar om den första programmeringslaborationen som de nya studenterna vid ICTskolan fick som uppgift. Det var en introduktion till programmering och till IT-systemen som används vid ICT-skolan. Det var också till för att få de nya studenterna att börja tänka och lösa problem som en ingenjör. 1.1 Bakgrund Syftet med laborationen var att introducera studenterna för hur arbetsgången vid ingenjörsarbete går till. Att träna på hur man systematiskt går till väga för att lösa olika problem. Syftet var också att ge studenterna en grund till effektivt programmeringsarbete. Att träna på felsökning, redigering och testning och på så sätt visa hur viktigt det kan vara med ett noggrannhetstänk. Det var också ett sätt att introducera och lära studenterna om IT-systemen vid ICT-skolan som det kommer ha användning för under studietiden. 1.2 Syfte och målsättning Laborationen gick ut på att få en lego robot, med hjälp av en sensor, att följa en svart linje tills att den fick kontakt med en vägg. En annan sensor skulle då aktiveras och skicka en signal att skriva ut namnen på gruppmedlemmarna. Målet var att få fram ett färdigt program i NXC så att lego-roboten kunde utföra sina uppgifter på ett korrekt sätt. Det gjordes genom att i ett redan färdigt program felsöka och modifiera programmet till dess att roboten utförde sina uppgifter korrekt. Syftet var att låta studenterna börja träna på hur man systematiskt går till väga för att lösa problem, och i det här fallet handlade det specifikt om ett programmering problem. På det här sättet visa hur pass mycket ett litet fel i koden kan påverka slutresultatet och på så sätt försöka få fram ett mer noggrannhetstänkt. Då jag själv är väldigt ny inom programmering var målet med laborationen att försöka lära mig så mycket som möjligt. Att försöka hitta saker som är viktiga att tänka på vid framtida programmerings uppgifter. 2. Genomförande Inför laborationstillfället hölls tre föreläsningar. Föreläsningarna innefattade allt för att kunna klara av laborationen, rapporten och kursen. Till laborationstillfället var det att på eget ansvar förbereda sig så att man skulle kunna klara av att genomföra laborationen. I Lab-PM fanns all viktig information. Uppgiften och målet med laborationen, samt allt material man behövde för att kunna utföra laborationen. I programmet Bricx Command Center öppnades en icke komplett kod. Uppgiften var att felsöka, redigera samt kompilera koden och därefter flasha roboten och se om ändringarna löst problemet. Datateknik Kungliga tekniska högskolan Sida 3 av 6
Om problemet inte var löst fortsatte man att felsöka och repetera utförandet. Programeringen gjordes parvis med ett byte var 20:e minut. 3. Resultat Radnummer Ny kod Kommentar 2 Speedslow 30 Ändrade hastigheten 3 Speedfast 60 Ändrade hastigheten 34 String names Ändrade Int till string. gruppmedlemmar ändrades till names för att matcha resterande kod, 35 Mattias, Tog bort siffrorna (1 och 2) 36 Tobias eftersom att det inte gick att använda tillsammans med string 46 LCD_LINE4 50 /*void dance */ Kommenterade bort hela dance stycket. Behövdes inte finnas med. 76 IN_3 Ändrade till rätt sensor. 94 Speedfast Ändrade kriterierna för hur 98 Speedslow hastigheterna skulle anpassa sig. 115 /*dance();*/ Kommenterade bort det sista som tillhörde void dance. När felsökningen av koden var klar och allt modifierats kunde det färdiga programmet laddas över till roboten. Med hjälp av det nya programmet kunde roboten läsa av den svarta linjen med hjälp av rätt sensor. Vid kontakt med väggen aktiverades nästa sensor som fick roboten att stanna och därefter skriva ut namnen Mattias och Tobias på skärmen. 4. Analys Första problemet som dök upp var att programmet inte accepterade funktionerna som samarbetade för att skriva ut namnen. Beteckningarna matchade inte med varandra och programmet använde sig av en Integer istället för en string. Då koden ändrats och allt matchade kunde man ladda ner programmet till roboten och testa hur roboten betedde sig. Problemet som dök upp då var att det första kommandot roboten hade var att cirkulera (dance), Genom att kommentera bort den delen av koden så körde roboten framåt istället. Efter att hastigheterna hade ändrats kunde man märka att robotens sensor, som skulle användas för att läsa av den svarta linjen, inte fungerade. I koden hittade man att den använde fel sensor. Sista steget blev att få roboten att skriva ut namnen på rätt sätt. Datateknik Kungliga tekniska högskolan Sida 4 av 6
Problemet där var att inte alla namn hamnade på rätt rad och det fixades genom att ändra i koden så att rätt rad på displayen användes. 5. Diskussion Syftet med laborationen var att få börja träna på hur man som ingenjör går till väga för att lösa olika problem samt en introduktion till programmering. Programmering är för mig ett nytt område vilket gör att det finns mycket att lära sig. Sättet jag och min laborationspartner gick till väga för att lösa uppgiften kanske inte var det bästa sättet men det var ändå ett sätt att systematiskt försöka tyda var problemen fanns. Där det systematiska sättet brast som mest var nog vid noggrannheten. Att man inte riktigt tänkte efter om ändringen verkligen löst problemet innan man testade roboten igen. Som jag tidigare nämnt så är programmering väldigt nytt för mig och att tycka till om NXC ur ett brett perspektiv är svårt. Att påpeka är dock att det var väldigt användarvänligt. Det var mycket smidigt och man lärde sig succesivt hur det fungerade. Det jag tar med mig till kommande laborationer/uppgifter är att försöka ha en bättre noggrannhet och verkligen tänka efter om man är på rätt spår. Att lösningen man försöker använda sig av i slut ändan kommer ha någon effekt på att lösa problemet. Referenser Labb-PM: https://bilda.kth.se/courseid/10164/content.do?id=21060042 Föreläsningsanteckning 1: Föreläsning 2.pdf Föreläsningsanteckning 2: Föreläsning 2.pdf Programmeringsguide till lego-robot: Programming LEGO NXT Robots using NXC.pdf Datateknik Kungliga tekniska högskolan Sida 5 av 6
Bilagor Bilaga1: Bild av min journal på KTH-social. Datateknik Kungliga tekniska högskolan Sida 6 av 6