Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:lab:lab1-2022 [2022/05/01 14:21]
florin.stancu
pm:lab:lab1-2022 [2023/03/16 15:37] (current)
alexandru.predescu [4. Exerciții]
Line 174: Line 174:
     /* pune datele în buffer; transmisia va porni automat în urma scrierii */     /* pune datele în buffer; transmisia va porni automat în urma scrierii */
     UDR0 = data;     UDR0 = data;
 +}
 +
 +char USART0_receive()
 +{
 +  /* asteapta cat timp bufferul e gol */
 +  while (!(UCSR0A & (1 << RXC0)));
 +
 +  /* returneaza datele din buffer */
 +  return UDR0;
 } }
 </​file>​ </​file>​
Line 225: Line 234:
 void loop() void loop()
 { {
-  if (Serial.available()){+  if (Serial.available()) {
     char a = Serial.read();​     char a = Serial.read();​
     char buf[20];     char buf[20];
Line 244: Line 253:
   * "​off"​ - stinge un led   * "​off"​ - stinge un led
   * "​blink"​ – blink un led la interval de 200 ms   * "​blink"​ – blink un led la interval de 200 ms
-  * "​get"​ - afișează prin interfața serială starea unui buton apăsat+  * "​get"​ - afișează prin interfața serială starea unui buton
  
 Fiecare comandă va fi urmată de caracterul de control: "​\n"​ (newline). Configurați terminalul serial să trimită (doar) acest caracter după fiecare mesaj. Implementați un program în Arduino care să recunoască aceste comenzi și să realizeze acțiunile corespunzătoare pentru fiecare dintre ele. Folosiți pin-ul 13 (PB5) pentru LED și pin-ul 2 (PD2) pentru buton. Fiecare comandă va fi urmată de caracterul de control: "​\n"​ (newline). Configurați terminalul serial să trimită (doar) acest caracter după fiecare mesaj. Implementați un program în Arduino care să recunoască aceste comenzi și să realizeze acțiunile corespunzătoare pentru fiecare dintre ele. Folosiți pin-ul 13 (PB5) pentru LED și pin-ul 2 (PD2) pentru buton.
Line 251: Line 260:
   * Comenzile on/off vor opri funcția blink.   * Comenzile on/off vor opri funcția blink.
  
-<note important>​Pentru a putea primi comenzi pe serială, este de dorit să nu existe delay-uri sau funcții blocante în programul principal (în loop). Funcția blink ar trebui să fie non-blocantă. Vom folosi funcția millis() pentru a măsura durata de timp (în loc să ținem programul blocat până expiră delay-ul) astfel:+<note tip> 
 +  * pentru a primi un șir de caractere de la interfața serială, puteți folosi un vector de caractere pe post de buffer 
 +  * pentru a verifica dacă șirul de caractere primit corespunde cu comanda, puteți folosi funcția //​strcmp()//,​ ex. //strcmp(a, b) == 0//      
 +</​note>​ 
 + 
 + 
 +<note important>​Pentru a putea primi comenzi pe serială, este de dorit să nu existe delay-uri sau funcții blocante în programul principal (în loop). Funcția blink ar trebui să fie non-blocantă. Vom folosi funcția ​//millis()// pentru a măsura durata de timp (în loc să ținem programul blocat până expiră delay-ul) astfel:
  
 <​code>​ <​code>​
Line 267: Line 282:
  
 {{:​pm:​lab:​lab1_2022:​task1.png?​600|Schema Task 1}} {{:​pm:​lab:​lab1_2022:​task1.png?​600|Schema Task 1}}
 +<​hidden>​
 <​solution>​ <​solution>​
  
Line 273: Line 288:
  
 </​solution>​ </​solution>​
 +</​hidden>​
 **Task 2** (3p) **Task 2** (3p)
  
Line 297: Line 312:
  
 <note important>​Terminalul serial din Arduino este configurat implicit în mod 8N1, doar baud rate-ul fiind configurabil. Pentru a avea control mai precis asupra formatului se poate folosi un terminal serial dedicat, precum [[https://​www.putty.org/​|Putty]].</​note>​ <note important>​Terminalul serial din Arduino este configurat implicit în mod 8N1, doar baud rate-ul fiind configurabil. Pentru a avea control mai precis asupra formatului se poate folosi un terminal serial dedicat, precum [[https://​www.putty.org/​|Putty]].</​note>​
 +<​hidden>​
 <​solution> ​ <​solution> ​
 [[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab1/​task2 | Solutie task2]] [[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab1/​task2 | Solutie task2]]
 </​solution>​ </​solution>​
 +</​hidden>​
  
 **Task 3** (4p) **Task 3** (4p)
Line 322: Line 338:
 </​note>​ </​note>​
  
-<​solution> ​ 
-[[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab1/​task3 | Solutie task3]] 
-</​solution>​ 
  
 **Bonus** (2p) **Bonus** (2p)
Line 335: Line 348:
 {{:​pm:​lab:​uno.jpg?​600|pinout Arduino UNO}} {{:​pm:​lab:​uno.jpg?​600|pinout Arduino UNO}}
   * Responsabil:​ [[alexandru.predescu@upb.ro | Alexandru Predescu]]   * Responsabil:​ [[alexandru.predescu@upb.ro | Alexandru Predescu]]
 +
 +<​solution>​
 +<​hidden>​[[https://​github.com/​cs-pub-ro/​laborator-pm/​tree/​master/​laborator/​lab1/​task3 | Solutie task3]]</​hidden>​
 +</​solution>​
  
pm/lab/lab1-2022.1651404109.txt.gz · Last modified: 2022/05/01 14:21 by florin.stancu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0