TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:



Samankaltaiset tiedostot
Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Sulautettujen järjestelmien kilpailutehtävä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

lomake 6 Taitaja 2007 Lajinumero: 06 Kilpailijanumero: 41 Kilpailijan nimi Anonyymi Kilpailija41 Allekirjoitukset

Tietotyypit ja operaattorit

Versio: FIN Langaton painonappi. Käyttäjän käsikirja

Ohjelmointiharjoituksia Arduino-ympäristössä

Etälukija PR Käyttäjäopas. Global Safety & Security Solutions Oy info@globalsafety.fi. PR1000v.2

GSRELE ohjeet. Yleistä

Ohjelmoinnin peruskurssi Y1

Tehtävä 6. MIAC-pohjainen valo/moottoriohjaus

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja.

Listarakenne (ArrayList-luokka)

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjausrakenteet. Valinta:

AUTO3030 Digitaalitekniikan jatkokurssi, harjoitus 2, ratkaisuja

KÄYTTÖOHJE HIRVIMATIC (2V0)

11. Javan toistorakenteet 11.1

Ohjelmoi Arduino Grovella

Käyttö- ja asennusohje

GSMRELE PG-30 v

SAVUKAASUJEN VALVONTAKESKUS 1/6 HYDROSET ER - O2

UNICARD ACR-201 UNICARD 1. JOHDANTO

Taitaja semifinaali 2010, Iisalmi Jääkaapin ovihälytin

Näppäimistö CT Käyttäjäopas. Global Safety & Security Solutions Oy info@globalsafety.fi. CT1000v.5

Muuttujien roolit Kiintoarvo cin >> r;

GSM PUHEVIESTI & SMS HÄLYTYKSENSIIRTOLAITE

Versio 1.0. BLUETOOTH DONGLE, GS-301 GPS JA NAVICORE PERSONAL Asennusohje Windows 2000/XP ja Nokia Series 60 älypuhelimille

OHJE D C.docx

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Harjoitustyö - Mikroprosessorit Liikennevalot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Taitaja2005/Elektroniikka. 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

Java-kielen perusteet

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

NANO90 OHJELMOINTI- JA KÄYTTÖOHJEET

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

PROBYTE GSM ALARM #6d

Osa. Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin:

Kauko-ohjauslaite GSM rele 2011 v

Esimerkki 1: Kahviautomaatti.

NOOX xperio herätyskello valvontakamera

Käyttöohje EchoChime 300 Langaton järjestelmä

Ohjelmoinnin perusteet Y Python

11. Javan valintarakenteet 11.1

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

Käyttö- ja asennusohje

Harjoitus 3 -- Ratkaisut

////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ //-PID säätimellä. #include <EEPROM.h> #include <SoftwareSerial.h>

Ehto- ja toistolauseet

11. Javan valintarakenteet 11.1

Loppukurssin järjestelyt

HF1 laitteen käyttöönotto ja asetukset

Taitaja2007/Elektroniikka

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

TAITAJA 2006 ELEKTRONIIKKAFINAALI

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjeita kirjan tekemiseen

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

ASTIANPESUKONE WD-6 Säätöohjeet

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

Siinä tapauksessa tätä ohjelehtistä ei tarvita.

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Loppukurssin järjestelyt C:n edistyneet piirteet

Ohjelmoinnin perusteet Y Python

Käyttöohjeet. Kytkinmoduuli

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

DIMLITE Daylight. Sähkönumero Käyttöohje

VSP webmail palvelun ka yttö öhje

Käyttö- ja asennusohje

Yleistä. Probyte GSM-PLUG PROBYTE OY

KL1500 Ohjelmointi- ja toimintaohjeet

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Yleistä. Digitaalinen termostaatti PIC-Thermo PROBYTE OY

KÄYTTÖOPAS CR-420 Lue tämä käyttöopas huolellisesti ennen tuotteen käyttämistä.

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

UNICARD CR-211 UNICARD 1. JOHDANTO

Ohjelmoinnin perusteet, syksy 2006

Ohjauspaneeli jännitteettömällä lähdöllä (NO) ja radiomoduuli Chor-palovaroittimen CHOR-WS/WAC-alustaan. Avaa kansi, paina nuolen suuntaan

12. Javan toistorakenteet 12.1

HDHX NEOBASICs5 KAYTTOOHJE BRUKSANVISNING. Fl / SE

5.6. C-kielen perusteet, osa 6/8, Taulukko , pva, kuvat jma

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

12. Javan toistorakenteet 12.1

