3 De Wekker
Bij deze opdracht ga je het systeem (logica) van een wekker bouwen. Dit is de 1ste opdracht in een serie van 3, waarin je ook nog een snooze-functie, een algoritmische compositie op basis van de tijd en een user-interface maakt. Zorg ervoor dat je elke opdracht opslaat zodat je een back-up hebt voordat je verder gaat.
Bewaar altijd je patch, want die heb je volgende week weer nodig!
Deadline voor deze opdracht: 22 oktober
Belangrijke objecten in deze opdracht (plus alle objecten van voorgaande opdrachten):
Belangrijk:
Gebruik de help-files (alt-click). Bekijk ook de Max Keyboard Shortcuts en Max CheatSheet.
Plaats comments om duidelijk te maken dat je snapt hoe iets werkt.
Maak je patch netjes en overzichtelijk voordat je hem laat beoordelen!
a. Hoe laat is het?
Maak een systeem dat de tijd weergeeft in 3 aparte [number]'s:
- Gebruik het
[metro]object om iedere seconde de tijd van[date]op te vragen met een(time)message. - Gebruik
[unpack i i i]om de lijst uit de time-outlet van date uit te pakken in 3 afzonderlijke numbers. Open de helpfile van date om te zien hoe het object werkt!
Objecten die handig zijn: [date], [metro], [toggle], [unpack], [number]
b. Alarm!
Maak nu een wekker functie, deze moet voldoen aan de volgende eisen:
- Gebruik 3
[number]-boxes om de uren, minuten en seconden in te kunnen stellen voor de wekker (NB: seconden zijn handig tijdens het programmeren zodat je niet zo lang hoeft te wachten om te zien of iets werkt). - Vergelijk de uren, minuten en seconden met de ingestelde tijd. Gebruik hiervoor
[==]. - Zorg dat alleen zodra de huidige tijd gelijk is aan alledrie de ingestelde tijdseenheden, er 1x
banggestuurd wordt. - Laat de
bangde messageAlarm!printen naar de max-console.
Objecten die handig zijn: [==], [+], [select], [print], [message]
c. Alarm! Alarm! Alarm! ∞!
- Zorg nu dat zodra je wekker
Alarm!print, er ook een 2de[metro]aan gaat die om de100 mseen midinoot afspeelt. - Gebruik
[makenote]en[noteout]om de noot te horen. - Zorg ervoor dat de metro niet uit zichzelf uitgaat.
Objecten die handig zijn: [metro], [message], [makenote], [noteout], [trigger]
d. Stopknop
Maak 1 aan/uit knop voor je alarm met behulp van een [toggle]. Deze knop moet vergelijkbaar functioneren als met een knop op de telefoon waarmee je de wekker aanzet.
Dat betekend dat de knop de volgende functies heeft:
- Als de
[toggle]aan geklikt wordt (en het alarm dus "klaar" staat om af te gaan), hoor je nog geen geluid, maar kan wel het alarm in de toekomst afgaan. - Als de
[toggle]uit geklikt wordt, gaat het alarm uit, en kan het alarm niet meer afgaan tot de toggle weer aan geklikt wordt.
NB: De huidige tijd moet altijd correct worden weergegeven, als een "batterij of stekker in je stopcontact".
Objecten die je waarschijnlijk nodig zult hebben: [gate], [toggle], [trigger], [select], [message]
e. Patch opschonen
Zorg dat alle instellingen van je patch bij het opstarten ervan meteen correct zijn:
- Gebruik hiervoor de
[loadbang]of[loadmess]objecten. - De default van de ingestelde alarmtijd bij het opstarten moet
08:30:00zijn. - De klok van de wekker moet direct lopen.
Maak je patch overzichtelijk, leesbaar en gebruik comments:
- Zorg dat al je user-interface objecten voorzien zijn van comments, zodat een eventuele gebruiker van je patch weet waar alle knoppen voor dienen.
- Plaats ook comments voor jezelf zodat je volgende week nog weet hoe alles werkt wat je hebt gebouwd.
(voldoende)
UITDAGING
(1 voor goed, minimaal 2 voor zeer goed)
Ben je klaar met alle bovenstaande opdrachten? Kijk eens naar een of meer van deze uitdagingen om je patch mee uit te breiden:
-
Probeer je wekkerfunctie van vraag 2 opnieuw te maken zonder het
[==]object en probeer zo min mogelijk objecten te gebruiken. Tip, kijk naar de volgende objecten:[expr],[if]of[zl.compare] -
Maak een interessantere midi module voor muziek zodra je wekker afgaat. Bijvoorbeeld: Er wordt een midi-sequence afgespeeld, de midinoten die afgespeeld worden zijn gerelateerd aan hoe laat het is, de midinoten worden steeds harder nadat de wekker is afgegaan en je hem niet uit zet...etc.
-
Zorg dat de tijd niet in 3 integer boxes wordt weergegeven maar in 1
[comment]of[message]object en zorg dat er:tussen de getallen staat. Tip, kijk eens naar de volgende objecten en de helpfiles daarvan:[sprintf]en[combine]. -
Los het kleiner dan 10 probleem op zodat je tijd op de volgende manier wordt weergegeven
05:30:02i.p.v.5:30:2. Tip, kijk eens naar de volgende objecten en de helpfiles daarvan:[combine],[sprintf],[if],[select].
