Koda med TI: TI-84 Plus CE-T & 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 i löpande text ofta bara kalla den för ”hubben”. Allmänna instruktioner, t.ex. hur man ansluter räknaren till hubben mm, se Kom igång-guiden till TI-Innovator System.
Syfte:
- Använda programeditorn hos TI-84 Plus CE-T
- 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 TI-84 Plus CE-T. Starta räknaren. På hubben lyser den gröna lysdioden som indikerar att hubben är redo.
När du lär dig att programmera på räknaren med hubben ansluten så lär du dig faktiskt att programmera i två olika världar som hänger ihop – själva räknaren och TI-Innovator Hub.
Steg 2
När du skriver att program på räknaren så använder du tangenten [prgm] för att infoga kommandon och instruktioner i programmet.
- 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 också i programmenyns undermeny HUB.
Steg 3
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, tryck på tangenten [prgm] och välj NY i menyn.
- Skriv sedan ett namn på programmet. Vi använder här namnet LIGHT1. Tryck sedan på [enter].
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 LED-lampan.
För att skapa denna sats (programrad) måste du
- Trycka på tangenten [prgm] och välja HUB
- Välja 1:Send(”SET i menyn
- Välja LIGHT i menyn
Steg 5
- Komplettera satsen genom att slutföra kommandot
- För att komma åt ON och TIME, tryck på [prgm] och välj sedan HUB-
menyn och välj sedan undermenyn SETTNINGS. - Mata in 5, som står för 5 sekunder.
- För att komma åt ON och TIME, tryck på [prgm] och välj sedan HUB-
Send(”SET LIGHT ON TIME 5”)
Göm inte att avsluta programsatsen med ett citattecken (tryck på [alpha] [+]) och en slutparentes. Om du behöver skriva ett blanktecken så tryck på [alpha] [0].
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
Köra programmet
- Se till att hubben är ansluten till räknaren.
- Tryck på [alpha] [graph] (F5*) och välj sedan Kör program. Detta avslutar programeditorn och kör programmet på startskärmen.
*F5-menyn introducerades först i OS 5.3 och är bara tillgänglig från programeditorn. Den innehåller några användbara editerings verktyg som Ångra rensa, Klippa ut, Kopiera, Klistra in med mera. Detta är lättillgängliga verktyg som du uppskattar när du arbetar med mer komplexa program.
Steg 8
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.
Räknaren visar ”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 9
För att lägga till en sats om detta så måste vi redigera programmet.
- Tryck på [prgm] och välj REDIGERA
- Välj programmet LIGHT1 från listan.
- Med pilknappen går du till slutet av programkoden.
- Tryck på [enter] för att lägga till en ny programrad.
- Lägg till satsen WAIT 5 genom att trycka på [prgm] och gå med pilknappen ner till WAIT 5 på menyn CTL (CTL är förkortning av CONTROL). Tryck därefter på enter 5.
Avsluta editorn och kör programmet igen. Om programmet var den sista posten på startskärmen så kan du trycka på [enter] för att köra programmet igen. Programmet kommer att avslutas ungefär samtidigt som det röda ljuset slocknar.
Steg 10
Utvidgning:
Man kan ta bort TIME-delen i Send-instruktionen och istället kontrollera ”timingen” med Wait-kommandot på räknaren. Eftersom lysdioden kommer att
vara påslagen hela tiden så måste du också stäng 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.
Övning 2: Input och färg
LärarkommentarerI denna andra aktivitet för kapitel 1 kommer du att lära vad Input betyder i ett program när man ska styra en lysdiod (COLOR) hos hubben.
Syfte:
- Använda Promt- och Input-satsen
- Styra lysdioden COLOR
- Använda den nya F5-menyn (tryck alpha +graph) i programeditorn för utvidgade editeringsfunktioner
Steg 1
Lysdioden COLOR har tre ”färgkanaler”: röd, grön och blå. Den benämns ofta
som ”RGB LED”. Datorskärmar, mobilskärmar och TV-skärmar använder en
många sådana här lysdioder för att skapa bilder.
För att få en speciell färg måste du mixa till de rätta mängderna av varje
enskild färg. Många andra färger är möjliga med den rätta mixen av dessa tre
grundfärger.
Steg 2
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.
Dessutom så kommer du förutom att studera lysdioden att för första gången
visa hur du skriver ett kommando som accepterar ett ”input” från användaren
när programmet körs. Detta kommando heter Prompt.
Steg 3
Prompt-satsen tillåter användaren att mata in ett värde för en variabel när programmet körs. Det kallas Prompt därför att det tillhandahåller ett synligt meddelande (namnet på variabeln och ett frågetecken) när det processas. Som svar på frågan så matar användaren in ett värde på variabeln.
En möjlig syntax på satsen
- Prompt <variable>
- Prompt <variable1>, <variable2>, <variable3>, …
De numeriska variablerna hos TI-84 Plus CE-T är bokstäverna A-Z och θ (theta). Dessa kan lagra decimala värden eller komplexa tal.
I detta program ska vi använda Prompt för att fråga om numeriska värden på röd, grön och blå (tal mellan 0 och 255) och sedan skicka dem till lysdioden. För att vara effektiva så ska vi ”prompta” dessa värden i en sats.
Steg 4
Skriva in Programmet COLOR1
- Tryck på [prgm] och välj NY/1:Skapa ny och skriv sedan in namnet COLOR1 på programmet. Tryck sedan på [enter].
- Lägga till satsen ClrHome genom att först trycka på [prgm], gå med piltangenten till I/O och välj sedan 8:ClrHome. Tryck sedan på [enter].
- Lägg till en Prompt-sats genom att trycka på [prgm] och gå med piltan-genten till I/O och välj sedan 2:Prompt.
- Lägg till variabeln R genom att trycka [alpha] [R].
- Lägg sedan till variablerna G och B och se till att du har kommatecken mellan variablerna. Tryck sedan på [enter].
Steg 5
Nu ska vi använda Send(-kommandot för att skicka en instruktion till TI-Innovator hub.
- Tryck på [prgm] och välj HUB-menyn.
- Välj Send(”SET… och välj sedan COLOR
OBS: Du kan inte skicka variablerna R G B som färgvärden i Send(-satsen eftersom bokstäverna R, G och B skickas till hubben snarare än värdena på variablerna.
Vi behöver använda en specialfunktion, eval( ), som är utformad för att konvertera värdet av ett uttryck hos räknaren till en strängrepresentation som TI-Innovator kan processa.
Steg 6
Vi bygger nu ut programmet:
- Lägg till eval(-funktionen genom att trycka på [prgm], gå sedan till HUB-menyn med piltangenterna och välj där eval(.
- Skriv in bokstaven R och en högerparentes.
- Lägg till ett blanksteg (tryck [alpha][0]).
- Gör samma sak för bokstäverna G och B. Glöm inte att lägga in blanksteg mellan G och B.
- Slutligen skriver du in ett citattecken för strängen och en högerparentes för Send(-kommandot. Se skärmbilden till höger
Steg 7
Den färdiga satsen blir:
Send(”SET COLOR eval (R) Eval(G) eval(B)”)
Steg 8
Kör programmet
Se till att hubben är ansluten till räknaren
För att köra ett program från programeditorn så ska du
- Tryck på [alpha] [graph] som är F5
- Välja 1:Kör program.
Steg 9
Dessa steg avslutar programeditorn och kör programmet på startskärmen
- Du får tre ”promptar” på startskärmen, en för R, en för G och en för B.
- Mata in värden mellan 0 och 255 för varje variabel och tryck på [enter] efter varje inmatning.
- När du har matat in det tredje värdet, titta på färgen på lysdioden på hubben.
Om du vill försöka med en ny uppsättning värden så trycker du [enter] för att köra om programmet. Därefter matar du in tre nya värden.
Övning 3: Input och ljud
LärarkommentarerI denna tredje aktivitet för kapitel 1 1 kommer du att lära dig en annan metod att få användar-input i ett program hur man kan styra ljudet (SOUND) hos hubben.
Syfte:
- Använda Input-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
Input-satsen, liksom Prompt, finns i programeditorns I/O-meny. Den används också för att få input från användaren men den innehåller en funktion som låter programmeraren skapa ett mer meningsfullt meddelande snarare än den enkla “Prompten” som vi studerat tidigare.
Syntax för satsen: Input <Sträng>, <Variabel>I detta program använder vi Input-satsen.
Steg 3
Komma igång med programmet SOUND1
- Starta ett nytt program och döp det till SOUND1.
- Lägg till ClrHome- och Input-satserna från programeditorns I/O-meny.
- Efter Input-kommandot använd [A-lock] (tryck [2nd][alpha]) för att skriva in textsträngen “Frequency? ”.
- Stäng av alfa-låset för att skriva in ett kommatecken.
- Sedan lägger du till variabeln som representerar frekvensen F.
- Tryck på [enter]
- Lägg till ännu en Input-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 F and T.
Slutföra SOUND1-programmet
- Tryck på [prgm] och gå med piltangenten över till HUB-menyn och välj 1: Send(“SET….
- Välj sedan 6:SOUND
- Tryck på [prgm] och gå med piltangenten över till HUB-menyn och välj 6:eval(.
- Lägg till variabeln F och lägg till högerparentes.
- Skriv in ett blankstegstecken (tryck [alpha][0]) och lägg sedan till ännu en eval(-funktion för variabeln T.
- Lägg till variabeln T och en högerparentes.
- Avsluta med citationstecken och en avslutande högerparentes för Send(- kommandot.
Steg 5
Köra programmet
- Tryck på f5 ([alpha] [graph]) och väljs sedan 1: Kör program från menyn.
- 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 gärna 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ämplig tidskontroll
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 Disp och Pause
Disp-kommandot visar ett meddelande på startsidan hos räknaren. Det kan användas för att visa värdet på en variabel, som i Disp X, eller det kan visa en sträng som i exemplet på skärmbilden till höger. Du kan hitta Disp genom att trycka på [prgm] och gå med piltangenten till I/O och välja 3:Disp.
Pause-kommandot visar ett meddelande men stoppar också räknaren från att utföra fler satser innan användaren trycker på [enter]. Du hittar Pause genom att trycka [prgm] och välja 8:Pause i listan.
Steg 3
Skriva kod för programmets startskärm
- Skapa ett nytt program med namnet APPLIC1.
- Lägg till en ClrHome-sats från programeditorns I/O-meny.
- Lägg till Disp genom att trycka på [prgm], gå med piltangenten till I/O, och välja 3:Disp i listan.
- Skriv in programmets titel inom citattecken.
- Lägg till Pause genom att trycka på [prgm] och välja 8:Pause i listan.
- Skriv in texten PRESS ENTER inom citattecken.
Steg 4
Ställa in färger
Först så ställer vi in den röda färgen genom att sätta RGB-värdena till 255, 0, 0.
I vårt exempel använder vi en Wait-sats, som talar om för räknaren att den ska vänta 5 sekunder innan nästa kommando skickas till hubben. Det röda ljuset är då i läget PÅ under denna tid.
Din uppgift är nu att lägga till satser så att lampan lyser grönt, sedan gult och sedan rött igen.
- Ö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 i räknaren genom ett program som gör att den röda lysdioden LIGHT blinkar medan information visas på räknarskärmen.
Syfte:
- Lära sig att använda For loop-instruktionen
- Få lysdioden att blinka
- Använda Disp-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…End-loop.
Steg 2
Komma igång med programmet:
- Starta ett nytt program med namnetLIGHT2.
- Mata in ClrHome på första raden i programmet genom att trycka på [prgm], gå med piltangenten till I/O-menyn och välj där ClrHome.
- Mata in Disp på andra raden genom att trycka [prgm], gå med piltangenten till I/O-menyn och välj där 3:Disp.
- Lägg till BLINK inom dubbla citattecken.
- Mata in Input genom att trycka [prgm], gå med piltangenten till I/O-menyn och välj där 1:Input.
- Skriv in ANTAL GÅNGER? inom citattecken.
- Lägg till ett kommatecken och variabeln N.
Steg 3
Lägga till For-loopen:
- Lägg nu till For(-satsen genom att trycka [prgm] and välj 4:For(.
- Lägg till satsens argument (I,1,N). Denna sats betyder “För I som går från 1 to N med ett steg i taget.”.
Steg 4
- Tryck [enter] några gånger för att skapa tomma rader. Vi ska senare fylla dessa rader med programkod. Lägg sedan till End satsen i programmet.
- Oroa dig inte om hur många blankrader det finns. 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 and End kallas “loopkropp”. ("loop body" på engelska) Tack vare For-loopen så körs denna del av koden N gånger.
OBS: För att infoga en tom rad i programmet så öppnar du f5-menyn (tryck [alpha] [graph]) och välj 3:Infoga rad).
Steg 5
Vi vill att lysdioden ska tändas och sedan släckas N gånger. Vi vill också att räknaren ska visa antalet tändningar/släckningar.
Vi startar då loopkroppen med Disp I, som är Loop-kontrollvariabeln.
Steg 6
Nu kan vi lägga till satser för att tända och släcka lysdioden:
- Lägg till Send(SET LIGHT från programeditorns HUB meny.
- Lägg till ordet ON I listan på HUB-menyns undermeny Settings.
- Glöm inte att avsluta med citattecken och högerparentes och tryck [enter].
- Lägg till Wait (i sekunder) från programeditorns HUB-meny för att få räknaren att vänta innan du skickar nästa kommando. I programmet använder vi 1 sekund men du kan använda vilket värde du vill, även värden med decimaler.
- Kopiera Send(-kommandot genom att använda f5-menyn (tryck [alpha] [graph]) och välj alternativ 5 och 6. Ändra sedan ON till OFF.
- Kopiera Wait-satsen på samma sätt som ovan
- Glöm inte att avsluta med citattecken och högerparentes.
- Kör programmet genom att använda f5-menyn (tryck [alpha] [graph]) och tryck sedan 1: Kör program. Du kommer att se hur ljuset blinkar och räkneverket uppdateras efter antalet blinkningar.
Steg 7
Här är en utmaning: lägg till Input-satser i början av programmet (före For(- satsen) för att ställa in tiderna för de två Wait-värdena och använd sedan dessa variabler istället för tal i dessa satser.
Kör programmet igen. Observera blinkningarna och värdena som visas på räknarskärmen.
Ö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 i lysdioden COLOR hos hubben.
Syfte:
Använda For-loopar för att styra var och en av de tre färgkanalerna hos lysdioden COLOR.
Steg 1
Steg 2
Skapa ett program som färgväxlar
- Starta ett nytt program och kalla det COLOR2.
- Lägg ClrHome och Disp med en rubrik för programmet.
- Lägg till Input och inom citattecken 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 (STEP) 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
- När du arbetar med längre och mer komplicerade program är det praktiskt att skriva in både For-satsen och motsvarande End-sats samtidigt. Annars kan man lätt glömma bort End-satsen. Lämna bara några tomrader i programmet genom att trycka på [enter] några gånger.
Steg 5
Slutföra första loopen:
- Lägg till återstående delar i For(-satsen för att få I att gå från 0 till 255. Vi använder loopvariabeln I and lägger till stegvariabeln S.
- Lägg till the Send(“SET COLOR-satsen från programeditorns HUB-meny. Tryck då [prgm], gå till HUB med piltangenten och tryck [enter].
- Använd the eval(-funktionen från HUB menyn för variabeln I för att styra den röda kanalen, and ställ in kanalerna för GREEN and BLUE till 0.
- Kom ihåg att avsluta med citattecken och högerparentes.
- Send-satsen ska följas av en Wait-sats där man använder variabeln W som du använde i Input-satsen tidigare.
Steg 6
- Efter End i denna första For-loop, kan du använda Pause-satsen med ett meddelande så att du kan betrakta det starka röda ljuset från lysdioden.
Steg 7
Lägga till den gröna ljusloopen
Nu ska vi skapa en annan For-loop för att lägga till GREEN till lysdioden. Men
denna gång vill vi bara styra GREEN-kanalen och inte röra RED-kanalen. 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 GREEN-kanalen och påverkar inte RED- och 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 Send(“SET COLOR.GREEN eval(I)”).
- Lägg till Wait-satsen i loop-kroppen med variabeln W.
- Lägg till Pause-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)
Man startat vid 255 och i varje steg i loopen drar man bort S tills variabeln I är mindre än 0 när loopen slutar. Obs: Se till att du använder tangenten [(-)] och inte tangenten för subtraktion. Det orsakar ett fel!
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: Loopar 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 steg in 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å hare 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 höra 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 toner i en oktav.
Steg 3
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.28Hz. Det är 12 steg (halvtoner) mellan dessa två toner och i varje steg ökar frekvensen med faktorn 21/12.
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 .
Steg 4
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 [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 5
- Starta ett nytt program och kalla det SOUND2.
- Lägg till kommandona ClrHome and Disp och skriv in meddelandet inom citattecken.
- Tilldela startfrekvensen värdet 261.64 och lagra värdet i variabeln F. Använd tangenten [sto→].
- Variabeln F representerar frekvenserna hos var och en av de 12 tonerna i skalan.
Steg 6
Ställa in For-loopen:
- Lägg till en For( loop som går från 1 till 12 (för de tolv tonerna).
- Lägg till en Send( “SET SOUND-sats från HUB-menyn i programeditorn.
- Lägg till eval( för variabeln F enligt skärmbilden. Var noggrann med citattecken och parenteser!
Steg 7
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.
- Avsluta editorn och kör sedan programmet.
Steg 8
Modifiera programmet:
Försök att lägga till TIME-parametern till SEND( “ SET SOUND-kommando 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 räknaren med hubben är programmerarens uppgift.
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?
Tillämpning: Datormusik
LärarkommentarerHär kan du använda slumptalsgeneratorn hos TI-84 Plus CE-T 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 Disp.
Steg 2
I denna applikation ska vi använda slumpHel(-funktionen hos
TI-84 Plus CE-T för att alstra en slumpmässig ton på musikskalan.
- Från startskärmen hittar du slumpHel( genom att trycka på [math] och där välja SAN (förk. Sannolikhet) och sedan 5:slumpHel i listan.
- Detta kommando behöver två eller tre argument, Du får en guide till att börja med.
- Sedan fyller du i undre och övre gräns för dina slumpmässiga heltal. Lämna n tomt. Det används för att skapa en lista med
n slumptal. - Välj Klistra in för att kopiera in kommandot på startskärmen och tryck sedan på [enter]. Nu alstras ett heltaligt slumptal.
- För att få ett nytt slumptal med andra gränser går du med piltangenten ↑ till föregående kommando och trycker på [enter] igen. Ändra gränserna och tryck på [enter]. Om du behåller gränserna trycker du bara på [enter].
Steg 3
Vi ska nu kombinera funktionen 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:
Som du kan se i tabellen till höger så är frekvensen hos tonen A i första oktaven 55Hz. 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 55 Hz eftersom 2^0 är 1.
Använd ett Wait-kommando för att synka räknaren 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 och introducera Output(-satsen i TI-Basic som illustrerar en teknik att visa tal som har olika längd (olika antal siffror).
Syfte:
- Läsa av ljusintensitetsgivaren
- Introducera While loopen
- Använda Output(-satsen
- Introducera toString( och
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 ljussensorn och använda ett värde därifrån i vårt program för att bygga en ”ljusmätare”. Ljussensorn 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.
- Lägg till kommandona ClrHome och Disp för att visa programrubriken. Se skärmbilden till höger.
- Tryck [prgm] och gå med piltangenten till HUB menyn.
- Välj 2: Send(“READ… och sedan 1: BRIGHTNESS.
- Tryck [prgm] och gå med piltangenten till HUB menyn.
- Välj 5:Get(. Mata in variabeln B och en högerparentes.
Steg 3
Hur det fungerar:
- READ BRIGHTNESS ger information till hubben att läsa nivån på ljusintensiteten och lagra det värdet i ett inbyggt buffert- minne
- 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-84 Plus CE-T. B kan ersättas av någon av räknarens numeriska variabler, A...Z och Ɵ (theta).
Steg 4
While-loop:
While…End-loopen (CTL-menyn 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. Relationsoperatorer och logiska opera- torer finns i test-menyn hos räknaren (tryck [2nd][math]).
- Relationsoperatorer är =, ≠, <, >, ≤, och ≥.
- Logiska operatorer är and, or, not, och xor (på svenska och, eller, inte och xeller)
Dessa operatorer kan användas tillsammans för att bygga upp sammansatta villkor som x>0 och y>0.
Steg 5
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.
Ett annat sätt att avbryta eller avsluta en pågående programkörning är att trycka på tangenten [on]. Då får du ett felmeddelande: FEL: BRYT i skärmens överkant och du har sedan möjlighet att Avsluta programkörningen och återgå till startskärmen eller Gå till programeditorn och den plats i programmet där tryckningen på tangenten [on] stoppade programkörningen. Det är också ett bekvämt sätt att fortsätta med redigeringen av programmet.
Steg 6
- Innan Send(-satsen i ditt program ska du lägga till satserna:
2→B
While B>1 (använd [test]-menyn för tecknet >)
- Dessa satser startar (initierar) loopen. Så länge som villkoret B>1 är sant kommer loopen att fortsätta att läsa av ljussensorn. Så fort villkoret blir falskt, t.ex. om du täcker sensorn med din hand så att inget ljus träffar den, kommer loopen och programmet att av-slutas.
- Slutet (End) av While-loopen måste också skrivas in. Lägg till en End-sats nedanför Get(-satsen. End finns i CTL-menyn.
Steg 7
- Lägg till Output(-satsen efter Get(-satsen och före End i loopen. Tryck [prgm] och gå med piltangenten till I/O i menyn och väljs där 6: Output(.
- Output( satsen ger dig utmärkt kontroll var på startskärmen något ska visas. Strukturen hos satsen är: Output(<rad#>, <kolumn#>, <sträng eller variabel>).
Steg 8
Exempel:
- Output(3,7,“HELLO”) placerar bokstaven “H” på rad 3, kolumn 7 på startskärmen och resten av bokstäverna i ordet följer efter “H”.
- Output(5,10,B) placerar värdet på variabeln B med start på rad 5, kolumn 10 på startskärmen och resten av siffrorna följer därefter.
Steg 9
- Avsluta programeditorn och kör programmet med hubben ansluten.
- Du kommer att se programrubriken högst upp på skärmen och ett värde, som visar den avlästa ljusintensiteten, mitt på skärmen. Tyvärr är det så att de värden du ser inte är korrekta!
Output(-satsen tar inte bort avslutande siffror när ett kortare tal (färre siffror) visas efter ett längre tal (fler siffror). Om t.ex. ett värde 1.23456 visas och nästa värde är 55, så kommer du att se 5523456 på skärmen. Vår slutliga modifiering av programmet visar på ett listigt sätt att korrigera för detta problem.
Steg 10
För att korrigera för detta problem så konverterar man variabeln B till en sträng och lägger till lite extra mellanslag I slutet av strängen för att helt och hållet få bort det föregående visade värdet. Vi använder då i Output-satsen kommandot
toString( som du hittar I programeditorns I/O-meny.
Den slutliga Output-satsen är då: Output(5,10,toString(B)+“ ”)
OBS! Det ska vara ca 10 mellanslag (tryck på [alpha][0]) mellan citationstecknen. Se skärmbilden till höger.
Steg 11
När du nu kör programmet kommer du att se att visa värden är kortare än andra beroende på att tomutrymmet som vi adderade till strängrepresen- tationen hos B tar bort de föregående siffrorna.
Sammanfogning:
“+”-tecknet i Output(-satsen används inte för addition utan det används för att sammanfoga (kombinera) två strängar (teckenuppsättningar). Tomutrym-met inom citattecken läggs till i slutet av strängrepresentationen av variabeln B.
Övning 2: INTENSITET och LJUS med IF, WHILE
LärarkommentarerI denna andra aktivitet i kapitel 3 ska vi bygga en automatisk ljus- omkopplare som ”svarar på” omgivande ljus och mörker genom att tända och släcka hubbens röda LED.
Syfte:
- READ BRIGHTNESS (Läsa intensitet)
- Använda en oändlig While loop
- Använda If…Then…Else…End för att beroende på ljusintensiteten sätta på och släcka ljuset
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 auto-matiska ljusomkopplare.
Vårt program kommer att läsa av (READ) 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 en viss nivå. Använd din intensitetsmätare från förra aktivi-teten för att ett lämpligt medelvärde mellan ljust och mörkt.
Steg 2
Komma igång med programmet:
- Starta ett nytt program och döp det till BRIGHT2.
- Lägg till kommandona ClrHome och Disp enligt skärmbilden till höger.
- Initiera variabeln B genom att lägga till satsen 2→B.
- Lägg till en While-loop med villkoret B>1. (Intensitetsvärdet är väldigt lågt.)
- Lägg till End för att stänga while-loopen.
För att avsluta loopen och programmet kan du täcka över ljussensorn med handen.
Steg 3
- I While-loopkroppen ska du nu lägga till Send(“READ BRIGHTNESS”) och Get(B) från programeditorns HUB-meny. Se skärmbilden.
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>
End
Du kan lägga till fler tomma rader genom att trycka på [2nd][ins][enter] eller använda f5-menyn ([alpha][graph]). Välj då alternativet Infoga
rad ↑
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. Använd din intensitetsmätare från förra aktiviteten för att bestämma ett gränsvärde för ljus-mörker.
Du kan förbättra programmet genom att använda en Input-sats för ”tröskelvärdet”. Se bara till att använda Input-satsen innan While-loopen börjar.
Operatorn < når du från testmenyn genom att trycka på [2nd][math]).
Steg 6
- 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 programmet med hubben ansluten.
- Kontrollera det ljus som träffar givaren och observera den röda lysdioden på hubben tändas och släckas.
Man kan öka tydligheten i programmet om du lägger till en Output-sats (se föregående aktivitet; Kapitel 3, Övning 1) för att visa värdet på B på räknarskärmen och även lägga till programsatser i If Then Else-blocken för att visa om ljuset är PÅ eller AV. Du kan använda något liknande som det här:
Output(9,1,“ON ”) och Output(9,1,“OFF”)
Avslutningsvis: Ljuset kommer att vara ”ON” när programmet avslutas. Varför? Lägg till en programsats så att ljuset säkert är ”OFF”.
Övning 3: INTENSITET och FÄRG
LärarkommentarerI denna tredje aktivitet i kapitel 3 ska vi använda oss av ljusintensi- tetsvärdet för att styra lysdioden RGB.
Syfte:
- Läsa ljussensorn 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 är, 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). Tänk på denna apparat som en glödlampa med en automatisk dimmer.
- Ljusintensitet B har ett värde i intervallet 0-100.
- COLOR C (alla tre färgkanalerna) har värden i intervallet 0-255.
- Hur omvandlar vi från B till C?
Steg 2
Komma igång med programmet:
- Starta ett nytt program och döp det till BRIGHT3.
- Lägg till kommandona ClrHome och Disp för att visa program- rubriken. Se skärmbilden till höger.
- Ställ in variabeln B.
- Lägg till en While-loop för att läsa ljusintensiteten genom att använda SEND (”READ BRIGHTNESS”) och få värdet för ljusvariabeln med Get(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. Omvandlingsfaktorn är 2,55, vilket betyder 2.55*B→C. Det betyder att när B = 100 är C = 2,55*100=255.
- Lägg till en Send(”SET COLOR-sats för End i loopen. Denna sats styr intensiteten hos lysdioden.
Steg 4
- 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 ljussensorn på olika saker. Kontrollera intensiteten hos lysdioden (COLOR LED) på hubben.
- För att avsluta While-loopen och programmet så kan du täcka givaren helt och hållet så att värdet på B understiger 1.
Du kanske vill lägga till några Output(-satser till programmet för att visa värdena på B och C.
Men vänta! Resultatet blir fel! Ju mörkare det är i rummet, ju starkare ska lysdioden lysa. Hur kan man fixa till det?
Steg 5
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 intensiteten som av- känns av en ljusgivare.
Syfte:
- Skriv ett program som omvandlar ljusintensitet till ljud
- Granska frekvenser för musik- toner och ”tolfte roten ur 2”-regeln
Steg 1
Skriv ett program som läser av INTENSITETEN hos en ljussensor och spelar upp olika ljus 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 ljus 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 skapar tonerna och den andra ljudintensiteten). Du kan variera mängden ljus som uppfattas av ljus- givaren (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 APPLIC3.
- Lägg till kommandona ClrHome och Disp för att visa rubriken på programmet. Se skärmbilden till höger.
- Initiera variabeln B genom att lägga till satsen 2→B.
- Lägg till en While loopI för att läsa av (Read BRIGTHNESS) ljusgivaren och med kommandot Get 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 toner 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 heltalsdel( ) eller funktionen avrund( ,0).
heltalsdel(X)→X ger som resultat det största heltalet mindre än X.
avrund(X,0)→X avrundar X till närmaste heltal.
- Ö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-84 Plus CE-T
- Använda kommandot Send( för att ANSLUTA TI-Innovator Rover till hubben.
- Få Rovern att röra sig FRAMÅT, BAKÅT, ÅT HÖGER, ÅT VÄNSTER
Steg 1
Komma igång
- När du skriver ett nytt program eller redigerar ett existerande program så kan du hitta Rover-kommandon genom att trycka på tangenten [prgm], välja Hub-menyn och sedan 7:Rover (RV)…
- Vissa delar av den slutliga instruktionen, t.ex. numeriska värden och vissa parametrar, matas in direkt från räknarens tangentbord eller också så väljs de från en annan Rover-meny.
- Vissa Rover-kommandon innehåller avslutande citattecken och parenteser och andra gör det inte. Detta indikerar att det ska skrivas in mer inom kommandot. I båda fallen så måste alla kommandon avslutas med avslutande citattecken och högerparentes.
Steg 2
Send(“CONNECT RV”)
RV är namnet på Rovern.
För att skapa denna sats:
- Tryck på [prgm]-tangenten och välj 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
Nu ska du lägga till en Paus-sats. Detta kommando pausar programmet och väntar på att användaren ska trycka på tangenten [enter].
- Tryck [enter] för att flytta till en ny rad i programmet.
- Tryck på tangenten [prgm] och gå till CTL-menyn där du väljer Pause.
- Lägg till ett lämpligt meddelande efter pauskommandot med hjälp av alpha-tangenterna. Du kan också via programmet TI Connect skriva in programmet och sedan skicka det till räknaren. Då kan du använda bokstäverna Å Ä och Ö.
När du kör programmet hör du ett “beep” 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ör igång Rover
- Tryck nu [enter] i slutet av raden för Paus-satsen för att skapa en ny rad. Vi ska där lägga in ett kommando som får Rover att röra sig framåt.
- Tryck på [prgm] > Hub > Rover (RV)… och välj sedan Drive RV menyn. Se skärmbilden till höger.
- Välj FORWARD från Drive RV-menyn.
Steg 5
Observera att kommandot som klistras in i programmet saknar avslutande citattecken och parentes. Vi behöver fortfarande lägga till information.
Steg 6
- Lägg till talet 1 och avslutande citattecken och parentes. Citattecknet får du genom att trycka [alpha][+] och högerparentesen är placerad ovanför tangenten för 9.
- Avsluta programeditorn ([2nd][quit]) och kör programmet. Se till att du har ca 30 cm fritt utrymme framför Rover.
Om allt är väl, bör sedan Rover gå 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 trycka
prgm > Hub > Rover (RV)… > Drive RV… > BACKWARD. - Lägg sedan till “1”, ett avslutande citattecken och en högerparentes precis som du gjorde i FORWARD-satsen.
Avslutar editorn och kör programmet igen. Denna gång bör Rovern 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 vänster och höger. Lägg dessa två kommandon till ditt program och köra programmet igen. 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.
Skriv nu in programmet i din räknare 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?
Steg 10
Använda den nya tilläggsmenyn för programeditorn
Öppna den nya tilläggsmenyn för programeditorn genom att trycka på alpha-F5. Du kan använda denna meny för att kopiera en linje (5: Copy line) och klistra in raden (6: Paste line Below) under den nuvarande markörraden. Du kan också ångra och infoga rader och köra programmet från den här menyn.
Övning 2: Körfunktioner
LärarkommentarerI denna övning ska du undersöka några av körfunk- tionerna. De fyra körkommandona i övning 1 innehöll inte avslutande citattecken och parenteser. Det beror på att det finns andra val du kan göra som tillägg till kom- mandona. 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 så här: prgm > 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 räknarvariabel eller om du vill använda resultatet från ett uttryck.
Steg 3
SPEED och TIME-program
- I programmet till höger finns detta kommando: 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 plus avslutande citattecken och högerparentes. Ordet DEGREES behövs inte men är tillgängligt i “RV Settings…-menyn.
Du kan specificera vinkelmåttet i RADIANER or NYGRADER men dessa enheter måste ställas in på räknaren 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 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.
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 det var på väg när kommandot ”CONNECT RV” angavs.
Det förvalda vinkelmåttet är DEGREES 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å räknaren 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 ett nytt program.
- Lägg till en For loop för att få Rover att röra sig i ett slumpmässigt mönster. Kom ihåg att de är en bra idé att nu lägga in End hos For-loopen i koden. Risken är stor att du annars glömmer det. Du kan alltid lägga till rader till loopkroppen om du behöver. Obs: For(- och End-kommandona finns i kontrollmenyn (CTL).
Steg 6
- I loopkroppen lägger du till satsen om att röra sig FORWARD.
- Låt sedan Rover vrida sig i en slumpmässig riktning genom att addera kommandot slumpHel(0,360) → H.
- 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: prgm > 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 lysdioden 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 räknaren 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. Wait hittar du i HUB-menyn.
- Gör nu en testkörning av programmet.
Observera att lysdioden fortfarande är tänd. Vi måste se till att den stängs av när Rover har stannat.
Steg 10
- 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).
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 konstruera en polygon där användaren anger längden på en sida (i 'Roveren- heter') och antalet sidor hos polygonen. Rover kommer sedan 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 räknarvariabel eller ett uttryck till en sträng som sedan skickas till TI-Innovator™ Hub. I ljudprogrammet som visas till höger anger användaren en frekvens för variabeln F. Funktionen eval(F) konverterar värdet till en sträng som hubben kan bearbeta.
Steg 2
Skriv ett program som frågar efter längden på en sida och antalet sidor hos polygonen och flyttar sedan 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:
Input “SIDANS LÄNGD?”,L
Input “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 aktivitet för kapitel 5 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-84 Plus CE-T
- Använda kommandot Send( för att ANSLUTA TI-Innovator Rover till hubben.
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 programmeras att ändra riktning för att undvika hindret.
Först ska vi skriva ett testprogram för att undersöka hur avståndsmä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å räknarskä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. Det börjar med kommandot ClrHome. Lägg därefter till kommandot Send (“CONNECT RV”) från prgm > 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 D för att registrera det uppmätta avståndet.
- Initiera D till 1.
- Välj While från prgm > CT-menyn. Koda så att While-loopen fortsätter så länge som D är större än 0,1.
Steg 4
Loopkroppen
- Kommandot READ RV.RANGER hittar du här: prgm > Hub > Rover (RV)… > Read RV Sensors….
Steg 5
- Välj Send(“READ RV.RANGER”).
- Lägg n u till kommandona:
Get(D)
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 Get( ) kommandot för att få värdet från hubben till räknaren. 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
- Vi använder ett Output( )-kommando för att visa värdet hos D i en bestämd position på räknarskärmen.
- Lägg till ett End-kommando.
Steg 7
Kör programmet
- När programmet körs så visar räknarskärmen ett värde. Rör din hand framför Rover så att den 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 avstå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 avstå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örflyttning i själva räknarprogrammet
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).
- Kom ihåg att avsluta (End) For( -loopstrukturen.
Steg 3
Precis som i föregående övning så använder vi variabeln D för avståndet från Ranger till ett hinder.
- Initiera D till 1 och starta en While D > 0.25-loop.
Observera att det finns två End i koden. Ett är för For-loopen och det andra för While-loopen.
Steg 4
- Vi ska nu infoga koden i While-loopens kropp. Om du inte har tillräckligt med tomma rader i ditt program så kan du placera markören i början av den rad där koden ska infogas. Tryck [2nd] [ins]) och tryck sedan på [enter]. Alternativet, kan du tryck på [alpha] F5, och välja Insert Line Above.
Steg 5
- Lägg till kommandot Send(“READ RV.RANGER”).
- Använd Get(- kommandot för att lagra i variabeln D.
Detta fullbordar While-loopen. Rover rör sig FORWARD 10 meter, och While-loopen övervakar avståndet. Om så önskas, lägg till en Output( -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 innan den flyttar 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:
- LÄSA 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.
- End är slutet av For-loopens struktur.
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 C på räknaren.
Steg 5
- Vi initierar sedan en annan variabel, D, för att få igång While-loopen. D lagrar färgen som Rover “ser” medan den rör sig. Initialt, ställer vi in D att vara samma som C. Därefter startar vi Rover så att den flyttar sig FORWARD.
Steg 6
- Vi kodar nu While-loopen så att den jämför D med C eftersom vi söker efter en ändring i värdet hos D inne i While-loopen. Likhetstecknet når du från [test]-meny (tryck [2nd][test].
- Glöm inte att lägga till en End sats för While-loopen (visas inte).
Steg 7
- Inom While-loopen, övervakar vi färgsensorn så länge som Rover rör sig. Vi lagrar färgvärdet i variabeln D. Loopen avslutas när D (aktuell färg) är olika originalfärgen C.
Steg 8
- I slutet av While-loopen meddelas Rover att stanna och flytta sig åt höger (STOP and go RIGHT). Observera att dessa två satser kommer mellan de två End-satserna I programmet. Den andra End-satsen är slutet av For-loopen så programmet ser till att Rover svänger åt höger fyra gånger när den detekterar en förändring i färgen på ytan.
- 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 (C) igen.
Steg 9
- Testa ditt program på en yta med jämn färg (vit). Placera ett underlag 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 programmet ska slutföras.
Tillämpning: Den krokiga vägen
LärarkommentarerI denna övning för kapitel 5, kommer att 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.
Experimentera med vridningsvinkel och avverkad sträcka för att undersö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änder en annan färg, t.ex. svart, kan du använda READ COLORINPUT.GRAY (eller GREEN eller BLUE).
Steg 2
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:
ClrHome
Disp "COLORINPUT TEST"
Send("CONNECT RV")
While 1
Send("READ RV.COLORINPUT.RED")
Get(R)
Disp R
Wait .25
End
Steg 3
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.
Detta program använder en oändlig loop. För att bryta eller avsluta en programkörning trycker man på ON-tangenten. Man ser då ett felmed- delande högst upp på skärmen och har då två möjligheter att gå vidare: 1: Avsluta och återgå till räknarens startskärm eller 2: Gå till programeditorn och till den plats i programmet där programkörningen stoppades.
- Ö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 Prompt-sats 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.
- Börja ditt program med kommandot ClrHome liksom de andra vanliga instruktionerna.
- Lägg till en Promt-sats för X och Y.
Promt visar namnet på en variabel och ett frågetecken. Mer än en variabel kan efterfrågas i en Promt-sats. - Paus-satsen ger dig tid att placera Rover vid origo och placera den i höger-riktning.
Steg 3
- Lägg till Rover-kommandot för att köra ”TO XY”:
prgm>Hub>Rover(RV)…>Drive RV…>TO XY
Kommandot visas på skärmen till höger som en ofullständig sats.
Steg 4
- X-och Y-koordinaterna måste läggas till och lagras i variablerna X respektive Y. För att TI Innovator-hubben ska kunna använda dessa värden måste du använda eval ()-funktionen två gånger.
- Lägg till eval(X) eval(Y) till kommandot och avsluta med citattecken och avslutande parentestecken.
- Testa nu ditt program. Rover kommer nu att röra sig till de koordinatvärden du matar in.
Steg 5
- Lägg till ett Wait-kommando för att låta Rover röra sig till punkten och se sedan till att Rover återvänder till origo. Använd talen 0 och 0 separerade med blanktecken. Lägg också till en sats för att få Rover att rikta in sig i sin urspungliga riktning (TO ANGLE 0).
- Testa ditt program igen. Den här gången ska Rover röra sig till din inmatade punkt och sedan återvända till origo och ställa sig med nosen i den ursprungliga riktningen.
Ö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”) - Lägg till fyra Input-satser för koordinaterna hos de två punkterna. Kom ihåg att variabler på 84 Plus CE-T bara består av en bokstav.
Vi använder här variablerna X, Y, Z, och W för koordinaterna.
Steg 2
- 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 paus-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 3
- 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.
Steg 4
- 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 på räknaren (Stat Plot)
- 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 L1, och y-koordinaterna i lista L2. 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 i StatPlot ([2nd]-funktion till [y=]).
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.
Välj prgm > Hub > Rover (RV)... > RV setup... > Send ("SET 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. Lägg till avslutande citattecken och en avslutande parentes.
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 (L1). Dess- utom, behövs End i slutet av loopkroppen.
Obs: dim(L1) är antalet element i listan L1.
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.
- Efter inmatning av koden avslutar du redigeringen och kör pro- grammet och ser 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 på (7, 3), som representerar 7 kvarter öster och 3 kvarter norr om skolan. (Överväg gärna förändringar hos denna position.) Bilden till höger är en statistisk 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 CONNECT RV-kommandot. Ställ in Rovers rutnätsstorlek till 5 cm med
Send ("SET RV. GRID. M/UNIT. 05 ").
Tänk på att det här kommandot finns i prgm > 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 5 cm, vilket möjliggör fler rutnätspunkter på ett mindre utrymme.
Steg 3
Initiera variabler
- Spara hemkoordinaterna (7, 3) och startnumret för passerade kvarter (0) i variablerna A, B respektive W. Variabeln W 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.
Låt oss använda 10 kvarter som ett värde för utmattningssträckan. Använd variabeln E för detta värde: 10&rar;E.
Steg 4
- Rover kommer hem när dess position, som vi kallar (X, Y), är (7, 3). Initiera båda variablerna, X och Y, att vara noll.
Steg 5
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 = A och Y = B) eller slutar av utmattning (när W = E). Rover slutar när variabeln W (antalet kvarter som passerats) är lika med det värde som lagras i E.
While-loopen fortsätter så länge som villkoren är falska så vi staller upp motsatta villkor.
While-loopen blir då: While W<E och inte(X=A och Y=B)
Kom ihåg att fasta värden som är relaterade till problemet lagras i E, A, och B.
inte( ) används för att försäkra att programmet fortsätter så länge som Rover inte är ”hemma”. - Kom ihåg att inkludera en End-sats för loopen.
Steg 6
Inne i loopen
- Tillväxten W (antalet passerade kvarter):
W+1→W. - Välj riktning slumpmässigt (norr, söder, öst, eller väst):
- Rover’s TO ANGLE-kommando vrider Rover till en “absolute” riktning: 0 är öst, 90 är norr, 180 är väst, och 270 är syd
- slumpHel(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 D är:
90*slumpHel(0,3)→D
- Vrid Rover till vinkeln D: Send(“RV TO ANGLE eval(D)”).
- 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
Steg 7
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.
Efter loopen
Loopen avslutas på ett av två sätt:
- Om W=E, så slutar Rover sin vandring på grund av utmattning. Visa då “ROVER SLUTAR” på räknarskärmen.
- Om X=A och Y=B, är Rover hemma. Visa då meddelandet “ROVER KOM NU HEM” på räknarskärmen.
- Övning 1
- Övning 2
- Övning 3
- Tillämpning