5.4. Sulautetun järjestelmän C-kielen perusteet. 4/8. Ohjausrakenteet pva

KL1000 OHJELMOINTI- JA KÄYTTÖOHJEET

Lukon asettelu Kotihälytin järjestelmään

1. TEKNISET TIEDOT 2. LED-TOIMINNOT JA SÄÄDÖT

1. Sisällysluettelo 2

Käyttö-ja huolto-ohje Ajastin aikaa FIN

NP-3T DL ohje. Nylund-Group

Transkriptio:

KILPAILIJAN TEHTÄVÄT Kilpailijan nimi / Nro: Tehtävän laatinut: Hannu Laurikainen, Deltabit Oy

Kilpailutehtävä Kilpailijalle annetaan tehtävässä tarvittavat ohjelmakoodit. Tämä ohjelma on tehty laitteen edellisen suunnittelukierroksen jälkeen ja se on lähes toimiva. Ohjelma koostuu seuraavista tiedostoista: T2007_T4.prj T2006.c Deltabit.h Deltabit.lib Projektitiedosto Pääohjelma Kirjastofunktioiden esittely Kirjastorutiinit, kopioi tämä tiedosto kääntäjän lib-kansioon, esim. C:\Program Files\cvavreval\lib Kilpailijan tehtävänä on korjata ohjelmassa esiintyvät virheet ja jatkaa laitteen ohjelmistokehitystä jäljempänä olevien tehtävämääritysten mukaisesti. Ohjelman toiminta Käynnistyksen jälkeen ohjelma alustaa ja tarkistaa sormenjälkitunnistimen (SjAlustus). Jos tunnistimen toiminnassa ei havaita virheitä, laite on valmiina tunnistamaan sormenjälkiä. Perustilassa tunnistimessa palaa punainen valo. Ennen kuin sormea voidaan tunnistaa, se on rekisteröitävä järjestelmään. Rekisteröintiä varten on käytettävissä kymmenen muistipaikkaa. Rekisteröinti käynnistetään numeronäppäimellä 0 9, joka samalla määrää käytettävän muistipaikan. Näppäimellä * voidaan poistaa kaikki rekisteröinnit. Näppäin # ei ole toistaiseksi käytössä sovelluksessa. Kappaleessa Ohjelman käyttö on lisää ohjeita. Kirjastorutiinit välittävät tietoa pääohjelmalle seuraavien muuttujien avulla. Kunkin muuttujan arvo nollataan aina käsittelyn jälkeen. Nappain: Tähän muuttujaan asetetaan painettua näppäintä vastaava merkki. SjTila: Tähän muuttujaan asetetaan tieto sormenjälkitunnistuksen tapahtumista (ks. Deltabit.h). Pulssi: Tämä muuttuja asetetaan ykköseksi noin puolen sekunnin välein. Sitä voi käyttää toimintojen ajastukseen. Ohjelman rakenne ja muotoilu (6 pistettä) Ohjelman kirjoittamisessa on noudatettava alkuperäisen ohjelman mukaista muotoilua. Kilpailijan muuttama tai lisäämä koodi pitää olla hyvin kommentoitua. Ohjelmassa esiintyvät vakiot pitää nimetä ja määritellä niitä kuvaavalla suomenkielisellä vakiomäärityksellä. Ohjelmakoodissa on käytettävä ehto- ja toistorakenteita tarkoituksenmukaisella tavalla.

