Obligatorisk oppgave 1

Obligatorisk oppgave 1 i INF1510 består av to deler. Den første delen består av å bygge og få godkjent alle kretsene (CIRC-01 til CIRC-14) i oppgaveheftet. Den andre delen består av å gjøre minst to av følgende øvingsoppgaver. (Du kan også være kreativ og definere en egen oppgave i stedet for en av disse, men den må i så fall godkjennes av gruppelæreren.)

1. Stoppeklokke

I denne oppgaven skal du lage en stoppeklokke.
Kravene til stoppeklokken er følgende.
  • Visning av tid
    • Stoppeklokken skal vise tiden med 1 sekunds nøyaktighet
    • Klokken skal nullstille seg selv hvert minutt (den skal gå fra 59 sekunder til 0 sekunder, ikke 60)
  • Lydsignaler
    • Klokken skal hvert 10. sekund avgi et lydsignal
  • Brukergrensesnitt
    • Brukeren skal kunne starte, stoppe og nullstille stoppeklokken

Tilleggskonkurranse:

  • Store mengder ære og berømmelse går til byggeren av stoppeklokken med beste ubrukelige tilleggsfunksjonalitet.

2. Reaksjonshastighetspill

Her skal du lage et lite spill som består av følgende.

  • Tre trykknapper; en knapp til hver spiller og en reset-knapp i midten.
  • En multifarget LED i midten.
  • Tre LEDer til hver spiller, som angir poengsum.

Lag et program slik at spillet foregår på følgende måte.

  • Reset-knappen i midten nullstiller alt slik at spillet kan begynne.
  • Hvis LEDen i midten blinker gult, så må spillerne gjøre seg klare.
  • Hvis LEDen i midten er avslått, så er spillet i gang. Nå vil LEDen i midten enten bli grønt eller rødt, og dette skal være tilfeldig.
  • Hvis LEDen i midten lyser grønt, så vil spilleren som trykker ned sin knapp først, få ett poeng. Deretter er det en kort pause og spillet fortsetter.
  • Hvis LEDen i midten lyser rødt eller er avslått, så skal ingen trykke ned en knapp, men hvis noen gjør det, så mister vedkommende (dette kan godt være begge) ett poeng.
  • Når en spiller har fått tre poeng, har denne spilleren vunnet spillet.

Tilleggskonkurranse:

  • Store mengder ære og berømmelse går til den som legger til beste ubrukelige tilleggsfunksjonalitet.

3. Styring av LED-display

I CIRC-10 lagde du en temperaturmåler som viste temperaturen i rommet med to desimalers nøyaktighet. Temperaturen ble skrevet ut i seriell-konsollen. Dette er kun nyttig i en debugging og læringssituasjon, og nå må vi tenke litt på vanlige brukere også. En vanlig bruker vil helst se resultatet direkte på enheten. En grei måte å gjøre dette på er å benytte seg av 7-segments displayer. I denne oppgaven skal vi benytte et 4x7-segments display. For å få displayet opp og gå kan man enten prøve seg frem eller lese dokumentasjonen.

Oppgave A

Få liv i et 4x7-segments display. Displayet består av 4 plasser som hvert har 7 LEDer, og med disse syv LEDene kan man representere tall fra 0 til 9. Men en liten ting som er kinkig er at displayet kan kun bruke en LED om gangen. For å vise tallet 0 trenger man å aktivere hele 6 LEDer. Hvordan kan man da vise tall? For å få til dette må vi rett og slett lure vår egen persepsjon, og tenne og slukke en og en LED i en så rask hastighet at øyet vårt ikke kan oppfatte at ikke alle er tent samtidig. For å vise tallet syv må vi aktivere LED A, B og C For å demonstrere at du har klart å gi liv til displayet, vis frem et tall som er større enn 1000 og mindre enn 9999.

Oppgave B

Nå kan du koble til temperatursensoren slik du gjorde i CIRC-10, men i stedet for å vise temperaturen i seriell-konsollen, skal den vises frem på displayet med to desimaler. For enkelhets skyld trenger du ikke ta høyde for negative temperaturer (selv om det er vinter) siden dette krever mer kompleks kode. For å få godkjent denne oppgaven holder det å vise frem oppgave B. (Oppgave A er bare med slik at du får en bedre mulighet til å lære deg å bruke displayet.)

Hint: 4x7 segments display kan lånes av Jan Ole Skotterud (janoleos); det er 5 stk. tilgjengelige. Dataark: http://folk.uio.no/janoleos/4x7segment.pdf

4. Processing og Arduino

Last ned og pakk ut denne filen og åpne programmet i Processing. Kjør programmet og se hva det gjør. Ta en nærmere titt på koden. Processing er i bunn og grunn Java, og programstrukturen minner veldig om den vi er vant til fra vår kjære Arduino IDE. Prøv å forstå hvordan lyden og bildet genereres (husk: APIer og Google er dine beste venner).

Oppgave: Legg til en form for Arduino-kontroll til dette "instrumentet". Frekvens, volume, farge - alt er tall - bruk fantasien!

Tips 1: Sjekk ut Serial.write() funksjonen i Arduino og processing.serial.* klassen i Processing.

Tips 2: Lek med Processing-koden du har fått. Bytt verdier, fjern linjer, vær nysgjerrig! Oppgaven går ut på å vise at du kan sende beskjeder fra Arduino til andre programmer; eksempelprogrammet er bare til inspirasjon.