Differences

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

Link to this comparison view

pm:lab:lab0-2024 [2026/02/22 17:13]
florin.stancu
pm:lab:lab0-2024 [2026/02/27 15:46] (current)
florin.stancu
Line 379: Line 379:
  
 <​code>​ upload_protocol = urclock </​code>​ <​code>​ upload_protocol = urclock </​code>​
 +
 +Dacă doriți să folosiți alt editor de text (e.g., ''​vim''​),​ pur și simplu instalați PlatformIO din package manager-ul distribuției voastre și utilizați CLI-ul:
 +
 +<code sh>
 +pio init --board ATmega324P
 +# creați src/main.c, editați codul, adăugați în platform.ini ca mai sus
 +# apoi, pentru a compila + uploada pe placă folosiți comanda:
 +pio run -t upload
 +</​code>​
  
 === 4.3.1 Alternativă la PlatformIO: instalare separată avr-gcc toolchain === === 4.3.1 Alternativă la PlatformIO: instalare separată avr-gcc toolchain ===
Line 491: Line 500:
      * Hint: folosiți un automat finit de stări pentru a implementa această funcționalitate ;)      * Hint: folosiți un automat finit de stări pentru a implementa această funcționalitate ;)
      * Hint2: pentru a obține culoarea galben, este nevoie ca și LED-ul roșu și cel verde să fie aprinse simultan!      * Hint2: pentru a obține culoarea galben, este nevoie ca și LED-ul roșu și cel verde să fie aprinse simultan!
-     * **Bonus**: la long button press (e.g., timp de 2 secunde) să reseteze iar spre RED (hard: fără timere ​pentru cine știe deja :D)!+     * **Bonus**: la long button press (e.g., timp de 2 secunde) să reseteze iar spre RED (însă ​fără ​a utiliza ​timere ​hardware)!
  
 <note hint> <note hint>
Line 500: Line 509:
  
 while True: while True:
-  if state == SEM_OFF:+  if state == SEM_RED:
     if btn_pressed(BTN1):​     if btn_pressed(BTN1):​
       state = SEM_YELLOW       state = SEM_YELLOW
Line 507: Line 516:
     sleep(1ms)     sleep(1ms)
  
-  if state == SEM_GREEN:+  if state == SEM_YELLOW:
     # aici nu avem verificarea btn_pressed(BTN1)...     # aici nu avem verificarea btn_pressed(BTN1)...
-    # TODO: aprindem led-ul ​verde, așteptăm blocant... +    # TODO: aprindem led-ul ​galben, așteptăm blocant, ​apoi se trece in starea: 
-    # după 10s delayavansăm ​starea: +    sleep(2sec) 
-    state = SEM_YELLOW+    state = SEM_GREEN
  
-  if state == SEM_YELLOW:+  if state == SEM_GREEN:
     # TODO: facem blink timp de 2sec și trecem în starea RED     # TODO: facem blink timp de 2sec și trecem în starea RED
-    # folosiți altă variabilă pentru a contoriza cele 2 secunde din fragmente ​+    # eventual, ​folosiți altă variabilă pentru a contoriza cele 2 secunde din fragmente ​
     # (trebuie să faceți blink la LED!)     # (trebuie să faceți blink la LED!)
  
Line 530: Line 539:
 isLedBlinking = 0 isLedBlinking = 0
 ledCurrentState = 0 ledCurrentState = 0
-lastBlinkTicks = 0  # "​data" ​(în ticks) ultimei schimbări de stare a LED-ului+lastBlinkTicks = 0  # timestamp-ul ​(în ticks) ultimei schimbări de stare a LED-ului
  
 while True: while True:
Line 536: Line 545:
     # inversare booleană     # inversare booleană
     isLedBlinking = !isLedBlinking     isLedBlinking = !isLedBlinking
 +
   if isLedBlinking:​   if isLedBlinking:​
     # testăm dacă s-a scurs timpul (500ms) de la ultima schimbare de stare     # testăm dacă s-a scurs timpul (500ms) de la ultima schimbare de stare
     if (ticks - lastBlinkTicks) > 50:  # ATENȚIE: 50 ticks == 500ms!     if (ticks - lastBlinkTicks) > 50:  # ATENȚIE: 50 ticks == 500ms!
-      lastBlinkTicks = ticks  # salvăm ​"​ticks"​ curent+      lastBlinkTicks = ticks  # salvăm ​timestampul evenimentului
       ledCurrentState = !ledCurrentState ​ # inversăm starea LED-ului       ledCurrentState = !ledCurrentState ​ # inversăm starea LED-ului
     # apoi, *mereu*, aplicăm starea curentă a LED-ului:     # apoi, *mereu*, aplicăm starea curentă a LED-ului:
     gpio_set(LED,​ ledCurrentState)     gpio_set(LED,​ ledCurrentState)
 +
   else:   else:
     # ne asigurăm că LED-ul e stins     # ne asigurăm că LED-ul e stins
Line 570: Line 581:
   * [[jan.vaduva@upb.ro | Alex Văduva]]   * [[jan.vaduva@upb.ro | Alex Văduva]]
   ​   ​
- 
pm/lab/lab0-2024.1771773207.txt.gz · Last modified: 2026/02/22 17:13 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