Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ jobs:
uses: r-lib/actions/setup-r@v2
- name: Setup pandoc
uses: r-lib/actions/setup-pandoc@v2
- name: Setup pandocfilters
run: pip install pandocfilters;
- name: Setup tinytex
uses: r-lib/actions/setup-tinytex@v2
- name: Setup dependencies
Expand Down
2 changes: 1 addition & 1 deletion cpp_inst02.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Akronim ten, pomimo dość tajemniczo brzmiącego rozwinięcia, opisuje bardzo p
Dzięki temu kod konieczny do zarządzania zasobem piszemy w jednym miejscu, a następnie wykorzystujemy go w trakcie normalnej pracy z danym obiektem.
Takie podejście ma następujące zalety:

- Zwiększa poprawność kodu. Obiekty są automatycznie niszczone przy wyjściu ze scope'u, także nigdy nie zapomnimy już np. zwolnić pamięci! Znak "`}`" jest naszym przyjacielem.
- Zwiększa poprawność kodu. Obiekty są automatycznie niszczone przy wyjściu ze scope'u, także nigdy nie zapomnimy już np. zwolnić pamięci! Znaki `{...}` są naszym przyjacielem.
- Zmniejsza liczbę linijek kodu, które musimy napisać.
- Pozwala zachować poprawność programu w sytuacjach wyjątkowych.

Expand Down
24 changes: 12 additions & 12 deletions info1_lab11.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Mikrokontroler to mały układ scalony, który (zazwyczaj) ma w sobie zintegrowa

Na tych zajęciach użyjemy płytkę prototypową kompatybilną z Arduino. Urządzenia takie mają zintegrowane na jednej płytce: mikrokontroler i interfejs USB, a dodatkowo wgrany mają fabrycznie tak zwany "bootloader". Bootloader pełni rolę programatora, pozwalając wgrać programy do pamiecy stałej mikrokontrollera przez interfejs szeregowy. Bootloader Arduino stał się tak popularny, że wiele innych firm produkuje płytki z mikrokontolerami z wgranym ich bootloaderem. Pozwala to na programowanie wszelkich takich płytek przy pomocy tego samego zestawu narzędzi.

## Zaczynamy
# Zaczynamy

Dziś będziemy używać narzędzia Arduino IDE.