Tehtävä 1 (2 pistettä) Ohjelmakoodissa on jokin syntaksivirhe (tai useita), jonka takia ohjelman käännös ei onnistu. Korjaa ohjelmassa esiintyvät syntaksivirheet siten, että ohjelman käännöksessä ei esiinny virheitä. Kilpailun tuomari ilmoittaa maksimiajan, mikä tähän tehtävään on käytettävissä. Mikäli et ole tähän mennessä ratkaissut tehtävää 1, tuomari kertoo oikean ratkaisun ja menetät tästä tehtävästä saatavat 2 pistettä. Tämän jälkeen voit jatkaa kilpailua normaalisti eteenpäin. Tehtävä 2 (2 pistettä) Kun sormenjälki tunnistetaan, releen pitäisi vetää noin 3 sekunnin ajan. Nyt rele antaa vain lyhyen pulssin. Korjaa ohjelma niin, että releen pulssi on oikean mittainen. Tehtävä 3 (4 pistettä) Näppäin # ei toistaiseksi ole käytössä ohjelmassa. Muuta ohjelmaa niin, että näppäimellä # asetetaan releen vetoajaksi vuorotellen 3 sekuntia tai 1 sekunti. Tunnistimen vihreän ledin pitää palaa sama aika kuin rele vetää. Lisää ohjelmaan uusi muuttuja, johon releen vetoaika talletetaan. Anna muuttujalle myös alkuarvo ohjelman käynnistyessä. Tehtävä 4 (4 pistettä) Muuta ohjelmaa niin, että muistipaikkaan 0 rekisteröidyllä sormella ohjataan rele vuorotellen pysyvästi päälle ja vastaavasti pois päältä. Muistipaikan saa selville muuttujasta SjTila (ks. Deltabit.h). Tunnistimen vihreän ledin toimintaa ei muuteta, eli se palaa 3 sekuntia (tai 1 sekunnin) onnistuneen tunnistuksen merkiksi. Muiden sormenjälkien toiminta jätetään ennalleen. Kun rele on ohjattu pysyvästi auki, normaalin sormen tunnistus palauttaa sen takaisin lepotilaan, kun 3 sekuntia (tai 1 sekunti) on kulunut.. Tehtävä 5 (8 pistettä) Sormenjälkitunnistuksen tilasta on saatavana tieto muuttujassa SjTila (ks. Deltabit.h): - kun tunnistin havaitsee sormen tunnistimella - kun sormea ei tunnistettu - kun tunnistimella on havaittu virhe Kommentoi ohjelmasta pois käytöstä koko if-lause:

/* */ if ((SjTila > 0) && (SjTila <= 10)) // Sormenjälki tunnistettu?... Korvaa se funktiokutsulla: SjTarkistus(); Laadi funktio SjTarkistus, joka toteuttaa kommentoimasi if-lauseen toiminnot sekä lisäksi: - sytyttää keltaisen ledin, kun tunnistin havaitsee sormen tunnistimella - vilkuttaa punaista lediä 3 sekunnin ajan, kun sormea ei tunnistettu - sytyttää punaisen ledin vilkkumaan, kun tunnistimella on havaittu virhe Tunnistimen virhettä voit testata irrottamalla liittimestä J3 johdon 3 tai 4.

Ohjelman käyttö Sormenjäljen rekisteröinti 0 9 Ennen kuin sormenjäljen tunnistus on mahdollista, sormi on rekisteröitävä. Käytössä on kymmenen muistipaikkaa. Rekisteröinti käynnistetään numeronäppäimellä 0-9. Numero määrää samalla muistipaikan. Varmista, että tunnistin on valmiustilassa (punainen valo palaa yksinään). Paina numeronäppäintä 0 9 haluamasi muistipaikan mukaan. Keltainen valo palaa. Laita sormi tunnistimelle. Pidä sormi tunnistimella, kunnes vihreä valo palaa yksinään. Rekisteröinti onnistui. Jos punainen valo vilkkuu, rekisteröinti epäonnistui. Muistipaikka on jo käytössä tai sormesta ei saatu kunnollista kuvaa.

Sormenjälkien poistaminen * Tällä toiminnolla poistetaan kaikki rekisteröidyt sormenjäljet. Varmista, että tunnistin on valmiustilassa (punainen valo palaa yksinään). Paina näppäintä *. Keltainen valo palaa lyhyesti. Kun vihreä valo syttyy, sormenjäljet on poistettu. Jos punainen valo vilkkuu, sormenjälkirekisteri oli jo tyhjä.

Ohjelmalistaus Tiedosto T2007.c /************************************************************************** TAITAJA 2007 ELEKTRONIIKKAFINAALI 30-1.2.2007 Ohjelmointitehtävä Kilpailijan nimi: (laita nimesi tähän) **************************************************************************/ #include "Mega48.h" #include "Deltabit.h" #define AIKA_3S 6 // 3 sekunnin aikavakio // Sj-tunnistimen funktiokutsujen tilat (muuttuja Tila) #define T_OK 0 // - palvelu onnistui #define T_VIRHE 1 // - palvelu päättyi virheeseen unsigned char ReleLaskuri; unsigned char LedLaskuri; void LueNappain() bit Tila = T_VIRHE; SjLedit(LED_K, 0); switch (Nappain) case "#": break; case '*': if (!SjPoista()) Tila = T_OK; break; // Releen vetoaika 0,5 s pulsseina // Ledien näyttöaika 0,5 s pulsseina // Funktiokutsun tila, oletusarvoksi virhetila // Keltainen led palamaan komennon suorituksen ajaksi. // Näppäintä ei käsitellä. // Sormenjälkien poistaminen default: if (!SjRekisteroi(Nappain - '0')) Tila = T_OK; // Sormenjäljen rekisteröinti if (Tila == T_OK) SjLedit(LED_V, 0); else SjLedit(LED_P, LED_P); LedLaskuri = AIKA_3S; Nappain = 0; // Vihreä ledi palamaan. // Punainen ledi vilkkumaan. // Näytetään lediä 3s // Nollataan näppäintieto käsittelyn jälkeen. void main(void) ReleLaskuri = 0; LedLaskuri = 0; if (SjAlustus()) SjLedit(LED_P, LED_P); while(1); SjLedit(LED_P, 0); while(1) if (Nappain) LueNappain(); // Alustus ei onnistunut. Punainen ledi vilkkumaan. // Jätetään pyörimään silmukkaan. // Näppäimen käsittely if ((SjTila > 0) && (SjTila <= 10)) // Sormenjälki tunnistettu? SjLedit(LED_V, 0); // Vihreä ledi palamaan.

