1

Compare commits

...

30 Commits

Author SHA1 Message Date
ventilaar
305dad62a1 AI lesopdrachten toevoegen 2021-11-25 14:25:37 +01:00
Ventilaar
5f587f1f49 typfout 2021-01-19 21:07:36 +01:00
Ventilaar
f23f75520b tijd geven aan de servo om te draiien 2021-01-19 18:34:22 +01:00
Ventilaar
25e0f26e3c preventief mensen waarschuwen voor poll_sensor block 2021-01-19 17:53:56 +01:00
Ventilaar
16c75bcecb domme fouten man 2021-01-19 17:41:28 +01:00
Ventilaar
9909cc5c86 int doorgeven naar set_servo 2021-01-19 17:38:33 +01:00
Ventilaar
a6c0888b58 button heeft pulldown resistor om geest triggers te voorkomen 2021-01-19 16:38:22 +01:00
Ventilaar
67b93513b5 test dit 2021-01-19 16:34:06 +01:00
Ventilaar
5309692d89 letstrip feller gemaakt 2021-01-19 16:21:38 +01:00
Ventilaar
42b696834f a 2021-01-19 16:18:48 +01:00
Ventilaar
666b66ca72 ok de led strip hoort nu perfect te werken 2021-01-19 16:17:10 +01:00
Ventilaar
cdbfa40f4b ok de hardware probleem is nu echt fixed 2021-01-19 15:44:12 +01:00
Ventilaar
249ee1910f staat led opslaan in string voor de browser 2021-01-19 15:40:23 +01:00
Ventilaar
c1d35c6d56 readme python3 2021-01-19 15:37:55 +01:00
Ventilaar
449b97b757 fix led hex(string) to hex(int) 2021-01-19 15:35:05 +01:00
Ventilaar
84467c00d0 hardware.py hernoemd naar hw_funcs omdat de pi het niet zo leuk vind 2021-01-19 15:23:55 +01:00
Ventilaar
f73c20ad3d ledstrip ontvangen string omzetten naar hex 2021-01-19 15:08:02 +01:00
Ventilaar
aa0382f8c5 spi doc 2021-01-19 15:01:52 +01:00
Ventilaar
dd7033af64 pinnen van ledstrip genoteerd 2021-01-19 15:00:47 +01:00
Ventilaar
d0f54a73d2 carousel werkt in app html 2021-01-19 14:21:42 +01:00
Ventilaar
c60f2a3927 mediaan van prijzen genereren 2021-01-19 13:35:32 +01:00
Ventilaar
1e6f63cfbe readme aangepast 2021-01-18 21:02:15 +01:00
Ventilaar
4a48535dfc default pinnen aangepast naar iets acceptabels 2021-01-18 20:33:36 +01:00
Ventilaar
a082c7a038 al het hardware hoort in principe te werken 2021-01-18 20:30:03 +01:00
Ventilaar
696ecc02ca theoretisch gezien hoort al het hardware behalve het schuifregister te werken 2021-01-18 20:17:37 +01:00
Ventilaar
56051b886d afstand sensor werkt 2021-01-18 18:55:41 +01:00
Ventilaar
7406ef157f pushbutton api geimplementeerd en een rpi check toegevoegd voor de html pagina 2021-01-18 18:38:46 +01:00
Ventilaar
b2a397d4f8 pushbutton functie werkt 2021-01-18 18:38:14 +01:00
Ventilaar
f48e9309b9 debug print toegevoegd voor ledstrip 2021-01-18 18:07:45 +01:00
Ventilaar
80d6bf0061 noway de letstrip werkt 2021-01-18 18:05:35 +01:00
10 changed files with 1270 additions and 38 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,244 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Oriëntatie op AI
Practicum 2: algoritmiek
(c) 2019 Hogeschool Utrecht
Tijmen Muller (tijmen.muller@hu.nl)
Opdracht: beantwoord onderstaande vragen en werk onderstaande functies uit.
Je kunt je functies testen met het gegeven raamwerk door het bestand
uit te voeren (of met behulp van pytest, als je weet hoe dat werkt).
Lever je werk in op Canvas als alle tests slagen.
Let op! Het is niet toegestaan om bestaande modules te importeren en te
gebruiken, zoals `math` en `statistics`.
"""
# Vul hier je naam, klas en studentnummer in
naam = "Taha Genc"
klas = "TICT-PV-SG5-20"
studentnummer = 1788230
"""
1. Sorteeralgoritme
Hieronder staat de pseudocode van een sorteeralgoritme:
1. Startend vanaf het begin van een lijst,
vergelijk elk element met zijn volgende buur.
2. Als het element groter is dan zijn volgende buur,
verwissel ze van plaats.
3. Doorloop zo de lijst tot het eind.
4. Als er verwisselingen zijn geweest bij stap 2., ga naar stap 1.
1a. Handmatig toepassen
Gegeven is de lijst l = [ 4, 3, 1, 2 ]. Geef de waardes die deze
lijst aanneemt bij álle tussenstappen bij toepassing van
bovenstaand sorteeralgoritme.
0 = [ 4, 3, 1, 2 ]
1 = [ 3, 4, 1, 2 ]
2 = [ 3, 1, 4, 2 ]
3 = [ 1, 3, 4, 2 ]
4 = [ 1, 3, 2, 4 ]
5 = [ 1, 2, 3, 4 ]
1b. Implementatie
Implementeer het sorteeralgoritme in Python in een functie
hieronder genaamd my_sort(lst).
1c. Best en worst case
- Stel je hebt een lijst met de waarden 1, 2 en 3. Bij welke
volgorde van de waarden in de lijst is het sorteeralgoritme
het snelste klaar (best-case scenario)?
Hoeveel vergelijkingen (zoals beschreven in stap 1. van de
pseudocode) zijn nodig geweest?
bij een array van [1,2,3] zijn er minimaal 2 vergelijkingen nodig
- Bij welke volgorde van de waarden in de lijst is het
sorteeralgoritme het minst snel klaar (worst-case scenario)?
Hoeveel vergelijkingen zijn nodig geweest?
bij een array van [3,2,1] zijn er maximaal 3 vergelijkingen nodig
- Stel je hebt een lijst met de waarden 1 tot en met 4.
Wat is nu het best-case scenario? [1,2,3,4]
Hoeveel vergelijkingen zijn er nodig? 3 vergelijkingen
En wat is nu het worst-case scenario? [4,3,2,1]
Hoeveel vergelijkingen zijn er nodig? 7 vergelijkingen
- Stel je hebt een lijst met de waarden 1 tot en met n
(je weet nu dus niet precies hoeveel waarden er in de lijst
zitten, het zijn er 'n').
Wat is nu het best-case scenario? een gesorteerde lijst of n=1
Hoeveel vergelijkingen zijn er nodig? n-1
En wat is nu het worst-case scenario? gesorteerd in de verkeerde richting
Hoeveel vergelijkingen zijn er nodig? 1/2 * n + 1
2. Recursie
2a. Lineair zoeken
Implementeer het lineair zoekalgoritme in Python op een
*recursieve* manier. Gebruik hiervoor de functie genaamd
linear_search_recursive(lst, target).
2b. Binair zoeken
Implementeer het binair zoekalgoritme in Python op een
*recursieve* manier. Gebruik hiervoor de functie genaamd
binary_search_recursive(lst, target).
"""
def my_sort(lst):
"""
Sorteer gegeven lijst lst volgens het algoritme zoals beschreven in de pseudocode bij 1. hierboven.
Zorg dat de gegeven lijst niet verandert, maar geef een nieuwe, gesorteerde variant van de lijst terug.
"""
lst_sorted = lst.copy() # kopie maken van ingegeven list
for _ in range(len(lst) - 1):
for x in range(len(lst)-1):
if lst_sorted[x] > lst_sorted[x+1]:
lst_sorted[x], lst_sorted[x+1] = lst_sorted[x+1], lst_sorted[x]
return lst_sorted
def linear_search_recursive(lst, target):
"""
Zoek een element target in gegeven lijst lst door middel van recursief lineair zoeken.
De inhoud van de gegeven lijst verandert niet.
Args:
lst -- de lijst waarin gezocht wordt (list)
target -- het element dat gezocht wordt
Returns:
of het element in de lijst voorkomt (bool)
"""
if len(lst) == 0: # als lijst geen entries meer bevat false returnen
return False
elif lst[0] == target: # als positie 0 de target bevat true returnen
return True
else:
return linear_search_recursive(lst[1:], target) # zichzelf starten min de eerste entry in de list
def binary_search_recursive(lst, target):
"""
Zoek een element target in gegeven lijst door middel van recursief binair zoeken.
De inhoud van de gegeven lijst verandert niet.
Args:
lst -- de (reeds gesorteerde) lijst waarin gezocht wordt (list)
target -- het element dat gezocht wordt
Returns:
of het element in de lijst voorkomt (bool)
"""
laag = 0 # laagste positie
hoog = len(lst) - 1 # hoogste positie
cur = (len(lst) - 1) // 2 # middenste index berekenen afrondend naar beneden
if target == lst[cur]: # als cursor positie al de target is true returnen
return True
if hoog > laag: # als de lijst meer dan 1 item bevat, anders bevat de lijst 1 item die niet de target is
if lst[cur] > target: # als target lager ligt dan de cursor
return binary_search_recursive(lst[0:cur+1], target) # functie oproepen met de lijst lager dan de cursor
elif lst[cur] < target: # als de target hoger ligt dan de cursor
return binary_search_recursive(lst[cur+1:hoog+1], target) # functie oproepen met de lijst hoger dan de cursor
return False
"""
==========================[ HU TESTRAAMWERK ]================================
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
Je kunt je code testen door deze file te runnen of met behulp van pytest.
"""
import random
def test_id():
assert naam != "", "Je moet je naam nog invullen!"
assert studentnummer != -1, "Je moet je studentnummer nog invullen!"
assert klas != "", "Je moet je klas nog invullen!"
def test_my_sort():
lst_test = random.choices(range(-99, 100), k=6)
lst_copy = lst_test.copy()
lst_output = my_sort(lst_test)
assert lst_copy == lst_test, "Fout: my_sort(lst) verandert de inhoud van lijst lst"
assert lst_output == sorted(lst_test), \
f"Fout: my_sort({lst_test}) geeft {lst_output} in plaats van {sorted(lst_test)}"
def test_linear_search_recursive():
for _ in range(99): # ik heb deze waarde van 10 naar 99 aangepast zodat ik iteratie bugs kan vinden
lst_test = random.sample(range(20), 6)
target = random.randrange(20)
found = target in lst_test
lst_copy = lst_test.copy()
outcome = linear_search_recursive(lst_test, target)
assert lst_copy == lst_test, "Fout: linear_search_recursive(lst, target) verandert de inhoud van lijst lst"
assert outcome == found, \
f"Fout: linear_search_recursive({lst_test}, {target}) geeft {outcome} in plaats van {found}"
def test_binary_search_recursive():
for _ in range(99): # ik heb deze waarde van 10 naar 99 aangepast zodat ik iteratie bugs kan vinden
lst_test = sorted(random.sample(range(20), 6))
target = random.randrange(20)
found = target in lst_test
lst_copy = lst_test.copy()
outcome = binary_search_recursive(lst_test, target)
assert outcome == found, \
f"Fout: binary_search_recursive({lst_test}, {target}) geeft {outcome} in plaats van {found}"
assert lst_copy == lst_test, "Fout: binary_search_recursive(lst, target) verandert de inhoud van lijst lst"
if __name__ == '__main__':
try:
print("\x1b[0;32m")
test_id()
test_my_sort()
print("Je functie my_sort() werkt goed!")
test_linear_search_recursive()
print("Je functie linear_search_recursive() werkt goed!")
test_binary_search_recursive()
print("Je functie binary_search_recursive() werkt goed!")
print("\nGefeliciteerd, alles lijkt te werken!")
print("Lever je werk nu in op Canvas...")
except AssertionError as ae:
print("\x1b[0;31m")
print(ae)

File diff suppressed because it is too large Load Diff

View File

@@ -33,10 +33,18 @@ Om de dependencies te installeren voer het onderste commando uit.
pip install flask requests apa102-pi
De applicatie is simpel uit te voeren door de python script uit te voeren. En via de browser naar de gegeven
url te gaan.
Als je op een RaspberryPI draait en de hardware wil aansturen moet je in run.py aangeven dat de software draait op een
RaspberryPI, en in hardware.py kan je de default pinnen aanpassen. De APA102 library gebruikt SPI, dus zorg ervoor dat
je via ```sudo raspi-config``` spi aan hebt gezet.
python run.py
In run.py kan je aangeven dat je op een RaspberryPI draait zodat de hardware
pagina werkt. Default werkt de hardware **niet** omdat de software libraries oproept die alleen op een RaspberryPI
werken.
De applicatie is simpel uit te voeren door de python script uit te voeren. En via de browser naar de gegeven
url te gaan. Let op! Gebruik python 3!
python3 run.py of python run.py
## Data formaat geheugen tabel
Om het sorteren makkelijker te maken gaan we de json in een tuple/list opslaan in het geheugen. Het formaat is een tabel
@@ -100,6 +108,28 @@ Geeft de gemiddelde van een lijst terug in een float
Deze functie vraagt de gegeven appid op via de http steam api en retourneert het als json. Een voorbeeld van de json is
te vinden in steam_api.py
### hardware.py
#### ```set_strip(value)```
Deze functie stuurt de ledstrip met 8 APA102 led's aan zodat de hele strip in 1 kleur oplicht. Value moet in HEX RGB
gegeven worden. Bijvoorbeeld set_strip('FFAABB')
#### ```set_register(value)```
Deze functie accepteerd waardes in machten van 2 tot 128. Waarde 1 zet de eerste pinout van het register op ON. Waarde 2
zet de 2e pinout op ON en de rest op OFF. Waarde 4 zet de 3e pin op ON enz... Tot waarde 128(pin 8). Accepteerd ook
waarde 0 dat alles op OFF zet.
#### ```poll_sensor()```
Een simpele functie die de afstandsensor aanstuurt. Wanneer de functie wordt aangeroepen retourneert het een tuple met
als eerste waarde de afstand gemeten in cm van de sensor tot object. En waarde 2 weergeeft de afstand in tijd.
**LET OP** als de sensor niet is aangesloten, en de functie wordt opgeroepen, blokkeert de functie. Zorg ervoor dat de
sensor is aangesloten voordat de functie wordt opgeroepen. Dit wordt niet aangepast anders wordt de nauwkeurigheid van
de sensor substantieel negatief beinvloed, vooral op langzame computers.
#### ```set_servo(degree)```
Deze functie accepteert waardes van 0 tot en met 180. Deze waardes corresponderen met de gradens vanaf het meest linkse
positie van de servo([voorbeeld](https://files.ventilaar.net/files/2021-01/servo.jpg)).
#### ````poll_button()````
Dit is de meest simpele functie geschreven in dit programme. Wanneer de knop is ingedrukt returnt de functie True,
anders False
### graphs.py
De functie van dit bestand is om grafieken te maken van lijsten met waardes, deze grafieken worden als svg terug gegeven
om door flask geserveerd te worden.

View File

@@ -10,10 +10,13 @@ GPIO.setwarnings(0)
register_shift_clock_pin = 17
register_latch_clock_pin = 27
register_data_pin = 22
sensor_trigger_pin = 14
sensor_echo_pin = 15
sensor_trigger_pin = 23
sensor_echo_pin = 24
servo_pin = 14
button_pin = 27
button_pin = 25
# led clock = 11 apa102_pi default
# led data = 10 apa102_pi default
GPIO.setup(register_shift_clock_pin, GPIO.OUT)
GPIO.setup(register_latch_clock_pin, GPIO.OUT)
@@ -21,7 +24,7 @@ GPIO.setup(register_data_pin, GPIO.OUT)
GPIO.setup(sensor_trigger_pin, GPIO.OUT)
GPIO.setup(sensor_echo_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(servo_pin, GPIO.OUT)
GPIO.setup(button_pin, GPIO.IN)
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
################################
@@ -29,6 +32,7 @@ GPIO.setup(button_pin, GPIO.IN)
def set_strip(value):
strip = apa102.APA102(num_led=8, order='rgb')
strip.set_global_brightness(31)
for x in range(8):
strip.set_pixel_rgb(x, value)
strip.show()
@@ -70,6 +74,8 @@ def poll_sensor():
time.sleep(0.00001) # pulse trigger
GPIO.output(sensor_trigger_pin, False)
# hmmm, als de sensor niet is aangesloten zal deze functie blokkeren. heb geen zin om dit aan te passen
while not GPIO.input(sensor_echo_pin):
start_time = time.time() # tijd opslaan wanneer de echo false is
@@ -87,9 +93,6 @@ def poll_sensor():
# geef het aantal graden in tussen 0 en 180 (dit is niet hoeveelheid verplaatsing maar naar welke positie)
def set_servo(degrees):
p = GPIO.PWM(servo_pin, 50)
p.start(2.5)
if degrees > 180:
return False
elif degrees < 0:
@@ -102,7 +105,11 @@ def set_servo(degrees):
integer = 2.5 + (value_scaled * right_span)
p.ChangeDutyCycle(integer)
p = GPIO.PWM(servo_pin, 50)
p.start(integer)
time.sleep(0.05)
p.stop()
return True

58
run.py
View File

@@ -5,11 +5,11 @@ import stats
import steam_api
RPI = True # ZET NAAR TRUE ALS JE OP EEN RPI DRAAIT MET DE JUISTE LIBRARIES, ZODAT DE HARDWARE TAB WERKT
RPI = False # ZET NAAR TRUE ALS JE OP EEN RPI DRAAIT MET DE JUISTE LIBRARIES, ZODAT DE HARDWARE TAB WERKT
# if RPI:
# import hardware
if RPI:
import hw_funcs
app = Flask(__name__) # flask app initialiseren
@@ -55,11 +55,14 @@ def root():
genre = stats.popgenre(data_tpl)
prijsmed = stats.median_prijs(data_tpl)
# limiteer tabel tot en met 15 entries
for x in range(0, 15):
entries.append(data_lst[x])
return render_template('index.html', first_entry=data_tpl[0], sizedb=len(data_tpl), entries=entries, genre=genre)
return render_template('index.html', first_entry=data_tpl[0], sizedb=len(data_tpl), entries=entries, genre=genre,
prijsmed=prijsmed)
@app.route('/fulltable')
@@ -95,7 +98,7 @@ def fulltable():
@app.route('/hardware')
def hardware():
return render_template('hardware.html')
return render_template('hardware.html', RPI=RPI)
@app.route('/search')
@@ -118,9 +121,8 @@ def api_afstandsensor():
"""Dit pad geeft een json array met de key 'afstand' met waarde van de afstandsensor in cm """
if not RPI:
return Response('Hardware kan niet aangestuurt worden omdat het niet op een RPI draait!', status=418)
afstand = 0
return {'afstand': afstand}
return {'afstand': hw_funcs.poll_sensor()[0]}
@app.route('/api/schuifregister', methods=['POST', 'GET'])
@@ -131,9 +133,20 @@ def api_schuifregister():
"""
if not RPI:
return Response('Hardware kan niet aangestuurt worden omdat het niet op een RPI draait!', status=418)
global state_schuifregister
if request.method == 'POST':
pass
desired_state = request.form['setstate']
try:
hw_funcs.set_register(int(desired_state))
except:
return {'request': 'False'}
print(f'Set value for schuifregister {desired_state}')
state_schuifregister = desired_state
return {'request': 'True'}
else:
return {'state': state_schuifregister}
@@ -146,9 +159,20 @@ def api_servo():
"""
if not RPI:
return Response('Hardware kan niet aangestuurt worden omdat het niet op een RPI draait!', status=418)
global state_servo
if request.method == 'POST':
pass
desired_state = request.form['setstate']
try:
hw_funcs.set_servo(int(desired_state))
except:
return {'request': 'False'}
print(f'Set value for servo {desired_state}')
state_servo = desired_state
return {'request': 'True'}
else:
return {'state': state_servo}
@@ -158,9 +182,11 @@ def api_pushbutton():
"""Dit pad geeft de status van de pushbuttons af in True en False, de keys alsvolgd genoemd: button0, button1"""
if not RPI:
return Response('Hardware kan niet aangestuurt worden omdat het niet op een RPI draait!', status=418)
button0 = False
return {'button0': button0}
if hw_funcs.poll_button():
return {'button0': True}
else:
return {'button0': False}
@app.route('/api/ledstrip', methods=['POST', 'GET'])
@@ -175,14 +201,18 @@ def api_ledstrip_set():
global state_ledstrip
if request.method == 'POST':
desired_state = request.form['setstate']
string_state = request.form['setstate']
try:
hardware.set_strip(desired_state)
# we ontvangen de volgenende waarde '#XXXXXX' maar de driver ondersteunt alleen hex in integer
desired_state = int(string_state[1:], 16)
hw_funcs.set_strip(desired_state)
except:
return {'request': 'False'}
state_ledstrip = desired_state
print(f'Set value for ledstrip {string_state}')
state_ledstrip = string_state
return {'request': 'True'}
else:
return {'state': state_ledstrip}

View File

@@ -85,3 +85,12 @@ def popgenre(data_tpl):
return modes(genres)[0] # eerst populairste genre terug geven op basis van gegevens van modes(), wat is de kans
# dat er meerdere genres tegelijk populair zijn, toch?
def median_prijs(data_tpl):
prijzen = []
for x in data_tpl:
prijzen.append(x[17])
return float(median(prijzen))

View File

@@ -9,25 +9,22 @@
<div class="row">
<div class="col-md-12">
<h1>{{ data['data']['name'] }}</h1>
<p>fffff</p>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div id="carousel" class="carousel slide" data-ride="carousel">
<div id="pictures" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
{% set firstpic = True %}
{% for x in data['data']['screenshots'] %}
<div class="carousel-item {% if firstpic == True %}active{% endif %}">
<img class="d-block w-100" src="{{ x['path_full'] }}">
<div class="carousel-item{% if x['id'] == 0 %} active{% endif %}">
<img class="d-block w-100" src="{{ x['path_full'] }}" />
</div>
{% set firstpic = False %}
{% endfor %}
</div>
<a class="carousel-control-prev" href="#carousel" role="button" data-slide="prev">
<a class="carousel-control-prev" href="#pictures" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
</a>
<a class="carousel-control-next" href="#carousel" role="button" data-slide="next">
<a class="carousel-control-next" href="#pictures" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
</a>
</div>
@@ -77,6 +74,8 @@
</div>
</div>
</div>
<script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/bootstrap.bundle.min.js') }}"></script>
</body>
</html>

View File

@@ -3,32 +3,138 @@
<title>Hardware</title>
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
</head>
<body>
<body class="text-center">
{% include "t-navbar.html" %}
<div class="container">
{% if RPI == False %}
<div class="alert alert-danger mt-4" role="alert">
Volgens de webserver is de hardware niet aangesloten en kan dus niet worden bestuurd. (Is de variabele aangepast in run.py?)
</div>
{% endif %}
<div class="row row-cols-2">
<div class="col">
<h1>Afstand sensor</h1>
kkkkk
<h2>Gemeten afstand is <span class="badge badge-secondary" id="afstand-badge">x cm</span></h2>
</div>
<div class="col">
<h1>Push buttons</h1>
kkkk
<h2>Button0 is <span class="badge badge-danger" id="button-badge">Nog niet opgevraagd</span></h2>
</div>
</div>
<br>
<div class="row row-cols-3">
<div class="col">
<h1>Ledstrip</h1>
<p>Kies een kleur uit in de colorpicker en klik op set value</p>
<input type="color" id="ledstrip-input" />
<button type="button" id="ledstrip-set" class="btn btn-primary" onclick="setval()">Set value</button>
</div>
<div class="col">
<h1>Schuifregister</h1>
dafadfadfadfaf
<p>Kies de bit uit die je positief wil aansluiten</p>
<select name="Bit volgorde" id="register-input" onchange="set_register(this.value)">
<option value="0">Uit</option>
<option value="1">Bit 1</option>
<option value="2">Bit 2</option>
<option value="4">Bit 3</option>
<option value="8">Bit 4</option>
<option value="16">Bit 5</option>
<option value="32">Bit 6</option>
<option value="64">Bit 7</option>
<option value="128">Bit 8</option>
</select>
</div>
<div class="col">
<h1>Servo</h1>
fhdghfdghdfgh
<p>Stel waarde in tussen 0 en 180 graden</p>
<input id="servo-range" type="range" min="0" max="180" step="10" value="90" oninput="this.nextElementSibling.value = this.value" onchange="set_servo(this.value)">
<output id="servo-span">90</output>
</div>
</div>
</div>
<script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script>
<script>
// dit script blok geldt alleen voor de ledstrip
$(document).ready(function() {
$.getJSON('/api/ledstrip', function(data) {
document.getElementById('ledstrip-input').value = data.state
});
});
function setval() {
let valinbox = document.getElementById('ledstrip-input').value
$.post("/api/ledstrip", {setstate:valinbox})
}
</script>
<script>
// dit script blok geldt alleen voor de pushknoppen
// functie om de badge groen te maken en text 'ingedrukt'
function set_true() {
document.getElementById('button-badge').className = "badge badge-success";
document.getElementById('button-badge').textContent = 'Ingedrukt';
};
// functie om de badge rood te maken en text 'niet ingedrukt'
function set_false() {
document.getElementById('button-badge').className = "badge badge-danger";
document.getElementById('button-badge').textContent = 'Niet ingedrukt';
};
function button_poll() {
$.getJSON('/api/pushbutton', function(data) {
if (data.button0 == true) {
set_true();
} else {
set_false();
};
});
};
{% if RPI == False %}// {% endif %}setInterval(function(){ button_poll(); }, 500);
</script>
<script>
// dit script blok geldt alleen voor de afstandsensor
// functie om de waarde aan te passen in html
function set_afstand(waarde) {
document.getElementById('afstand-badge').textContent = waarde + ' cm';
};
// waarde opvragen en dan set_afstand() uitvoeren
function afstand_poll() {
$.getJSON('/api/afstandsensor', function(data) {
set_afstand(data.afstand);
});
};
{% if RPI == False %}// {% endif %}setInterval(function(){ afstand_poll(); }, 1500);
</script>
<script>
// dit script blok geldt alleen voor de servo
$(document).ready(function() {
$.getJSON('/api/servo', function(data) {
document.getElementById('servo-range').value = data.state
document.getElementById('servo-span').value = data.state
});
});
function set_servo(deg) {
$.post("/api/servo", {setstate:deg})
};
</script>
<script>
// dit script blok geldt alleen voor het schuifregister
$(document).ready(function() {
$.getJSON('/api/schuifregister', function(data) {
document.getElementById('register-input').value = data.state
});
});
function set_register(bit) {
$.post("/api/schuifregister", {setstate:bit})
};
</script>
</body>
</html>

View File

@@ -12,6 +12,7 @@
<p>Eerste game in memory is <b>{{ first_entry[1] }}</b> met de game id <b>{{ first_entry[0] }}</b></p>
<p>Totaal aantal games in memory is <b>{{ sizedb }}</b></p>
<p>Meest populaire genre is <b>{{ genre }}</b></p>
<p>Het mediaan van alle geindexeerde prijzen is <b>{{ prijsmed }}</b>,-</p>
</div>
<div class="col mt-3">
<!--