Expand All @@ -25,11 +25,11 @@ while (1) {
}
```

### `Piny`
## `Piny`

Nasza płytka ma piny typu General Purpose Input Output (GPIO). Oznacza to, że możemy ustawić je w różne stany służące do odczytu danych (input) i wysyłania danych (output). Do ustawiania stanu służy funkcja `pinMode(pin, typ)`. Dziś użyjemy dwóch typów:

#### `OUTPUT`
### `OUTPUT`
`OUTPUT` pozwala na ustawianie wyjscia na pinie na logiczne `0` (`LOW`) i `1` (`HIGH`). Zero to samo co uziemienie (ground), a jedyna to napięcie operacyjne układu (u nas 3V). Jesli podlaczymy taki pin (np. 2) do lampki (jak na rysunku), bedziemy mogli ja zapalac i gasic ustawiajac pin za pomoca `digitalWrite(2,HIGH);` i `digitalWrite(2,LOW);`.

![](figures/info1/micro/led.png)
Expand All @@ -38,12 +38,12 @@ Jesli zas do takiego pinu (np 10) podlaczymy buzzer (jak na rysunku) i uzyjemy k

![](figures/info1/micro/buzzer.png)

#### `INPUT_PULLUP`
### `INPUT_PULLUP`
`INPUT_PULLUP` pozwala na sprawdzanie na pinie czy jest on podłączony (`LOW`) czy nie (`HIGH`) do zera (ground). Jesli do takiego pina (np 3) podlaczymy przelacznik, a jego drugi styk podlaczymy do ziemi, bedziemy mogli wykryc czy przelacznik jest nacisniety sprawdzajac czy `digitalRead(3) == LOW`.

![](figures/info1/micro/button.png)

### Buzzer
## Buzzer
Pierw wybróbujemy buzzer. Buzzer to mały piezoelektryczny głosnik zaprojektowany do wydawania tonów. Możemy podłączyć jedno wyjście buzzera do zera (`GND`) a drugi do pinu 10 (`D10`). Możemy wtedy użyć komendy `tone(pin, frequency, duration)`, żeby wysłać na pinie kwadratową falę o zadanej czestotliwości, i funkcji `delay(duration)` by poczekać zadany czas.
```
void setup() {
Expand Down Expand Up @@ -73,7 +73,7 @@ void loop() {
```


## Nasz uklad
# Nasz uklad

Możemy teraz podłączyć przyciski. Każdy przycisk ma 4 porty, dwa styki przełącznika i dwa styki LED. Dioda LED jest w obudowie zlutowana w opornikiem limitującym natężenie, wiec nie bedziemy potrzebować dodatkowych komponentów. **Nigdy nie należy podłączać diody LED bez rezystora**.

Expand Down Expand Up @@ -104,7 +104,7 @@ void loop() {
}
```

### Przyciski
## Przyciski
Teraz możemy obsłużyć przyciski:
```
void loop() {
Expand All @@ -122,7 +122,7 @@ void loop() {

Użyj funkcji `tone(pin, frequency)` i `notone(pin)` by wydać dzwięk przy naciśnięciu przycisku. Stwórz tablice częstotliwości które chcesz zagrać.

### Naduś guzik
## Naduś guzik
Przy pomocy `digitalRead(switch_pin) == LOW` możemy wykryć czy dany przycisk jest wciśnięty. Zadeklaruj funkcję `keydown(k)`:
```
void keydown(int k) {
Expand All @@ -134,8 +134,8 @@ void keydown(int k) {
```
Zmodyfikuj `loop` tak, by funkcja `keydown` została wywoła **raz** w momencie naciśnięcia przycisku.

## Gry
### Memory
# Gry
## Memory

Główne zdanie na dziś polega na napisaniu małej gry:
- Wygeneruj losową sekwencję 5 przycisków, użyjąc funkcję `random(4)`, i umieść ją w tablicy.
Expand All @@ -144,10 +144,10 @@ Główne zdanie na dziś polega na napisaniu małej gry:

Gdy wszystko będzie działać, zmodyfukuj kod tak, by sekwencja zaczynała od jednego elementu i zwiekszała się za każdym razem gdy użytkownik poprawnie ją wykona.

### Speed (dodatkowe)
## Speed (dodatkowe)

Spróbuj napisać następującą grę, w której zapala się losowy przycisk i trzeba go nacisnąć zanim zgaśnie. Każdy następny przycisk zapala się na coraz krótrzy czas i odstępy po miedzy nimi maleją.

### Multi-speed (dodatkowe)
## Multi-speed (dodatkowe)

Zmodyfikuj powyższą grę tak, by podświetlała się dowolna kombinacja przycisków i trzeba było nacisnąć je wszystkie zanim zgasną.
58 changes: 58 additions & 0 deletions tools/pandoc_minted.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/usr/bin/env python3
"""A pandoc filter to use minted for typesetting code in the LaTeX mode."""

# This file is copied from megabyde/pandoc-minted repo
# which is under a mixed open-source license

from string import Template

from pandocfilters import Header, RawBlock, RawInline, toJSONFilters


def unpack_code(value):
"""Unpack the body and language of a pandoc code element."""
(_, classes, attributes), contents = value

language = classes[0] if classes else "text"
params = ", ".join("=".join(kv) for kv in attributes)

return {
"contents": contents,
"language": language,
"attributes": params,
}


def fragile(key, value, format, meta):
"""Make headers/frames fragile."""
if format != "beamer":
return None

if key == "Header":
level, meta, contents = value
# Add the attribute
meta[1].append("fragile")
return Header(level, meta, contents)
return None


def minted(key, value, format, meta):
"""Use minted for code in LaTeX."""
if format not in ("latex", "beamer"):
return None

if key == "CodeBlock":
template = Template("\\begin{minted}[$attributes]{$language}\n$contents\n\\end{minted}")
klass = RawBlock
elif key == "Code":
template = Template("\\mintinline[$attributes]{$language}{$contents}")
klass = RawInline
else:
return None

text = template.substitute(unpack_code(value))
return klass("latex", text)


if __name__ == "__main__":
toJSONFilters([fragile, minted])
5 changes: 3 additions & 2 deletions tools/pdf_full.R
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@

pdf_full = function( ... ) {
ret = pdf_document(template = "tools/pdf_small_template.tex", ...)
add_pandoc_args = c("--filter","tools/pandoc_minted.py")
ret = pdf_document(template = "tools/pdf_small_template.tex", pandoc_args=add_pandoc_args, ...)
ret$post_processor = function(yaml, input, output,...) {
post_doc = pdf_document(
pandoc_args = c("--variable",paste("pdffile",output,sep=":")),
pandoc_args = c(add_pandoc_args, "--variable",paste("pdffile",output,sep=":")),
template = "tools/pdf_full_template.tex"
)
cat("And now running again ",input," with ",output,"\n")
Expand Down
5 changes: 5 additions & 0 deletions tools/pdf_small_template.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
\usepackage[utf8]{inputenc}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{calc} % for calculating minipage widths
\usepackage{minted}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\setminted{bgcolor=bg}
\setmintedinline{bgcolor=none}

\IfFileExists{upquote.sty}{\usepackage{upquote}}{}

\DeclareUnicodeCharacter{2660}{\ensuremath{\spadesuit}}
Expand Down
Loading