This shows you the differences between two versions of the page.
info2:laboratoare:04 [2019/03/26 14:28] george.stoica0310 |
info2:laboratoare:04 [2021/03/23 09:19] (current) alexandru.vochescu [II. Ecran interactiv desenabil] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 04 - Citire de pe pini ===== | + | ===== Laboratorul 04 - Aplicații ===== |
===== Scop ===== | ===== Scop ===== | ||
- | * familiarizarea cu citirea datelor de la senzori | + | * aprofundarea cunoștințelor parcurse în primele 3 cursuri și laboratoare |
- | * familiarizarea cu butoane | + | |
- | * măsurarea voltajului de intrare pe pini | + | |
- | ===== Cuvinte cheie ===== | ||
- | * pinMode, digitalRead, analogRead, INPUT | ||
- | * buton, senzor, pullup, pulldown | ||
- | ===== Utilizarea serialei ===== | + | ===== I. Casă inteligentă ===== |
- | Pentru a afișa datele citite de pe pini de la senzori ne dorim să utilizăm Seriala de pe Arduino. Seriala este un utilitar similar cu **cout** din C++ | + | |
- | ====== Mod utilizare Seriala ====== | + | În cadrul acestui proiect vom simula funcționalitatea unei case inteligente. Facilitățile principale pe care ni le dorim sunt: |
- | **Funcții:** | + | * Iluminare inteligentă: în funcție de nivelul de luminozitate se vor aprinde treptat linii de led-uri (Lumină puternică -> toate led-urile stinse, Întuneric -> toate led-urile aprinse) |
- | * Serial.print(cuvânt) - Afișează cuvânt fără spațiul | + | * Muzică ambientală: setați 3 intervale de nivel de luminozitate în cadrul cărora se va reda câte o melodie o singură dată. Melodiile trebuie să fie create de voi din note (puteți alege orice melodie pe care să o generați). |
- | * Serial.println(cuvânt) - Printează cuvânt iar următorul print se va face pe linia următoare | + | * Iluminare controlată sonor: pentru fiecare bătaie din palme (sau zgomot puternic) se va aprinde o linie de led-uri. |
- | <code arduino.c> | + | * Afișarea parametrilor ambientali: la apăsări repetate pe logo, se vor afișa pe ecranul din led-uri valorile parametrilor ambientali (temperatură, luminozitate, nivelul de zgomot), dar și celelalte valori de la senzori: accelerație și busolă. |
- | void setup() | + | * În caz de cutremur (la scuturarea plăcii), se va reda o sirenă de poliție. |
- | { | + | * Grafic de variație a temperaturii: afișați în consolă folosind print valoarea temperaturii o dată pe secundă. |
- | Serial.begin(9600); // Setăm frecvența pentru Serial Monitor | + | * Afișaj aleator: La începutul programului, creați manual un vector din minim 10 Icon-uri preferate (precum HEART). În bucla principală de rulare a programului, verificați regulat cât timp a trecut de la pornirea plăcii (running_time din Input). La fiecare multiplu de 5 secunde de cand a pornit execuția codului pe placa, afișați un Icon aleator din vectorul creat. |
- | Serial.println("Am început programul"); | + | |
- | } | + | |
- | void loop() | + | ====== II. Ecran interactiv desenabil ====== |
- | { | + | |
- | Serial.print("Salut"); // Printează Salut la infinit111 | + | |
- | } | + | |
- | </code> | + | |
- | La rularea codului de mai sus, în Serial Monitor se va afișa Salut la infinit fără spații între cuvinte: "SalutSalutSalutSalutSalutSalut" | + | În cadrul acestui proiect vom crea o tablă pe care putem desena folosind puncte. În momentul în care apăsăm logo-ul (senzorul de atingere), se va genera un led aprins în colțul de stânga jos. Folosind butonul A, putem “mișca” led-ul aprins în sus pe coloana pe care acesta se află în acest moment. Folosind butonul B, putem “mișca” led-ul la dreapta pe linia pe care acesta se află acum. Odată ce am ajuns pe poziția pe care vrem să lăsăm led-ul aprins, apăsăm încă o dată logo-ul. Pentru a genera un nou “led aprins”, se va apăsa încă o dată logo-ul. |
- | <code arduino.c> | + | Cerințe adiționale: |
- | int buton = 2; | + | * Coloanele și liniile sunt considerate circulare: odată ce am ajuns la capăt de coloană/linie, led-ul va reveni la începutul coloanei/liniei |
- | void setup() | + | * **Nu** putem avea două led-uri aprinse pe aceeași poziție; când mut un led aprins peste un led deja aprins, acesta “va sări” la prima poziție liberă în direcția de mișcare |
- | { | + | |
- | Serial.begin(9600); // Setăm frecvența pentru Serial Monitor | + | |
- | Serial.println("Am început programul"); | + | |
- | pinMode(buton, INPUT); | + | |
- | } | + | |
- | int buttonState = 0; | + | |
- | void loop() | + | |
- | { | + | |
- | buttonState = digitalRead(buton); | + | |
- | Serial.print("Starea butonului este: "); // Mesaj ce precedează valoarea | + | |
- | Serial.println(buttonState); | + | |
- | } | + | |
- | + | ||
- | + | ||
- | </code> | + | |
- | + | ||
- | Outputul codului de mai sus va vi: | + | |
- | + | ||
- | Am început programul | + | |
- | + | ||
- | Starea butonului este 0 | + | |
- | + | ||
- | Starea butonului este 0 | + | |
- | + | ||
- | Starea butonului este 0 | + | |
- | + | ||
- | //Am apăsat pe buton// | + | |
- | + | ||
- | Starea butonului este 1 | + | |
- | + | ||
- | Starea butonului este 1 | + | |
- | + | ||
- | Starea butonului este 1 | + | |
+ | Cerințe avansate: | ||
+ | * Dacă în momentul generării punctului, se află deja un punct în colțul din stânga jos al ecranului, acesta se va genera pe prima poziție liberă de pe prima linie. Dacă linia este ocupată complet, se va trece la linia următoare. | ||
+ | * Stingerea unui led: Dacă pe poziția pe care am “mutat” un led se află deja un led aprins, acesta se va aprinde și stinge repetat (o dată la 100 ms). Utilizatorul va avea la dispoziție două acțiuni: | ||
+ | - Fie apasă logo-ul, iar led-ul se va stinge. | ||
+ | - Fie apasă unul din cele doua butoane (A sau B), iar led-ul se va mișca pe poziția noua. Astfel led-ul “suprapus anterior” va rămâne aprins. |