RELE = ON; // Rele päälle. ReleLaskuri = AIKA_3S; LedLaskuri = AIKA_3S; SjTila = 0; if (Pulssi) Pulssi = 0; if (LedLaskuri) LedLaskuri--; if (!LedLaskuri) SjLedit(LED_P, 0); // Kellopulssin käsittely (noin 0,5 s välein) // Ovatko ledit poikkeustilassa? // Palataan perustilaan (punainen palamaan). if (ReleLaskuri) ReleLaskuri--; if (ReleLaskuri) RELE = OFF; // Releen ohjaus päällä? // Rele pois päältä

Tiedosto Deltabit.h #define LED_P #define LED_K #define LED_V 0b00000001 // Punainen led 0b00000010 // Keltainen led 0b00000100 // Vihreä led #define RELE PORTC.0 // Releen ohjausportti #define ON 1 // Rele vetää #define OFF 0 // Rele ei vedä extern char extern bit Nappain; // Painettu näpppäin // Näppäimen käsittelyn jälkeen // asetetaan arvoksi 0 Pulssi; // Kellopulssi, asetetaan 0,5s välein // Pulssin käsittelyn jälkeen arvoksi // on asetettava nolla extern unsigned char SjTila; // Sormenjäljen tunnistuksen tila // Tilan käsittelyn jälkeen arvoksi // on asetettava nolla // 0 = ei tapahtumia // 1..10 = tunnistettu sormi (0-9) // 20 = havaittu sormi tunnistimella // 21 = sormea ei tunnistettu // 22 = virhe tunnistimella /* SjAlustus - SORMENJÄLKITUNNISTIMEN ALUSTUS */ /* Palauttaa */ /* 0 = alustus onnistui */ /* 1 = virhe */ unsigned char SjAlustus(); /* SjLedit - LEDIEN TILAN ASETUS */ /* tila = sytytettävät ledit (LED_P, LED_K, LED_V) */ /* vilkutus = vilkutettavat ledit (LED_P, LED_K, LED_V) */ /* Halutut ledit yhdistetään or-operaattorilla esim. */ /* LED_P LED_K */ void SjLedit(unsigned char tila, unsigned char vilkutus); /* SjRekisteroi - SORMENJÄLJEN REKISTERÖINTI */ /* Parametri */ /* no = muistipaikan numero 0-9 (0x00-0x09) */ /* Palauttaa */ /* 0 = rekisteröinti onnistui */ /* 1 = virhe */ unsigned char SjRekisteroi(unsigned char no); /* SjPoista - KAIKKIEN SORMENJÄLKIEN POISTAMINEN */ /* Palauttaa */ /* 0 = poistaminen onnistui */ /* 1 = virhe */ unsigned char SjPoista(); #pragma library Deltabit.lib

MAKSIMIPISTEET 26 p Tuomarit T1-T3 Arvostelukohde KA T1 T2 T3 Tehtävä 1 Syntaksivirheen korjaus 0 2p Tehtävä 2 Releen vetoajan korjaus 0 2p Tehtävä 3 Näppäimen # käsittely 0 4p Tehtävä 4 Releen pysyvä ohjaus sormella 0 0 4p Tehtävä 5 Funktio tunnistuksen tilan käsittelyyn 0-8p Ohjelmakoodin muotoilu 0-2p Kommenttien käyttö Vakioiden käyttö 0-2p 0-2p Yhteensä pistettä Osion 1 pisteet yhteensä pistettä / 26p Tuomarien allekirjoitus T1 T2 T3