# Flytjum inn nauðsynleg forritasöfn: from flask import Flask, jsonify, render_template_string # Flask fyrir vefinn, jsonify fyrir JSON gögn import RPi.GPIO as GPIO # Notað til að stjórna GPIO pinnum á Raspberry Pi import time # Til að mæla tíma í fjarlægðarútreikningum # Búum til Flask vef-forrit app = Flask(__name__) # Skilgreinum hvaða GPIO-pinna eru notaðir fyrir ultrasonic skynjara TRIG, ECHO = 23, 24 GPIO.setwarnings(False) # Slökkvum á viðvörunum ef pinnar eru þegar í notkun GPIO.setmode(GPIO.BCM) # Notum BCM skíráningu fyrir pinnana (frekar en physical order) GPIO.setup(TRIG, GPIO.OUT) # TRIG (sendingarpinni) er stilltur sem útgangur GPIO.setup(ECHO, GPIO.IN) # ECHO (móttökupinni) er stilltur sem inngangur # Fall sem mælir fjarlægð með ultrasonic skynjara def get_distance(): # Sendum mjög stuttan háspennu-púls á TRIG GPIO.output(TRIG, True) time.sleep(0.00001) # 10 míkrósekúndur GPIO.output(TRIG, False) # Mælum hvenær við fáum endurkast frá hljóðbylgju (byrjun og endir) while GPIO.input(ECHO) == 0: start = time.time() while GPIO.input(ECHO) == 1: end = time.time() # Reiknum tíma sem bylgjan tók og umbreytum því í fjarlægð í cm return round((end - start) * 17150, 2) # hraði hljóðs í lofti: ~343 m/s → 17150 cm/s (frem og til baka) # Fall sem breytir fjarlægð yfir í lítra def calculate_liters(distance): max_height = 100 # Hámarks hæð t.d. á vatnstank í cm # Reiknar hversu mikið tankurinn er fullur hlutfallslega og margfaldar með 100 lítrum return round(max(0, (1 - distance / max_height)) * 100, 1) # Aðalsíða: HTML + JavaScript sem birtir mælingar og uppfærir þær sjálfkrafa @app.route('/') def index(): return render_template_string( # HTML og JavaScript í einni línu fyrir einfaldan vef '