Koda med TI: TI-Nspire™ CX CAS TI-Innovator™ Hub
Korta aktiviteter som ger eleverna praktisk erfarenhet med tekniska hjälpmedel, utvecklar kritiskt tänkande och fördjupar förståelsen av begrepp i matematik och programmering.
Kapitel 1: Komma igång med TI-Innovator™ Hub
Övning 1: Ditt första program
LärarkommentarerI denna första aktivitet för kapitel 1 lär du dig att arbeta i programeditorn och skriva ett program som styr en lysdiod på TI-Innovator™ Hub. I fortsättningen kommer vi bara kalla den för ”hubben”. Allmänna instruktioner, t.ex. hur man ansluter datorn till hubben mm, se Kom igång-guiden till TI-Innovator System.
Syfte:
- Använda programeditorn hos TI-Nspire™ CX CAS
- Använda kommandot Send( för att kontrollera en lysdiod på hubben)..
- Introduktion till Wait-satsen.
- ”Timing” på räknaren och hubben
Steg 1
Anslut hubben till din dator. Starta programmet TI-Nspire™ CX CAS. På hubben
lyser den gröna lysdioden som indikerar att hubben är redo.
När du skriver ett nytt program så använder du programeditorn som finns i
menyn när du startar en ny applikation. Du når också editorn från appen
Räknare.
- Kommandot Send( används för att skicka kommandon till hubben som i sin tur producerar någon form av fysisk reaktion (t.ex. tända en lampa, skapa ljud, starta en motor etc.)
- Kommandon för hubben finns i programeditorns undermeny HUB.
Steg 2
Starta upp programmet LIGHT1
I vårt första program ska vi instruera hubben att sätta på rött ljus (LED) i 5 sekunder.
- För att skriva ett nytt program i appen Räknare, gå till verktygsmenyn och välj Funktioner & Program > Programeditor > Nytt.
- Skriv sedan ett namn på programmet. Vi använder här namnet LIGHT1. Tryck sedan på <enter>.
Steg 3
Markören är nu placerad i den streckade rektangeln mellan
Prgm och EndPrgm.
Parenteserna efter programmets namn används för att lägga
till valfria parametrar.
Steg 4
Ditt program består bara av en rad med kod:
Send(”SET LIGHT ON TIME 5”)
Light är namnet på den röda lysdioden.
För att skapa denna sats (programrad) måste du
- Trycka på menytangenten och välja undermenyn HUB.
- Välja 1:Send(”SET i menyn
- Välja LIGHT från undermenyn Send ”SET.
Hubbens verktygslåda innehåller instruktioner som har att göra med programmering av hubben. Du kan skriva in alla instruktioner från tangentbordet men det är för det mesta enklare att välja dem direkt från menyer.
När du väljer Send “SET, så innehåller nästa undermeny LIGHT-objektet. ON och TIME finns i undermenyn Settings.
Steg 5
- Komplettera satsen genom att slutföra kommandot. ON och TIME hittar du i hubbmenyn under Settings.
Steg 6
Ditt färdiga program ser ut då ut som i skärmbilden till höger. Kommandot Send skickar strängen (texten inom parenteser) till hubben.
Steg 7
För att köra programmet:
- Tryck Ctrl+R för att köra programmet. Detta utför ”Kontrollera syntax & lagra”, lägger till appen Räknare på en ny sida och infogar programnamnet på första raden i appen.
- Se till att hubben är ansluten till datorn.
- Tryck på <Enter> för att köra programmet.
Om kommandot är korrekt skrivet så kommer LIGHT (den röda lysdioden) att lysa i 5 sekunder. Om det är något fel kommer den att blinka en gång och det hörs ett pip.
På skärmen visas ”Klar” när programmet slutar. Notera att programmet egentligen slutar innan ljuset slocknar. Om du vill att programmet körs tills ljuset slocknar så måste du instruera räknaren att vänta (Wait) så länge ljuset är på.
Steg 8
För att lägga till en sats om detta så måste vi redigera programmet.
- Gå över till programeditorn på föregående sida.
- Lägg till en blankrad genom att placera markören i slutet av SEND- satsen och tryck sedan på <Enter>.
- Du hittar kommandot Wait i Hubb-menyn.
- Lägg till satsen Wait 5 före EndProg.
Räknarappen öppnas igen och programnamnet är infogat på första raden. Tryck
Steg 9
Utvidgning:
Man kan ta bort TIME-delen i Send-instruktionen och istället kontrollera
”timingen” med Wait-kommandot. Eftersom lysdioden kommer att vara
påslagen hela tiden så måste du också stänga av ljuset I programmet.
För att släcka ljuset använd satsen
Send”SET LIGHT OFF”
Lägg nu till satser till programmet för att få lampan att blinka många gånger.
Tips: Du kan använda Kopiera Klippa ut och Klistra in precis som i många andra applikationerÖvning 2: Input och färg
LärarkommentarerI denna andra aktivitet för kapitel 1 kommer du att lära dig vad Input betyder i ett program när man ska styra en RGB-lysdiod (COLOR) hos hubben. Datorskärmar, mobiltelefonskärmar och TV-skärmar använder alla ett stort antal av sådana lysdioder för att skapa bilder.
Syfte:
- Använda argument i program
- Styra en lysdiod som adresseras COLOR
Steg 1
För att få en speciell färg så måste du blanda till de rätta mängderna av de tre grundfärgerna röd, grön och blå.
I detta program ska du experimentera med lysdioden. Du ska mata in numeriska värden för röd, grön och blå i programmet för att få den att lysa i den färg du ”blandar” till.
Steg 2
- Infoga först en sida från appen Räknare.
- Från verktygsmenyn väljer du 9:Funktioner & Program, sedan I/O och därefter kommandot SEND.
Steg 3
- Efter Send skriver du “ och du får då dubbla citattecken och en prickad ruta inom vilken du kan göra en inskrivning.
- Inom citattecknen skriver du sedan SET COLOR
- Mata nu in tre numeriska värden separerade med blanktecken. De representerar mängden rött, grönt och blått hos lysdioden.
- Dessa tre tal kan ha värden mellan 0 och 255. Ju högre värde desto starkare färg. Till höger visas några exempel.
Steg 4
Observera att lysdioden är tänd så länge du inte ändrar någonting. Ett program kan styra lysdioden så att den slocknar när programmet avslutas.
I programmet, kommer du experimentera med lysdioden COLOR. Du kommer att ge röda, gröna och blå värden som argument och lys- dioden tänds i den färg som du valde för några sekunder och sedan stängs den av.
Steg 5
- Lägg till en ny sida och välj Programeditor från menyn och välj Nytt.
- Döp programmet till color01.
Steg 6
- Inom parentestecknen efter programnamnet skriver du tre bokstäver separerade med kommatecken. De representerar färgerna röd, grön, och blå.
- De kallas “arguments” för programmet och används här för att skicka de tre färgvärdena till hubben.
- Vi använder här bokstäverna r, g, b. Se bild till höger.
Argumenten är platshållare för värden som du uppger när du kör programmet. De är variabler som program använder för att representera de faktiska värden. Dessa variabler existerar endast för programmet och är inte tillgängligt för andra appar och behandlas som ”lokala variabler”.
Steg 7
- Välj från menyn > Hub > Send “SET… > COLOR för att klistra in den första delen av kommandot i programmet.
Steg 8
Förstå funktionen eval( )
Du kan inte skicka variablerna r, g, b som färgvärdena i Send-satsen eftersom bokstäverna r, g och b då skulle skickas till hubben i stället för värdena hos variablerna
Vi behöver använda en speciell funktion, eval ( ), från hubbmenyn. Den är utformad för att konvertera värdet på ett uttryck till en sträng som TI-innovator Hubb kan bearbeta.
Steg 9
- Lägg till eval( )-funktionen genom att välja > Hub > eval( från menyn.
- Skriv in r inom parentestecknen.
- Lägg nu till ett blanksteg.
- Upprepa eval( )-funktionen två gånger till för g och b. Glöm inte att lägga till ett blanksteg mellan varje eval-uttryck. Send-satsen ska se ut som skärmbilden till höger.
Steg 10
- Efter Send-satsen lägger du till en Wait-sats som här gör att programmet väntar 3 sekunder. Viktigt att du inte glömmer att skriva in antalet sekunder.
Steg 11
- Slutligen så lägger du till ytterligare en Send “SET COLOR …-sats för att stäng av lysdioden. Använd tre nollor för att stäng av alla tre färger.
Steg 12
Köra programmet:
- Se till att TI-Innovator Hubb är ansluten ordentligt.
- Tryck ctrl+R för att kontrollera, lagra och köra programmet.
- Inom parentestecken skriver du in tre tal, som representerar mängden rött, grönt, och blått ljus som ska blandas. Tryck sedan på enter.
- Lysdioden tänds det antal sekunder du angav i Wait-satsen och stängs sedan av.
OBS: För att åter köra programmet med andra värden så markerar du en tidigare rad och trycker på enter. Du redigerar nu de tre värdena på den nya raden och trycker på enter igen.
Övning 3: Input och ljud
LärarkommentarerI denna tredje aktivitet för kapitel 1 kommer du att lära dig en metod för att få input från användaren och för att kontrollera ljud (SOUND) på hubben.
Syfte:
- Använda Request-satsen
- Styra frekvens och timing hos högtalare (SOUND)
Steg 1
Hubben har en inbyggd högtalare, som adresseras SOUND. Du kan styra ljudet som kommer från högtalaren genom att skicka ett frekvensvärde. Ljudfrekvenser mäts i Hertz (Hz) eller perioder per sekund.
Steg 2
Programsatsen Request finns i menyn I/O. Den används för att få indata från användaren och innehåller en funktion som låter programmeraren skapa ett meningsfullt meddelande till användaren.
Syntax för satsen: Request <Sträng>, <Variabel> I detta ljudprogram ska vi nu använda Request-satsen.
Steg 3
Starta upp programmet sound1
- Starta ett nytt program och döp det till sound1.
- Lägg till Request satsen från programeditorns I/O menu.
- Lägg till promten “Frekvens? ” och ett kommatecken efter nyckelordet Request
- Skriv sedan variabeln som representerar frekvensen, frekv.
- Lägg till ännu en Request-sats som låter användaren skriva in den tid som ljudet från högtalaren ska låta.
Steg 4
Precis som med programmet COLOR1 i föregående aktivitet (Kapitel 1, Övning 2) så måste du använda eval( )-funktionen för att utvärdera variablerna frekv and tid.
Slutföra programmet sound1- Välj Send(“SET… och SOUND genom att trycka Hub > Send “SET… > SOUND från programeditorn.
- Välj eval( genom att trycka på Hub > eval()
- Lägg till variabeln frekv inom parentestecknen.
- Skriv in ett blankstegstecken och lägg sedan till ännu en eval(-funktion för variabeln tid.
- Tryck ctrl-B för att lagra programmet.
Steg 5
Köra programmet
När du kör detta program visas en dialogruta som ett resultat av Request-satsen.
- Skriv in frekvensen 440 och tiden 5.
Detta ger en ton på 440 Hz i 5 sekunder. Högtalaren vibrerar alltså med denna frekvens i 5 sekunder.
(Om det är högljutt omkring dig kanske du behöver hålla hubben nära ditt öra för att höra tonen.) - Tryck enter för att köra om programmet med en annan frekvens och en annan tid.
- Experimentera med olika frekvenser.
Tillämpning:: Trafikljus
LärarkommentarerSkriva ett program som styr ett trafikljus.
Syfte:
- Styra lysdioden COLOR för att simulera ett trafikljus med en lampa.
- Skapa en följd (sekvens) av satser med lämpliga tidskontroller
Steg 1
Denna uppgift är att skriva ett program som styr ett trafikljus. Trafikljuset kommer att simuleras med lysdioden COLOR LED på hubben.
Lysdioden COLOR LED ska växla från grönt till gult till rött OCH från rött till gult till grönt. Tidsinställningen avgör du själv.
Programmet kommer att ha en sekvens av satser som simulerar förändringen från RÖTT till GRÖNT till GULT till RÖTT. En sekventiell kontrollstruktur i programmering är en uppsättning satser som bearbetas en efter en, i en viss ordning, från början till slut och utan avbrott.
Steg 2
Använda Text som en paus
Med kommandot Disp kan man visa ett meddelande. Det kan t.ex. användas för att visa värdet på en variabel som i Disp X eller så kan det visa en sträng. Men det slutar inte programmet från att fortsätta.
Programsatsen Text på I/O-menyn visas en dialogruta och väntar på att användaren ska trycka på enter eller klicka på OK-knappen innan resten av programmet körs.
Steg 3
Skapa en titel (på skärmen)
- Starta ett nytt program och döp det till applikation1.
- Nyckelordet Text hämtas från I/O-menyn.
- Inom citattecken lägger du till meddelandet “Trafikljus: Tryck Enter…”. Se skärmbilden till höger.
Steg 4
Ställa in färger
Först ställer vi in den röda färgen genom att skicka RGB-värdena 255 0 0.
I exemplet som visas använder vi en Wait-sats för att tala om för programmet att vänta 5 sekunder innan nästa kommando skickas till
TI-Innovator Hub. Det röda ljuset är på under denna tid.
Den uppgift är nu att lägga till programsatser som gör att lysdioden lyser med grönt ljus, sedan gult ljus och sedan rött ljus igen.
Utmaning: Lägg till LJUD för att indikera ljusets färg.
- Övning 1
- Övning 2
- Övning 3
- Tillämpning
Kapitel 2: For-loopar
Övning 1: Blinkande ljus
LärarkommentarerI denna första aktivitet för kapitel 2 kommer du lära dig om For-loopen genom ett program som gör att den röda lysdioden blinkar medan information visas på skärmen.
Syfte:
- Lära sig att använda For loop-instruktionen
- Få lysdioden att blinka
- Använda DispAt-satsen för text och variabler
Steg 1
Vi ska nu skriva ett program som gör att lysdioden blinkar ett visst antal gånger. Med andra input-satser kan du också styra den tid vid vilken lysdioden är på och av.
I detta program introducerar vi en For…EndFor-loopen.
Steg 2
Starta upp programmet:
- Starta ett nytt program med namnet Light2.
- Lägg till Text genom att gå till I/O-menyn och välja Text.
- Lägg till Blinka! Tryck enter inom citattecken.
- Lägg till Request genom att gå till I/O-menyn och där välja 1:Request.
- Skriv in “Antal gånger?” inom citattecken. Se skärmbild.
- Lägg till ett kommatecken och variabeln n.
Steg 3
Lägga till For-loopen:
- Lägg till For-strukturen genom att välja > Kontroller > 5:For…EndFor från menyn.
- Både For- och EndFor-satserna klistras in I ditt program med en tom rad emellan satserna där man kan lägga till loop-kroppen.
- Slutför For-satsen med att skriva i, 1 och n mellan kommatecken..
- Denna sats betyder “För variabeln i som går från 1 till n med steglängden 1.”
Steg 4
- Tryck på enter några gånger i loopkroppen för att skapa tomma rader som vi fyller i senare.
- Det är inte så viktigt hur många tomma rader du lägger till. Du kan alltid lägga till fler rader om du behöver och tomma rader påverkar inte körningen av programmet.
- Blocket med satser mellan For och EndFor kallas ”loopkropp”. Det är denna del av koden som kommer att processas n gånger.
Steg 5
Vi vill att lysdioden ska blinka ON och OFF n gånger. Vi vill också att programmet ska visa antalet ”blinkningar”. Vi börjar loopkroppen med DispAT 1, i, som loopens kontrollvariabel.
DispAt visar uttrycket efter kommatecknet vid det radnummer som står före kommatecknet. Utrymmet för programmet är under själva program- namnet och det finns 8 tillgängliga rader som kan användas för DispAt
Steg 6
Nu lägger vi till satser för att sätta på och stänga av ljuset.
- Lägg till Send “SET LIGHT från Hubb-menyn.
- Lägg till ordet ON från Hubb-menyn. Välj undermenyn SETTINGS eller skriv bara in ordet.
- Lägg till Wait (i sekunder) från Hubb-menyn så att programmet väntar en sekund innan nästa kommando skickas.
- I vårt program använder vi en sekund, men du kan naturligtvis använda vilket värde du vill, även decimaltal
- Lägg till ännu Send-sats för att stänga AV lysdioden, och därefter ännu en Wait-sats.
- Kör programmet (ctrl-R). Du kommer att se hur ljuset blinkar och räkneverket uppdateras i Räknare-appen.
Observera indenteringen (textindrag)! Denna hjälper ofta till att få program mer läsbara och det påverkar inte programkörningen på något sätt.
Steg 7
Här en utmaning: Lägg till inmatningssatser i början av programmet (före the For-satsen) för att ställa in tiden för de två Wait-värdena, och använda dessa variabler istället för tal i dessa satser.
Avsluta och kör programmet igen. Observera blinkandet och de värden som visas i fönstret hos Räknare-appen.
Övning 2: Loopar med färger
LärarkommentarerI denna andra aktivitet för kapitel 2 kommer du lära dig att styra intensiteten hos de tre färgerna (RGB) i lysdioden COLOR hos hubben.
Syfte:
- Använda For-loopar för att styra var och en av de tre färgkanalerna hos ljusdioden COLOR
Steg 1
De röda, gröna och blå värdena (från 0 till 255) som skickas till lysdioden COLOR bestämmer varje färgkanals ljusintensitet. Detta program visar hur man kan variera mängden av varje färg gradvis (det finns över 16 miljoner (256³) möjliga färger. Du kommer åter att använda några For-loopar i ditt program.
Steg 2
Skapa ett program som färgväxlar
- Starta ett nytt program och kalla det COLOR2.
- Lägg till kommandot Text med en rubrik för programmet.
- Lägg till Request och inom citationstecken Wait.
- Lägg sedan till ett kommatecken och variabeln w.
Denna variabel kommer att användas i en Wait-sats där ett lågt värde ger kort väntetid och snabbare körning av nästa kommando. - Som visas till höger ska man också ange ett stegvärde som ska användas i For-loopen för att snabba upp körningen.
Steg 3
Vårt program kommer gradvis (beroende på värdena för väntetid och steglängd) att öka intensiteten för RÖTT, sedan lägga till GRÖNT, sedan gradvis ta bort RÖTT, sedan lägga till BLÅTT, ta bort GRÖNT, sedan lägga till RÖTT till BLÅTT, sedan ta bort BLÅTT, och slutligen ta bort RÖTT. Ett ganska långt program och du kan köra det när du har slutfört var och en av For-looparna för att testa hur det fungerar.
Steg 4
Det är bra att programeditorn ser till att For-satsen och motsvarande EndFor-sats skrivs in samtidigt. Det kan annars vara lätt att glömma EndFor-satsen.
- Lägg nu till en For…EndFor-loop (finns i Kontrollmenyn) efter de två Request-satserna och använd stegvariabeln s som den fjärde parametern i For-satsen.
Steg 5
Slutföra Första loopen
- Lägg till återstående delar i For(-satsen för att få värdet på loopvariabeln i att öka från 0 till 255. Använd stegvariabeln s.
- Lägg till the Send(“SET COLOR-satsen från programeditorns Hubb-meny.
- Använd the eval(-funktionen från Hubb menyn för variabeln i för att styra den röda kanalen och ställa in kanalerna för GRÖNT and BLÅTT till 0.
- Send-satsen ska följas av en Wait-sats där man använder variabeln w som du använde i Request-satsen tidigare.
Steg 6
- Efter End i denna första For-loopen kan du använda Text-satsen med ett meddelande så att du kan betrakta det starka röda ljuset från lysdioden.
Steg 7
Lägga till loopen för grönt ljus
Nu ska vi skapa en annan For-loop för att lägga till grönt till lysdioden. Men denna gång vill vi bara styra GREEN-kanalen och inte röra REDkanalen. Vi kan göra detta på två sätt:
Send(SET COLOR 255 eval(i) 0”)
(eftersom vi vet att RED hela tiden är på och BLUE är av.)
eller
Send(“SET COLOR.GREEN eval(i)”)
Denna andra sats styr bara den gröna-kanalen och påverkar inte REDoch BLUE-kanalerna. Observera att vi i båda fallen kan “återanvända” variabeln i från den första For-loopen.
Steg 8
I skärmbilden till höger kan vi notera att vi har valt att använda det första sättet ovan.
- Lägg till Wait-satsen i loop-kroppen med variabeln w.
- Lägg till Text-satsen efter End i loopen för att man ska få tillfälle att betrakta den nya färgen. Vilken färg är det?
Steg 9
Nu vill vi stegvis minska mängden RED så att till slut bara GREEN återstår. För att minska i en For(-loop startar vi med det största talet, går till det minsta talet, och använder ett negativt stegvärde:
For(i, 255, 0, -s)
Startar vid 255 och i varje steg i loopen drar man bort s tills variabeln i är mindre än 0 när loopen slutar.
Steg 10
Vi vill bara ändra RED-kanalen så därför använder vi COLOR.RED i Send-satsen.
Resten av denna loop är precis som de första två looparna vi konstruerade. Skärmbilden till höger visar bara nyckelorden inmatade.
Kan du göra klart var och en av dessa satser? Om inte, gå till nästa steg.
Steg 11
Här är den färdigställda delen som tar bort RED stegvis. I slutet av denna loop kommer du att se en stark GRÖN färg.
- Lägg nu till en loop som lägger till BLUE.
- Därefter lägger du till en loop som tar bort GREEN
- Nu lägger du till en loop som lägger till RED igen.
- Vilken färg ser du i slutet av dessa loopar?
- Lägg till en loop som tar bort BLUE.
- Till slut, lägg till en loop som tar bort RED.
- Vilken färg har lysdioden i slutet av programmet?
- Vad händer om alla tre färgkanalerna är 0?
Övning 3: Loop med toner
LärarkommentarerI denna tredje aktivitet för kapitel 2, kommer du att lära dig sambandet mellan frekvenserna hos skalor i musik och därefter skriva ett program som spelar toner som musiker har använt i många århundraden.
Syfte:
- Förklara “tolfte roten ur tvåsambandet” i musikskalan
- Skriva ett program som spelar tonerna i en skala
Steg 1
Lite musikteori
Musiktoner bestäms av frekvensen hos vibrerande föremål, t.ex. en högtalare, ett trumskinn eller en sträng på en gitarr. Mellan tonerna i musikskalan finns ett speciellt matematiskt samband. Det finns 12 halvtonssteg i en oktav. Om en ton har frekvensen F så har nästa ton frekvensen F · 12√2.
Om vi multiplicerar en tons frekvens med 12√2 eller 21/12 (tolfte roten ur 2) tolv gånger så får vi som resultat en fördubbling av den ursprungliga frekvensen:
𝐹 × (21/12)12 = 2 × 𝐹
Om t.ex. en ton har frekvensen 440 Hz, så har en ton en oktav högre frekvensen 880 Hz och en ton en oktav lägre frekvensen 220 Hz.
Steg 2
Det mänskliga örat tenderar att upfatta båda tonerna en oktav bort som väsentligen samma beroende på närbesläktade övertoner. Av detta skäl så ges toner en oktav bort samma namn i vårt notsystem. Namnet på en ton en oktav ovanför C kallas också C. Intervallen mellan dessa toner kallas halvtoner. I denna lektion ska vi använda oss av 21/12 -förhållandet för att generera 12 halvtoner i en oktav.
Ettstrukna C har frekvensen 261,64Hz. En oktav högre än ettstrukna C kallas tvåstrukna C och har frekvensen 2 × 261,64 Hz eller 523.28 Hz. Det är 12 steg (halvtoner) mellan dessa två toner och i varje steg ökar frekvensen med faktorn 21/12.
Steg 3
Titta på skärmbilden till höger där vi matat in 261.64 på startskärmen och sedan tryckt på [enter]. På nästa rad har vi sedan multiplicerat detta värde med 21/12. Då trycker vi bara på [x] och sedan 21/12 . Räknaren lägger själv till Svar i början eftersom multiplikationssymbolen kräver att man har något (ett tal) framför den. Sedan trycker vi bara på [enter] upprepade gånger.
Vi ska använda denna repetitiva princip i vårt program. Om man fortsätter att trycka på enter så blir det tolfte svaret 523.28. Detta tal blir ju då dubbelt så stort som startvärdet.
Steg 4
Komma igång med programmet:
- Starta ett nytt program och kalla det sound2.
- Lägg till kommandona Text och skriv in ”Musikskalan. Tryck enter” inom citattecken
- Tilldela startfrekvensen värdet 261.64 och lagra värdet i variabeln f.
Det finns två tilldelningsoperatorer: := och →. Du kan använda vilken som helst. f:=261.64 eller 261.64 → f - Variabeln f representerar frekvenserna hos var och en av de 12 halvtonerna i skalan.
Steg 5
Ställa in For-loopen:
- Lägg till en For( loop som går från 1 till 12 (för de tolv halvtonerna).
- Lägg till en Send( “SET SOUND-sats från Hubb -menyn i programeditorn.
- Lägg till eval( för variabeln f enligt skärmbilden.
Steg 6
Evaluera frekvensen:
- Multiplicera f med 21/12 och lagra resultatet åter i f: f*2^(1/12)→f
- Denna sats tar det nuvarande värdet hos f och byter det till nästa högre tons frekvens.
- Kör (Ctrl+R) programmet i appen Räknare. Hörde nu någonting?
Är det vad du väntade dig?
Steg 7
Modifiera programmet:
Försök att lägga till TIME-parametern till Send “ SET SOUND-kommandot och se till att lägga till en motsvarande Wait-sats till programmet för att låta varje ton spela färdigt.
Om ett nytt kommando tas emot av hubben innan den avslutar sin senaste uppgift kommer hubben att processa det nya kommandot istället för att avsluta det nuvarande. Att synka programmet med hubben är upp till programmeraren.
När du kör programmet kommer du inte att höra den vanliga ”do-re-mi fa-sol-la-ti-do”-sekvensen. Det är bara 8 toner. De andra motsvarar de svarta tangenterna på ett piano. Hur kan du få programmet att spela bara de korrekta 8 tonerna?
Överväg också att använda kommandot DispAt för att visa den frekvens som just spelas.
Tillämpning: Datormusik
LärarkommentarerHär kan du använda slumptalsgeneratorn hos TI-Nspire för att skapa datorgenererad ”musik”.
Syfte:
- Använda For(-loopen för att styra antalet toner
- Använda räknarens slumptalsgenerator för att skapa slumpmässiga toner
Steg 1
Din uppgift är att skriva ett program som frågar efter antalet toner att spela och sedan använder en For(-loop att spela det givna antalet slumpmässiga toner. När tonen spelas upp så ska frekvensen visas på räknarskärmen med kommandot DispAT.
Steg 2
I denna applikation ska vi använda randint-funktionen hos TI-Nspire för att generera en slumpmässig ton.
- Från appen Räknare hittar du randint genom att från verktygsmenyn välja Sannolikhet > Slump > Heltal.
- Sedan fyller du i undre och övre gräns för dina slumpmässiga heltal. Separera talen med kommatecken. Tryck sedan på enter.
- För att få ett nytt slumptal med samma gränser trycker du på enter. Vill du ha andra gränser så går du med piltangenten till föregående kommando och trycker på enter igen. Ändra gränserna och tryck på enter igen.
Steg 3
Du ska nu kombinera funktionen randInt() med vår musiktons-formel för att få programmet att generera slumpmässiga toner baserat på
21/12 — sambandet mellan tonerna. Den viktiga delen hos programkoden är:
n:=randInt(0,59)
f:= 55·2n/12
Som du kan se i tabellen till höger så är frekvensen hos tonen A i första oktaven 55 Hz. Intervallet 0 till 59 används för de 60 tonerna i tabellen. Observera hur vi använder n i 2^(n/12) för att alstra den n:te tonen från A1. När n är noll så är frekvensen 55Hz eftersom 20 är 1.
Använd ett Wait-kommando för att synka programmet med musiken.
- Övning 1
- Övning 2
- Övning 3
- Tillämpning
Kapitel 3: Ljusintensitet, If och While
Övning 1: Mäta ljusintensitet
LärarkommentarerI denna första aktivitet för kapitel 3 ska vi undersöka den inbyggda ljusintensitetsgivaren BRIGHTNESS och använda Dispsatsen för att visa givarens avläsningar.
Syfte:
- Läsa av ljusintensitetsgivaren
- Introducera While loopen
- Introducera String( och sammanlänkning
Steg 1
I de tidigare aktiviteterna har vi bara skickat instruktioner till hubben för att påverka dess inbyggda utrustning (LIGHT, COLOR och SOUND).
I denna enhet ska vi arbeta med den inbyggda ljusgivaren och använda ett värde därifrån i vårt program för att bygga en ”ljusmätare”. Ljusgivaren producerar värden i intervallet 0 till 100 i decimalform.
För att erhålla värdet på ljusintensiteten från hubben behövs TVÅ satser:
- Send(“READ BRIGHTNESS”)
- Get <var>
Steg 2
Konfigurera programmet:
- Starta ett nytt program och ge det namnet bright1.
- Vi använder variabeln b för att lagra värdet på ljusintensiteten. Vi ser till att variabel är "local", dvs knuten till detta specifika program (och inget annat) genom att skriva Local b.
- Från hubbmenyn i editorn väljer du nu 2: Send(“READ… och sedan 1: BRIGHTNESS.
Steg 3
- Från Hubb-menyn väljer du nu Get.
- Skriv sedan variabelnamnet b. Parenteser behövs ej här.
Steg 4
Hur det fungerar:
- READ BRIGHTNESS ger information till hubben att läsa nivån på ljusintensiteten och lagra det värdet i ett inbyggt buffertminne
- Get b är ett kommando för att erhålla ett värde från hubben. Denna sats överför värdet i buffertminnet hos hubben till variabeln b hos TI-Nspire™. Variabeln du använder kan ha vilket giltigt variabelnamn som helst.
Steg 5
While-loop:
While…EndWhile-loopen (Kontrollmenyn i programeditorn) används för att processa ett block av kod (en följd av kodrader) medan (while) ett villkor är sant. Ett villkor är ett logiskt påstående som kan bedömas som sant eller falskt. Relationsoperatorerna de finns under beteckningar i verktygsmenyn och de logiska operatorerna under Matematiska operatorer > test i verktygsmenyn.
- Relationsoperatorer är =, ≠, <, >, ≤, och ≥.
- Logiska operatorer är and, or, not, och xor
Dessa operatorer kan användas tillsammans för att bygga upp sammansatta villkor som x>0 and y>0.
Vi ska nu använda en enkel While-loop som stoppar när ljusintensitetsvärdet är mindre än 1. För att avsluta programmet kan du helt enkelt täcka för givaren med din hand.
Steg 6
Lägga till en While-loop
- Innan Send(-satsen i ditt program ska du lägga till satserna: B:=2
- Denna sats startar (initierar) loopen. Så länge som villkoret b>1 är sant kommer loopen att fortsätta att läsa av ljusgivaren. Så fort villkoret blir falskt, t.ex. om du täcker givaren med din hand så att inget ljus träffar den, kommer loopen och programmet att avslutas.
Steg 7
- Vi vill nu att Send- och Get-satserna ska ingå i en While-loop.
Börja med att använda klippa ut dessa två satser (Ctrl-X). - Gå till menyn Kontroller och välj där 6: While….EndWhile.
- Klistra nu in de två satserna du klippte ut mellan While och EndWhile.
Steg 8
- Lägg till b>1 efter While så att din loop ser ut så här:
While b>1
Send “READ BRIGHTNESS”
Get b
EndWhile
Steg 9
- Lägg till DispAt-satsen efter Get-satsen och före EndWhile i loopen. DispAt finns i programeditorns I/O-meny.
- Visa ett passande meddelande och värdet hos variabeln b.
DispAt 1,”Ljusintensitet=”,b
Steg 10
- Kör programmet (Ctrl+R) med hubben ansluten. Du kommer att se en sekvens av värden skrolla förbi i appen. Dessa värden ändras beroende på ljusintensiteten som avläses av givaren.
- För att avsluta loopen (och programmet) så kan du täcka över ljusgivaren BRIGHTNESS hos hubben så att ljusintensitetsvärdet blir mindre än 1.
Övning 2: Ljusintensitet och ljus med If och While
LärarkommentarerI denna andra aktivitet i kapitel 3 ska vi bygga en automatisk ljusomkopplare som ”svarar på” omgivande ljus och mörker genom att tändas när det blir mörkt och stängas av när det blir ljusare.
Syfte:
- READ BRIGHTNESS (Läsa intensitet)
- Använda en While loop
- Använda If…Then…Else…End för att beroende på ljusintensiteten tända eller släcka en LED
Steg 1
Vi ska nu skriva ett program som detekterar ljusintensiteten (BRIGHTNESS) och sätter på ljuset när det blir ”mörkt”. När det blir ljusare i rummet släcks ljuset. Precis så här fungerar många automatiska ljusomkopplare.
Vårt program kommer att läsa av ljusgivaren på hubben och sätta på det inbyggda “LIGHT ON” närhelst värdet på ljusintensiteten faller under en viss nivå och släcker ljuset (”LIGHT OFF”) när intensiteten ligger över denna nivå.
Steg 2
Komma igång med programmet:
- Starta ett nytt program och döp det till Bright2.
- Lägg till Text och texten autoljus: tryck enter inom citattecken.
- Initiera variabeln b genom att lägga till satsen b:=2.
- Lägg till en While…EndWhile-loop med villkoret b>1.
(Värdet 1 är detsamma som "nästan mörkt")
För att avsluta loopen och programmet så täcker du för ljusgivaren.
Steg 3
- I While-loopkroppen ska du nu lägga till Send (“READ BRIGHTNESS”) och Get b från programeditorns Hubb-meny. Se skärmbilden.
- Lägg till DispAt 1, b för att se avläsningen.
Steg 4
If-satser
If-satsen kommer att ha två block med kod, ett när villkoret är sant och ett annat när villkoret är falskt.
Strukturen för denna flerrads-sats är
If <villkor> Then
<gör detta om villkoret är sant>
Else
<gör detta om villkoret är falskt>
EndIf
Du kan lägga till fler tomma rader genom att trycka på enter.
Steg 5
Nu till kodningen av villkoren…
Värdet på ljusintensiteten lagras I variabeln b. Intervallet är 0 till 100.
Vad är ett bra värde för ”mörk”? Vi väljer 25, men du kan ändra till vilket värde som helst mellan 0 och 100.
Du kan förbättra programmet genom att använda en Request-sats för ”tröskelvärdet”. Se bara till att använda Request-satsen innan While-loopen börjar.
Steg 6
- Till slut, sätt på ljuset (LIGHT ON) eller släck ljuset (LIGHT OFF) i Then och Else blocken. Se skärmbild till höger.
- Kör nu programmet med TI-Innovator inkopplad till datorn
- Kontrollera det ljus som träffar givaren och observera den röda lysdioden på hubben tändas och släckas.
Steg 7
Valfria tillägg
Lägg till DispAt 2, ”Ljuset är PÅ” när ljuset är på och DispAt 2, ”Ljuset är AV” när ljuset är av på de passande platserna i programmet.
För att stoppa loopen (och programmet), täck ljusgivaren helt och hållet så att avläsningen av intensiteten blir lägre än 1.
En sista kommentar: Ljuset komma att vara ON när programmet slutar. Varför? Lägg till en sats för att säkerställa att ljuset är OFF.
Övning 3: Ljusintensitet och färg
LärarkommentarerI denna tredje aktivitet i kapitel 3 ska vi använda oss av ljusintensitetsvärdet för att styra färgen hos lysdioden RGB.
Syfte:
- Läsa av ljusgivaren och kontrollera antingen ljusintensiteten från lysdioden eller ljudet från högtalaren
- Använda omvandlingsformler för att ändra från värden för ljusintensitet till värden för lysdioden.
Steg 1
Vi ska nu bygga en apparat som reagerar på ljusintensiteten i rummet. Ju ljusare det är i rummet, ju starkare ska lysdioden lysa. Den trixiga delen här är att omvandla värdet på ljusintensiteten till ett lämpligt värde för lysdioden (den adresseras COLOR).
- Ljusintensiteten b har ett värde i intervallet 0-100.
- Färgen c (alla tre färgkanalerna) har värden i intervallet 0-255.
- Hur omvandlar vi från b till c?
Steg 2
Kom igång med programmet
- Starta ett nytt program och döp det till bright3.
- Deklarera variablerna b och c som lokala.
- Lägg till satsen DispAt 1 ”Intensitet till Färg”.
- Ställ in variabeln b till 2 (b:=2).
- Lägg till en While…EndWhile-loop för att läsa ljusintensiteten genom att använda Send “READ BRIGHTNESS”, och få värdet för ljusvariabeln med Get b.
- Lägg till DispAt 2, ”Ljusintensitet= ”,b för att visa värdet på b.
Steg 3
- Använd variabeln c för att representera COLOR-värdet som vi skickar till alla tre färgkanalerna hos lysdioden COLOR. Omvand-
lingsfaktorn är 2,55, vilket betyder 2.55*b:=c.
Kontrollera denna formel med två par av värden. När b=0 så är c=2,55*0=0 och när b=100 är c=2,55*100=255.
Steg 4
- Lägg till en Send(”SET COLOR-sats för End i loopen. Denna sats styr intensiteten hos lysdioden.
- Slutför till slut SET COLOR-kommandot genom att använda eval (c) tre gånger (en för var och en av färgkanalerna).
- När alla tre färgkanalerna har samma värde så är färgen hos lysdioden vit och intensiteten beror på värdet.
- Anslut hubben till räknaren och kör programmet.
- Ändra intensiteten genom att rikta ljusgivaren på olika saker. Kontrollera intensiteten hos lysdioden (COLOR LED) på hubben.
- För att avsluta loopen så därmed programmet så täcker du givaren helt och hållet så att värdet hos b blir mindre än 1.
Steg 5
Men vänta! Resultatet blir fel! Ju mörkare det är i rummet, desto starkare ska lysdioden lysa. Hur kan man fixa till det?
En annan utmaning: Hur kan man ändra i programmet så att olika värden på ljusintensiteten ger olika färger?
Tillämpning: Handgjord musik
LärarkommentarerI denna applikation ska du skriva ett program som styr ljudet som kommer från högtalaren och som baseras på förändringar i inten- siteten som avkänns av en ljusgivare.
Syfte:
- Skriv ett program som omvandlar ljusintensitet till ljud
- Granska frekvenser för musik- toner och ”tolfte roten ur 2”.
Steg 1
Skriv ett program som läser av INTENSITETEN hos en ljusgivare och spelar upp olika ljud beroende på intensiteten. Det finns två olika val för ljudet:
- Spela upp en frekvens i det hörbara området (ca 100 Hz-1000 Hz)
- Spela upp en musikton (en av de specifika harmoniska ljud som man kan få från ett piano eller annat musikinstrument)
Det första valet spelar bara upp vad vi kallar oljud (noise). I det andra valet får vi ett ljud som låter mer som musik men matematiken bakom ljudet är lite mer komplex.
Detta program gör att hubben uppträder ungefär som en theremin (det första elektroniska musikinstrumentet och där musikern för sina två händer i luften mellan två antenner och där den ena handen bestämmer tonerna och den andra kontrollerar ljudstyrkan). Du kan variera mängden ljus som uppfattas av ljusgivaren (BRIGHTNESS sensor) genom att lägga till ljus (använda en ficklampa) eller minska på mängden ljus genom övertäckning av givaren.
Steg 2
Komma igång med programmet
- Starta ett nytt program och döp det till applikation3.
- Lägg till kommandot DispAt, 1 ”Lättmusik.
- Initiera variabeln b genom att lägga till satsen b:=2.
- Lägg till en While loop för att läsa av (Read BRIGTHNESS)
ljusgivaren och med kommandot Get b får vi värdet i en variabel b. - Vi lägger till satser för att spela upp ett ljud.
- Observera att vi använder variabeln b för att läsa ljusintensitet (BRIGHTNESS) och variabeln f för att spela upp ljud (SOUND).
Steg 3
Din uppgift är att lägga till kod i programmet som omvandlar ljusintensiteten (BRIGHTNESS) till hörbart ljud eller en musikton.
För ljud använder du en frekvens mellan 100 och 1000 Hz (eller två frekvenser som du själv väljer).
För musiktoner, försök med ett intervall som börjar med A1 (55 Hz) och ökar 50 toner. (Se aktiviteten i kapitel 2, Övning 3 och programmet
sound2— som spelar 12 halvtoner i en oktav.)
För musiktoner måste du omvandla ditt värde till ett heltal så att ton-
nummer representeras korrekt. Du kan antingen använda funktionen int( ).
- Övning 1
- Övning 2
- Övning 3
- Tillämpning
Kapitel 4: Få Rover att röra sig
Övning 1: Ditt första Rover-program
LärarkommentarerI denna första aktivitet för kapitel 4 lär du dig att arbeta i programeditorn och skriva ett program som får TI-Innovator™ Rover att röra sig.
Syfte:
- Använda programeditorn hos TI-Nspire CX
- Komma åt undermenyerna för Rover (RV)
- Använda kommandot Send( för att ANSLUTA TI-Innovator Rover till hubben.
- Få Rover att röra sig FRAMÅT, BAKÅT, ÅT HÖGER, ÅT VÄNSTER
Steg 1
Komma igång
- Roverkommandon når du i programeditorn genom att trycka Hub > Rover (RV).
- Vissa delar av den slutliga instruktionen, t.ex. numeriska värden och vissa parametrar, matas in direkt från tangentbordet eller också så väljs de från en annan Rover-meny.
- De flesta Rover-kommandon lämnar markören innanför citat- tecknen. Detta indikerar att det ska skrivas in mer inom komman-dot. TI-Nspire CX kräver att citattecknen kommer som teckenpar.
Steg 2
Ditt första Rover-kommando ger Hubben instruktion om att koppla upp sig till Rover:
Send(“CONNECT RV”)
RV är namnet på Rover.
För att skapa denna sats:
- I programeditorn väljer du HUB-menyn.
- Välj sedan undermenyn Rover (RV)… .
- Slutligen så väljer du Send(“CONNECT RV”). Detta kommando är placerat i slutet av undermenyn.
Steg 3
Nästa kommando är Text-satsen. ”Text” hittar du i I/O-menyn. Detta kommando pausar programmet och väntar på att användaren ska trycka på tangenten [enter].
- Välj I/O-menyn från programeditorn.
- Välj Text i menyn.
- 6. Lägg till ett lämpligt meddelande efter text-kommandot.
När du kör programmet hör du ett “pip” från hubben innan (eller medan) du ser meddelandet ”TRYCK ENTER FÖR ATT STARTA”. Det betyder att kommandot ”CONNECT RV” inte lyckades. Se till att Rover är i ON-läge.
Steg 4
Köra igång Rover
- Tryck nu enter i slutet av raden för Text-satsen för att skapa ett nytt kommando som ska få Rover att röra sig framåt.
- I programeditorn trycker du Hub > Rover (RV) och väljer sedan Drive RV menyn. Se skärmbilden till höger.
- Välj FORWARD från Drive RV-menyn.
Observera att FORWARD-kommandot som klistras in i programmet har infogamarkören innanför citattecknen och med ett blanksteg före det avslutande citattecknet. Detta för att man ska kunna lägga till olika parametrar.
Steg 5
- Lägg till talet 1 så att det ser ut så här: Send ”RV FORWARD 1”
Steg 6
- I programeditorn trycker du nu på ctrl+R för att ‘köra programmet. Detta kommando (i undermenyn Kontrollera syntax och lagra) utför just operationen Kontrollera syntax och lagra) och växlar sedan över till applikationen Räknare och klistrar in programnamnet på inmatningsraden. Lägg till eventuella argument som behövs för programmet och tryck sedan på enter för att köra det. Se till att det finns ca 30 cm fritt utrymmer framför Rover.
Text visar ett meddelande och när enter trycks ned igen ska Rover röra sig framåt. Men hur långt? Studera noga rörelsen och avgör vad FORWARD 1 innebär.
Räknaren visar ”Klar” när programmet avslutas. Observera att programmet faktiskt slutar innan Rover slutar sin förflyttning. Räknaren och TI-Innovator hubben arbetar i lite olika takt.
Steg 7
Köra baklänges!
- Redigera programmet och lägg till satsen Send(“RV BACKWARD 1”) genom att i programeditorn trycka
Hub > Rover (RV)… > Drive RV… > BACKWARD. - Lägg sedan till “1” till strängen.
- Kör programmet igen (CTRL+R).
Denna gång bör Rover gå framåt en bit och sedan tillbaka till sin ursprungliga position. Om den gör det, grattis! Du lyckades att få ditt fordon att röra sig både framåt och bakåt.
Steg 8
Svänga
De nästa två kommandona i menyn Drive RV... är LEFT och RIGHT.
- Lägg dessa två kommandon till ditt program och kör programmet igen.
Send ”RV LEFT ”
Send ”RV RIGHT “
Vad gör dessa instruktioner?
Steg 9
En kort resa
Studera programmet till höger och förutsäg hur Rover kommer att röra sig och var den kommer att stanna upp efter resan.
- Mata in kommandona i programmet och kör det sedan.
Fungerade programmet som du hade tänkt dig? Kan du skapa ett program med bara dessa kommandon som gör att Rover kör efter en rektangulär bana?
Övning 2: Körfunktioner
LärarkommentarerI denna övning ska du undersöka några av körfunktionerna. De fyra körkommandona i övning 1 innehöll citattecknen ett blanksteg efter själva kommandot. Det beror på att det finns andra val du kan göra som tillägg till kommandona. I denna övning undersöker vi detta.
Syfte:
- Utvidga körfunktionerna hos Rover
- RIGHT och LEFT-valen
- Wait
Steg 1
Parametrar för FORWARD och BACKWARD
Dessa körkommandon har tre valbara parametrar:
- SPEED
- TIME
- DISTANCE
Du hittar dessa i programeditorn så här:
HUB > Rover (RV)… > RV Settings… meny.
Även val som SPEED, UNITS/S och M/S kan du komma åt i denna meny.
Steg 2
Använda DISTANCE, SPEED och TIME
Nedan finns några exempel på olika implementeringar av FORWARD kommandot:
- FORWARD DISTANCE # är samma sak som FORWARD #.
- FORWARD DISTANCE # M flyttar Rover # Meter.
- FORWARD # SPEED # där speed är mellan 1.4 and 2.3.
- Värden utanför detta intervall orsakar ett TI-Innovator™ Hub-fel.
- FORWARD TIME #.
Du kan specificera två av dessa tre val i FORWARD och BACKWARD- kommandona.
Du kan också använda eval( ) om det värde du vill använda i en programvariabel eller om du vill använda resultatet från ett uttryck.
Steg 3
SPEED och TIME-program
- I programmet till höger finns ett kommando som flyttar Rover FORWARD för värden på SPEED och TIME: Send “RV FORWARD SPEED 2.3 TIME 2”
- Komplettera programmet genom att lägga till rätt tid, TIME, så att Rover återvänder till sin startposition:
Send “RV BACKWARD SPEED 1.4 TIME ?”
Tips: DISTANCE = SPEED * TIME
Steg 4
Val för RIGHT och LEFT
Dessa kommandon vrider Rover 90 grader till HÖGER eller VÄNSTER men du kan lägga till ett gradtal till kommandot för att få en vridning i vilken vinkel som helst mellan - 360 och 360 grader. Negativa värden tillåts så LEFT - 90 är samma sak som RIGHT 90.
- Lägg till ett kommando som får Rover att vrida sig HÖGER 135 grader. Du måste mata in 135 innanför avslutande citattecken. Ordet DEGREES behövs inte men är tillgängligt i “RV Settings…-menyn.
Du kan specificera vinkelmåttet i RADIANER eller NYGRADER men dessa enheter måste ställas in och de är också tillgängliga från RV Settings-menyn.
Några exempel visas till höger. Vad blir den slutliga riktningen hos Rover efter att de tre satserna har processats?
Övning 3: Använda COLOR och tidsinställning
LärarkommentarerI denna tredje övning i kapitel 4 ska du lära dig hur man vrider Rover till en speciell riktning. Dessutom tar vi upp tidsinställning och hur man arbetar med lysdioden ”RV.COLOR LED”.
Syfte:
- Använda kommandot TO ANGLE
- Använda lysdioden RV.COLOR.LED på Rover
- Styra tidsinställning på räknaren och Rover.
Steg 1
I denna övning tar vi upp ytterligare tre funktioner hos Rover:
- TO ANGLE-kommandot (som skiljer sig från LEFT och RIGHT)
- Hur man tänder lysdioden RV.COLOR på Rover (märkning “Color” och belägen på översidans vänstra hörn intill batteri-indikatorerna).
- Synkronisera ditt program med Rover´s rörelser genom att använda kommandot Wait.
Steg 2
TO ANGLE
Kommandot Send “RV TO ANGLE <vinkelvärde>” används för att vrida Rover i en speciell riktning. När du skickar ett kommando för att koppla upp mot Rover så sätts dess riktning till 0 grader, vilket i den matematiska världen betyder Österut. I denna värld är norr 90 grader, västerut är 180 grader och söderut är 270 grader. Se dia- grammet till höger.
Oavsett vart Rover för närvarande är på väg, kommer kommandot Send (”RV TO ANGLE 0”) att få Rover att vända sig till den riktning som den var på väg när kommandot ”CONNECT RV” angavs.
Det förvalda vinkelmåttet är DEGREES (grader) men du kan också specificera vinkelmåttet RADIANS eller GRADS (väljs från menyn RV Settings…).
Steg 3
Försök nu detta:
Send “RV TO ANGLE 90”
Wait 2
Send “RV TO ANGLE 180”
Wait 2
Send “RV TO ANGLE 270”
Wait 2
Send “RV TO ANGLE 360”
Uppförde sig Rover som du förväntade dig?
Steg 4
Synkronisera ditt program med Rover
Program på TI-Nspire visar “Klar” innan Rover slutar sin rörelse. Detta beror på att körkommandona lagras i TI-Innovator™ Hub snabbare än hubben kan processa dem. Körkommandon lagras i en ”kö” och processas av hubben när Rover är redo.
I denna övning ska vi skriva ett program som gör att Rover rör sig i ett slumpmässigt mönster och tänder lysdioden RV.COLOR på Rover när den rör sig. Vi ska också använda TO ANGLE-kommandot och införliva eval( ) för att få Rover att vrida sig till en lämplig riktning.
Steg 5
Komma igång med programmet
- Starta programmet med CONNECT RV-kommandot.
- Lägg till en For loop (menyn Kontroller och sedan For … EndFor) för att få Rover att röra sig iett slumpmässigt mönster. Du kan alltid lägga till rader till loopkroppen om du behöver.
Steg 6
- I loopkroppen lägger du till satsen om att röra sig FORWARD: Send ”RV FORWARD 1”
- Låt sedan Rover vrida sig i en slumpmässig riktning genom att först addera kommandot h:=RandInt(0,360)
- Lägg till TO ANGLE-satsen att vrida sig i riktning h.
- Kör nu programmet för att se att:
- Rover rör sig i ett slumpmässigt mönster.
- Programkörningen visar “Klar” nästan omgående medan Rover fortfarande rör sig.
Steg 7
RV.COLOR
Eftersom färglysdioden på TI-Innovator Hub är gömd i Rover, så finns det en annan lysdiod på ovansidan av Rover. Den heter RV.COLOR och fungerar som lysdioden på hubben. Du kan använda vilken som helst av de fyra kommandona i menyn (du når menyn så här från programeditorn: Hub > Rover (RV)… > RV Color…). Se bild till höger.
Send(“SET RV.COLOR 255 255 255”) ger vitt ljus.
Steg 8
Lägga till RV.COLOR till ditt program
- Lägg till ett RV.COLOR-kommando till loopkroppen omedelbart före FORWARD 1-kommandot. Färgvärden kan du välja själv.
- Kör programmet igen och se vad som händer. Observera att lys- dioden tänds nästan omedelbart och fortsätter att lysa.
Steg 9
Försök nu att få lysdioden att lysa bara när Rover rör sig framåt (FORWARD). Detta kräver att vi får TI-Nspire att vänta (WAIT) tills varje segment är avslutat och sedan släcker lysdioden när Rover svänger.
Vi behöver lägga till en Wait-sats till programmet för att styra när lysdioden ska slås på och av.
- Hur lång tid tar det för Rover att förflytta sig ”FORWARD 1”? Omkring 1 sekund? Lägg till en Wait-sats efter FORWARD 1-satsen. Du kan justera värdet om det inte passar. Wait hittar du i HUB-menyn.
- Gör nu en testkörning av programmet.
Steg 10
Observera att lysdioden fortfarande är tänd. Vi måste se till att den stängs av när Rover har stannat.
- Hur lång tid tar det för Rover att svänga? Omkring 1 sekund? Lägg till en Wait 1-sats.
- Efter Wait 1-satsen så släcker du lysdioden genom att lägga till satsen Send “SET RV.COLOR 0 0 0”.
- Testa nu programmet. Släckte Rover ljuset i rätt tid?
Steg 11
Vi behöver också vänta medan Rover vrider till en ny riktning för att vara säkra på att ljuset har släckts.
- Lägg till en Wait-sats efter TO ANGLE satsen. Detta Wait ska vara tillräckligt långt för att hantera varje vridning från 0 till 360 grader.
Steg 12
Utvidgning
Kan du se till att det blir olika färger i varje hörn. Ledning: använd eval(någonting) och inkorporera värdet på h men tänk på intervallet för tillåtna värden.
Utmaning: Gör väntetiden för vridning till en funktion av vridningsvinkeln genom att observera Rovers vridning när du använder TO ANGLE.
Tillämpning: Polygoner
LärarkommentarerTillämpningen i detta kapitel är att programmera Rover att konstru- era en polygon där användaren anger längden på en sida (i 'Rover- enheter') och antalet sidor hos polygonen. Rover kommer sedan att göra polygonen.
Syfte:
- Input-satser
- Använda eval( i Rover-instruktioner
- Förstå begreppet polygon
- Arbeta med färg (COLOR) och timing (Wait)
Steg 1
Kom ihåg att syftet med eval () är att konvertera värdet av en TI-Nspire-variabel, eller ett uttryck, till en sträng som sedan skickas till TI-Innovator™ Hub. I ljudprogrammet som visas till höger anger använ- daren en frekvens för variabeln frekv. Funktionen eval(frekv) konver- terar värdet till en sträng som hubben kan bearbeta.
Steg 2
Skriv ett program som frågar efter längden på en sida samt antalet sidor hos polygonen och sedan flyttar Rover efter det mönstret. Du kan lägga till en markör i Rover och faktiskt rita polygonen på ett stort pappersark. Kom ihåg att 1 enhet är 10 cm.
Valfritt: Gör så att lysdioden COLOR LED tänds vid hörnen hos polygonen.
Några användbara kommandon:
Request “SIDANS LÄNGD?”,L
Request “ANTAL SIDOR?”,N
For(I,1,N)
Send “RV FORWARD eval(L)”
Send “RV RIGHT <någonting>”
End
- Övning 1
- Övning 2
- Övning 3
- Tillämpning
Kapitel 5: Rover´s sensorer
Övning 1: Testa Rovers avståndsmätare
LärarkommentarerI denna första övning i kapitel 5 får du lära dig om Rovers av- ståndsmätare (Ultrasonic Ranger sensor) och möjligheterna att med hjälp av den styra Rovers rörelse.
Syfte:
- Använda kommandot READ RV.RANGER för att mäta avstånd.
- Använda kommandot för att ändra Rover’s rörelse
Steg 1
På framsidan av TI-Innovator Rover finns en sensor som kallas Ultrasonic Ranger. Den mäter med ultraljud avståndet till ett objekt framför Rover. Denna information kan användas för att styra Rovers rörelse. Om Rover kommer för nära ett hinder kan den program- meras att ändra riktning för att undvika hindret.
Först ska vi skriva ett testprogram för att undersöka hur avstånds- mätaren fungerar och i nästa övning ska vi sedan använda den informationen för att styra Rovers rörelser.
Steg 2
Programmet kommer att läsa av Rover's avståndsvärde och visa värdet på skärmen. Rover kommer inte att röra sig i detta program. Du kan istället röra handen framför Rover eller hålla den i dina händer och rikta den mot olika hinder och sedan iaktta mätningarna.
Starta testprogrammet
- Döp programmet till ROVER51. Lägg därefter till kommandot Send “CONNECT RV” genom att från programmenyn trycka > Hub > Rover (RV)….
Steg 3
Huvudloopen
Vi använder en While-loop för att styra programmet. När det avlästa avståndet är mindre än ett visst värde så avslutas programmet. Vi använder variabeln avst för att registrera det uppmätta avståndet.
- Initiera avst till 1 (avst:=1)
- Välj While ... EndWhile från Kontroll-menyn. Koda så att While-loopen fortsätter så länge som avst är större än 0,1.
Steg 4
Loopkroppen
- Kommandot READ RV.RANGER hittar du här: > Hub > Rover (RV)… > Read RV Sensors….
- Välj Send “READ RV.RANGER”.
Steg 5
- Lägg n u till kommandona
Get avst
Wait 0.25
Till loopkroppen.
För att få ett värde från en sensor krävs både Send “READ…”-kommandot för att få ett värde från sensorn till hubben och Getkommandot för att få värdet från hubben till TI-Nspire. Wait .25-kommandot används för att sakta ner operationen och göra värdena lättare att läsa av och förstå.
Steg 6
Visa värdet
- Från I/O-menyn väljer du DispAt. Denna sats används för att visa värdet på avst vid en bestämd position på skärmen i applikationen Räknare hos TI-Nspire.
- DispAt-satsen kräver (åtminstone) två argument: ett radnummer från 1 till 8 och en variabel eller ett värde att visa. För att visa något närmare mitten på skärmen, så kan man lägga till en utfyllnad efter variabeln eller värdet. Exempel: DispAt 1, avst, “ “
Steg 7
Köra programmet
- Lagra och kör programmet genom att trycka Ctrl+R. När programmet körs så visar skärmen i appen Räknare ett tal. Rör din hand framför Rover så att avståndsmätaren kan mäta olika avstånd. I vilken enhet är dessa avstånd uppmätta? När avslutas programmet?
Svar: Enheten är meter och programmet avslutas när avståndet är mindre än 0,1 m eller 10 cm.
Övning 2: Testa Rovers avståndsmätare
LärarkommentarerI den första övningen för aktivitet 5 så testade du Rovers av- ståndsmätare för att se hur man ska avläsa sensorn och visa ett värde. Här fortsätter vi testningen och lär oss styra rörelsen hos Rover.
Syfte:
- Använda READ RV.RANGER kommandot för att bestämma av- ståndet till ett hinder
- Styra Rover’s rörelser när den kommer för nära ett hinder
- Hantera timingen av Rover’s förflytt- ning i själva Nspire-programmet
Steg 1
Vi ska nu skriva ett program som får Rover att röra sig fram och tillbaka mellan två ”väggar”. Vi börjar med att låta Rover röra sig framåt (FORWARD), läser av sensorn och, när den kommer för nära väggen, få den att stanna, vända om och därefter röra sig framåt igen.
Tanken med programmet i stort
I en For-loop (som eventuellt kommer att avslutas)
Starta Rover så att den förflyttar sig FORWARD
Om avståndet är större än ca 3 cm
Fortsätt att övervaka sensorn på Rover
Avsluta While-loopen
STOPPA, vrid HÖGER 180 grader
Avsluta For-loopen
Steg 2
- Börja programmet på vanligt sätt.
- Lägg till en For( -loop som upprepas (itererar) 10 gånger.
- Lägg till ett FORWARD 100-kommando för rörelse framåt 10 meter (100 * 0.1 m per enhet).
Steg 3
Precis som i föregående övning så använder vi variabeln avst för avståndet från Ranger till ett hinder.
- Initiera avst till 1 och infoga en While avst > 0.25-loop.
Observera att det finns två End i koden. En EndFor och en EndWhile. Detta kallas för nästlade loopar.
Steg 4
- Vi ska nu infoga koden i While-loopens kropp.
- Lägg till kommandot Send “READ RV.RANGER”.
- Använd Get(- kommandot för att lagra i variabeln avst.
Steg 5
Detta fullbordar While-loopen. Rover rör sig FORWARD 10 meter, och While-loopen övervakar avståndet. Om så önskas, lägg till en DispAt-sats till denna While-loop för att visa aktuellt avstånd och se att allt fungerar som det är tänkt.
När While-loopen slutar indikerar detta att Rover är för nära ett hinder. Vi får då tala om för Rover att sluta (STOP) röra sig framåt (FORWARD) och istället vända tillbaka. Vi behöver dock inte tala om för Rover att röra sig framåt igen.
Steg 6
- Efter End i While-loopen men före End i For-loopen lägger du till RV STOP-kommandot och sedan kommandot RV RIGHT 180.
- Lägg till Wait 2-satsen för att ge Rover tid att vända runt innan den rör sig framåt (FORWARD) igen. (Kom ihåg att FORWARDkommandot är början på For-loopen.)
- Avsluta och testa ditt program. När Rover kommer nära ett hinder ska den vända och röra sig i motsatt riktning. Justera värden (minsta avstånd och väntetid (Wait-time), om det behövs. Om Rover kommer för nära så finns det risk att bakdelen hos Rover kan stöta samman med hindret just när den svänger runt.
Övning 3: COLORINPUT sensor
LärarkommentarerI den här tredje lektionen i kapitel 5 introducerar vi färgsensorn COLORINPUT och använder dess värde för att få Rover att ändra riktning.
Syfte:
- Använda READ COLORINPUT
- Använda värdet för att ändra Rover’s riktning
Steg 1
Rover har en färgsensor, adresseras COLORINPUT, på undersidan. Ljuset som lyser på golvet används av sensorn för att kunna “se” färgen på golvet bättre. Vi ska nu skriva ett program som vänder Rover när den ”ser” en färgförändring. Färgen som ses av sensorn konverteras av TI-Innovator™ Hub till ett av 9 möjliga värden, som representerar färger.
1 = Röd
2 = Grön
3 = Blå
4 = Cyan
5 = Magenta
6 = Gul
7 = Svart
8 = Vit
9 = Grå
Steg 2
- Börja programmet som vanligt.
Steg 3
- Vi använder en For-loop för att få Rover att röra sig och vända fyra gånger.
Steg 4
- Vi ska senare använda en While-loop för att titta efter färg- ändringar men först måste vi veta vilken färg som Rover ”ser” för tillfället. Vi använder kommandot READ RV.COLORINPUT och får (Get) värdet i variabeln golvfärg på TI-Nspire.
Steg 5
- Vi initierar sedan en annan variabel, färg, för att få igång While-loopen. Färg lagrar färgen som Rover “ser” medan den rör sig. Initialt ställer vi in färg att vara samma som golvfärg. Därefter startar vi Rover så att den rör sig FORWARD.
Steg 6
- Vi kodar nu While-loopen så att den jämför färg med golvfärg eftersom vi söker efter en ändring i värdet hos färg inne i While-loopen.
Steg 7
- Inom While-loopen, övervakar vi färgsensorn så länge som Rover rör sig. Vi lagrar färgvärdet i variabeln färg. Loopen avslutas när färg (aktuell färg) är olika originalfärgen golvfärg.
Steg 8
- I slutet av While-loopen meddelas Rover att stanna och gå åt höger (STOP and go RIGHT). Observera att dessa två satser kommer mellan EndWhile och EndFor-satserna så programmet ser till att Rover svänger åt höger fyra gånger när den detekterar en föränd- ring i färgen på ytan.
“RV STOP” avbryter alla körkommandon.
Steg 9
- Lägg till ett FORWARD 1-kommando och en Wait 1-sats så att Rover rör sig från den färgade området innan programmet loopar tillbaka för att detektera den ”nya” originalfärgen (golvfärg) igen.
- Testa ditt program på en yta med jämn färg (vit). Placera ett under- lag i storlek ca 5 × 5 cm och i kontrasterande färg (svart) på golvet och längs Rovers väg så att COLORINPUT-sensorn ”ser” den. När Rover passerar över underlaget ska den stanna och sedan vända och röra sig igen. Ta upp underlaget och placera det framför Rover igen. Detta måste man sedan upprepa fyra gånger för att program- met ska slutföras.
Tillämpning: Den krokiga vägen
LärarkommentarerI denna övning för kapitel 5, kommer du att skriva ett program som får Rover att följa en bana på ett papper.
Syfte:
- Använda COLORINPUT för att upptäcka och följa en krokig bana på ett papper.
- Följa en exempelbana på ett papper. (See the PDF file of test pages.)
Steg 1
Skriv ett program som får Rover att följa en krokig bana på ett papper med hjälp av en sensor. Banan kan beskrivas av två olika färger enligt bilden till höger.
Rover startar vid den vänstra kanten av sidan och färdas till höger efter den böjda vägen över papperet. När Rover “ser” RED kommer den att svänga lite till vänster och röra sig framåt en bit. När den ”ser” WHITE kommer den att svänga till höger en bit och samtidigt röra sig framåt en kort sträcka.
Steg 2
Experimentera med vridningsvinkel och avverkad sträcka för att under- söka hur Rover reagerar på de olika färgerna. Om ditt papper är rött och vitt som på bilden till höger, kan du använda READ COLORINPUT.RED för att se vilka värden som man får på varje sida av papperet. Om du använ- der en annan färg, t.ex. svart, kan du använda READ COLORINPUT.GRAY (eller GREEN eller BLUE).
Steg 3
Nedan finns ett program (FARGTEST) som du använder för att testa Rover’s färgsensor. Se vilka värden du ska använda i ditt program:
Define färgtest()=
Prgm
Send "CONNECT RV"
While getKey(0)=" "
DispAt 1,"Tryck någon tangent för att sluta."
Send "READ RV.COLORINPUT.RED"
Get r
DispAt 2,"Färgvärde: ", r
EndWhile
EndPrgm
Steg 4
Observera att Rover INTE flyttar sig i detta program. Programmet ovan används för att bestämma vad Rover “ser” på varje sida av den krokiga banan genom att observera värdena på r som visas. Använd sedan denna information för att designa ditt program. Testa programmet genom att placera Rover vid den vänstra kanten med färgsensorn nära gränsen mellan de röda och vita sidorna hos papperet. Se till att sensorn befinner sig över papperet. Programmet ska fungera oberoende var Rover börjar.
- Övning 1
- Övning 2
- Övning 3
- Tillämpning
Kapitel 6: Koordinater
Övning 1: Introduktion till koordinater
LärarkommentarerI denna första övning för kapitel 6 lära dig om Rovers koordinatsystem och förflyttningar till koordinater.
Syfte:
- Förstå Rover´s koordinatsystem och dess startposition och riktning
- Får Rover att förflytta sig till en speciell punkt i koordinatplanet
- Använda matematik för att bestämma avstånd.
Steg 1
Rover har ett inbyggt koordinatsystem precis som grafiksystemet på en räknare. När du ger instruktionen ”Send ”CONNECT RV” så sätts Rover´s position i koordinatsystemet till (0, 0) och dess riktning är 0 grader vilket betyder att den pekar mot den positiva x-axeln.
Steg 2
Vårt program kommer att tala om för Rover att flytta till en punkt i sitt koordinatsystem. Vi använder en Request-satser för att ange värden för X och Y och sedan få Rover att köra till punkten (X, Y) och sedan köra tillbaka till origo.
- Starta ditt program med de vanliga instruktionerna.
- Lägg till Request-satser för x och y
Du minns väl att Request visar meddelandet innanför citattecknen (promten). - Text-satsen ger dig tid att placera Rover i origo och rikta den i riktning ”höger”.
Steg 3
- Lägg till Rover-kommandot att köra ”TO XY”. Kommandot hittar du i > Hub > Rover (RV) > Drive RV-menyn. och visas I ditt program som en ofullständig sats: Send “RV TO XY ”.
Steg 4
- x- och y-koordinaterna måste läggas till och lagras i variablerna x och y. För att TI-Innovator™ Hub ska kunna använda dessa värden så måste du använda eval( )-funktionen två gånger.
- Lägg till eval(x) eval(y) to the command:
Send “RV TO XY eval(x) eval(y)” - Testa nu ditt program. Rover rör sig nu till den position som du anger när du matar in koordinatvärden.
Steg 5
- Lägg till ett Wait-kommando för att låta Rover röra sig och ge sedan Rover order om att återvända till origo. Använd talen 0 och 0 separerade med ett mellanslag. Vi lägger också till en sats för att få Rover att rikta in sig i sin ursprungliga riktning (TO ANGLE 0).
- Testa nu ditt program igen. Den här gången ska Rover flytta sig till din inmatade punkt och sedan återvända och ställa in sig i sin ursprungliga riktning.
Övning 2: Avståndsformeln
LärarkommentarerI denna lektion kommer du att använda TI-Innovator Rover för att markera två punkter i dess koordinatsystem och bestämma avståndet mellan dessa punkter med avståndsformeln.
Syfte:
- ´Förflyttning till två olika punkter
- MÄRKA punkterna med SOUND och COLOR och en markör
- Beräkna och visa avståndet mellan dessa punkter två punkter
- Mäta avståndet mellan punkterna för att bekräfta beräkningen
- Uppskatta felet i rörelsen kontra. beräkningen
Steg 1
Denna aktivitet kräver att en markör används i Rover markörhållare för att lämna ett spår på papperet.
Vi ska skriva ett program som markerar två punkter i planet och sedan beräknar avståndet mellan de två punkterna. Då mäter du avståndet mellan de två punkterna och jämför mätningen med beräkningen.
- Starta ditt program med CONNECT RV och inkludera Rover-kommandot för att ställa in enhetsavstånd till en tum (1 tum ≈ 0,0254 meter). RV.GRID.M/UNIT-kommandot finns i menyn Rover (RV) ...> RV Setup.
Send(“SET RV.GRID.M/UNIT .0254”)
Steg 2
- Lägg till fyra Request-satser för koordinaterna hos de två punkterna. Kom ihåg att variabler hos TI-Nspire™ CX består av flera tecken så vi kan använda variablerna x1, y1, x2 och y2 för koordinaterna.
Request ”Första x-koordinaten (x1):”,x1
Request ”Första y-koordinaten (y1):”,y1
Request ”Andra x-koordinaten (x2):”,21
Request ”Andra y-koordinaten (y1):”,y1
Vi använder också Text-satsen för att komma igång:
Text ”Tryck enter för att starta”
Steg 3
- Sedan får vi Rover att flytta till den första punkten. Därefter kommer satsen Wait 4 medan Rover rör sig och sedan kommer ljud (SOUND) och ljus från lysdioden (LED COLOR) att sättas på när Rover har nått sin position. Vi kommer också att använda en TEXT-sats här och stänga av lysdioden efter att ha tryckt på enter. Kom ihåg att ljudet bara hörs i en sekund.
Steg 4
- 4. Därefter får vi Rover att förflytta sig till den andra punkten. Ett annat ljud och en annan färg från lysdioden används för att indikera att Rover har nått punkten. En Wait-sats används här för att behålla lysdioden (LED) på innan den stängs av.
Tips: Använd Kopiera och Klistra in istället för att skriva om likartad kod.
Steg 5
- Till slut ska du programmera räknaren att beräkna och visa avståndet mellan de två punkterna genom att använda avståndsformeln:
Var noggrann med parenteserna - Mät nu den andra ritade linjesegmentet (mellan två punkter) och jämför sedan mätningen med det beräknade värdet. Hur skiljer sig värdena åt och hur stort är det procentuella felet i mätningen. Felet beräknar du så här:
(mätning-avstånd)/avstånd·100
Övning 3: Tillverka en form
LärarkommentarerI denna lektion ska du skriva ett program för att tillverka en fördesignad form. Du programmerar med listor och använder sedan en loop för att plotta punkterna på papper.
Syfte:
- Definiera listor och använda koordinatpar som lagras i listor
- Designa en 2-dimensionell form på papper och med programmet
- Få Rover att rita formen på papper (eller helt enkelt följa spåret)
Steg 1
Detta projekt kräver användning av två listor som representerar x- och y-koordinater för hörnen i en form som är din egen design. I denna övning kommer vi att använda utformningen av konturbokstaven T, vilket visas till höger. Vårt mål är att få Rover att göra denna design med hjälp av markören eller genom att bara följa spåret om ingen markör är tillgänglig.
Steg 2
- Först skapar du två listor med koordinatparen. Listorna till höger representerar hörnen i konturbokstaven. x-koordinaterna finns i lista xs, och y-koordinaterna i lista ys. Skapa gärna ett annat mönster om du vill. När du matat in data i listorna så kan du kontrollera ditt mönster direkt med ett spridningsdiagram i graf- appen.
Steg 3
- Nu kan vi skriva ett program så att Rover kommer att rita formen. Starta på vanligt sätt och, om du vill, ställ in M/Unit-värdet till ett mindre värde så att ritningen inte blir för stor. I programeditorn väljer du
> Hub > Rover (RV) > RV setup > RV.GRID.M/UNIT.
Kom ihåg att 0,01 gör att enheten blir 1 cm. Om du vill att enheten t.ex. ska vara 1 tum så använder du 0,0254.
Send ”SET RV.GRID.M/UNIT 0.0254
Steg 4
- Vi använder en For(-loop för att processa varje element i de två listorna. Kom ihåg att For kräver tre argument: loopkontroll-variabeln i, ett startvärde, 1 och ett slutvärde, dim(xs). Dessutom behövs EndFor i slutet av loopkroppen.
For i, 1, dim(xs)
EndFor
Obs: dim(xs) är antalet element i listan xs.
Steg 5
- Loopkroppen (koden innanför For(-loopen) består av bara en sats som säger till Rover att flytta till varje punkt i listorna och i ordning.
Send ”RV TO XY eval(xs[i]) eval (ys[i])” - Efter inmatning av koden kör programmet och se sedan efter om din form ritas korrekt.
Tillämpning: Slumpvandring
LärarkommentarerÖversikt: Upptäckter med slumptal kan leda till fascinerande observationer. Denna tillämpning ger dig möjlighet att utforska mer ovanliga saker om sannolikhet och att programmera Rover att flytta runt på ett rutnät.
Syfte:
- Använda koordinatrörelse för att simulera en slumpvandring
- Använda räkneverk och ackumulatorer i ett program
- Använda sammansatta villkor med inte och och.
Steg 1
Slumpvandring är ett experiment med datorprogrammering. Denna tillämpning knyter samman flera olika programmeringsfärdigheter.
Problemet:
Antag att din stads olika gator är upplagda i ett fyrkantigt rutmönster och att din skola ligger vid (0, 0) i rutnätet. Ditt hem är vid (2, -1), som representerar 2 kvarter öster och1 kvarter söder om skolan. (Överväg gärna förändringar hos denna position.) Bilden till höger är en plottning av dessa två punkter.
Från skolan går du ett kvarter i slumpmässig riktning (norr, söder, öster eller väster). Vid varje korsning går du sedan ett kvarter i slumpmässig riktning igen. Kommer du någonsin att komma hem? Hur många kvarter kommer du vandra innan du kommer hem? Kommer du sluta på grund av utmattning innan du kommer hem?
Steg 2
Planering är en viktig del av kodningen. Tänk på vad Rover kan göra och vad ditt programmeringsspråk kan göra.
Tänk på att när man arbetar med slumptal så är vi i händerna på maskinen. Det kan ta lång tid för Rover att nå hem, så vi ska lägga till en bestämmelse om att Rover endast får förflytta sig ett begränsat antal kvarter innan du slutar.
- Starta programmet med de vanliga initiala satserna. Ställ in Rovers rutnätsstorlek till något mindre än standardvärdet 10 cm.
Tänk på att det kommandot finns i programeditorn under Hub > Rover (RV) > RV setup... och det förändrar Rovers "enhet" för rörelse (används i FORWARD 1) från 10 cm till något annat, vilket möjliggör fler rutnätspunkter på ett mindre utrymme.
Steg 3
Initiera variabler
- Spara hemkoordinaterna (2, -1) och startnumret för passerade kvarter (0) i variablerna hem_x, hem_y respektive kvarter. Variabeln kvarter kommer att användas för att hålla reda på antalet kvarter som Rover ”går” och kommer att användas för att stoppa programmet om Rover går för långt. Rover slutar av utmattning när den har gått ett angivet antal kvarter.
Vi använder här 20 kvarter som ett värde för utmattningssträckan och använder variabeln sluta för detta värde. - Rover kommer hem när dess position, som vi kallar (x, y), är (2, -1). Initiera båda variablerna, x och y, att vara noll.
Steg 4
Huvudloopen
- Huvudloopen hos programmet består av en While-loop med två villkor som ska adresseras. Villkoren är ”när Rover är hemma”(när x = hem_x och y= hem_y) eller slutar av utmattning (när kvarter = sluta).
While-loopen fortsätter så länge som villkoren är falska så vi ställer upp motsatta villkor:
While kvarter<sluta and not (x=x_hem och y=hem_y)
Kom ihåg att fasta värden som är relaterade till problemet lagras i sluta, hem_x och hem_y.
not( ) används för att försäkra att programmet fortsätter så länge som Rover inte är ”hemma”. Rent logiskt är and not motsatsen till or (eller). - Kom ihåg att inkludera en EndWhile-sats om du skriver in koden ”för hand”.
Steg 5
Inne i loopen
- Tillväxten av kvarter (antalet passerade kvarter):
kvarter:=kvarter+1. - Välj riktning slumpmässigt (norr, söder, öst, eller väst):
- Rover’s TO ANGLE-kommando vrider Rover till en “absolut” riktning: 0 är öst, 90 är norr, 180 är väst, och 270 är syd
- randInt(0,3) ger ett slumpmässigt heltal: 0, 1, 2, eller 3.
- Multiplicera detta värde med 90 för att få 0, 90, 180, eller 270.
- Satsen för att få en slumpmässig riktning är:
Steg 6
- Vrid Rover till vinkeln riktning: Send“RV TO ANGLE eval(riktning)”.
- Förflytta Rover framåt 1 enhet (1 kvarter i vår simulering):
Send(“RV FORWARD 1”). - Uppdatera Rover’s position i programmet:
Om Rover går åt norr, öka då y med 1
Om Rover går åt öster, öka då x med 1
Om Rover går åt söder, minska då y med 1
Om Rover går åt väster, minska då x med 1
Inkludera några Wait-kommandon för att hålla programmet synkroniserat med Rover´s rörelser. Vridning tar tid och att gå framåt tar tid. Wait-tiderna beror på vridningsvinkeln och tillryggalagd sträcka så att du kan behöva experimentera med Wait-värdena.
Steg 7
Efter loopen
Loopen avslutas på ett av två sätt:
- Om kvarter=sluta, så slutar Rover sin vandring på grund av utmattning. Visa då “Rover slutar av utmattning” på skärmen.
- I annat fall har Rover kommit ”hem”. Visa då meddelandet “Rover kom hem” på skärmen.
- I båda fallen ska antalet vandrade kvarter skrivas ut på skärmen.
- Kom ihåg att använda Endif i slutet av ”If…Then…Else…Endif”-strukturen.
- Övning 1
- Övning 2
- Övning 3
- Tillämpning