This shows you the differences between two versions of the page.
|
pm:prj2025:iotelea:bogdan.fratiman [2025/05/25 21:19] bogdan.fratiman |
pm:prj2025:iotelea:bogdan.fratiman [2025/05/26 12:08] (current) bogdan.fratiman |
||
|---|---|---|---|
| Line 59: | Line 59: | ||
| **Surse şi funcţii implementate:** | **Surse şi funcţii implementate:** | ||
| - | * ''setup()'' - Inițializează toate perifericele și configurează Timer1 în mod Fast PWM (WGM13:0 = 14) cu TOP = ICR1 = 40000, pentru a genera un semnal PWM de 50 Hz pe pinul OC1A (pin 9), cu un prescaler de 8, potrivit pentru servomotorul SG90. | + | * ''setup()'' - Inițializează toate perifericele și configurează Timer1 în mod Fast PWM (WGM13:0 = 14) cu TOP = ICR1 = 40000, pentru a genera un semnal PWM de 50 Hz pe pinul OC1A (pin 9), cu un prescaler de 8, potrivit pentru servomotorul SG90: |
| - | * ''setServoAngle(int angle)'' - Primește un unghi între 0° și 180°, îl convertește într-un impuls PWM între 750 și 2300 µs, apoi setează valoarea în OCR1A. | + | <code java> |
| + | TCCR1A = (1 << WGM11); | ||
| + | TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); | ||
| + | |||
| + | ICR1 = 40000; | ||
| + | TCCR1A |= (1 << COM1A1); | ||
| + | </code> | ||
| + | * ''setServoAngle(int angle)'' - Primește un unghi între 0° și 180°, îl convertește într-un impuls PWM între 750 și 2300 µs, apoi setează valoarea în OCR1A: | ||
| + | <code java> | ||
| + | int pulseWidth = map(angle, 0, 180, 750, 2300); | ||
| + | OCR1A = pulseWidth * 2; | ||
| + | </code> | ||
| * ''handleButtonPress()'' - Activează rutina de întrerupere pentru buton setând flag-ul ''buttonPressed''. | * ''handleButtonPress()'' - Activează rutina de întrerupere pentru buton setând flag-ul ''buttonPressed''. | ||
| - | * ''loop()'' - Bucla principală. | + | <code java> |
| + | attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, RISING); | ||
| + | </code> | ||
| + | * ''loop()'' - Bucla principală a programului. Se ocupă de: | ||
| + | * măsurarea distanței cu senzorul HC-SR04 | ||
| + | <code java> | ||
| + | digitalWrite(trigPin, LOW); | ||
| + | delayMicroseconds(2); | ||
| + | digitalWrite(trigPin, HIGH); | ||
| + | delayMicroseconds(10); | ||
| + | digitalWrite(trigPin, LOW); | ||
| + | |||
| + | long duration = pulseIn(echoPin, HIGH); | ||
| + | float distance = duration * 0.034 / 2; | ||
| + | </code> | ||
| + | * actualizarea ecranului LCD | ||
| + | * verificarea stării butonului | ||
| + | * acționarea barierei prin apeluri la ''setServoAngle(...)'' | ||
| </note> | </note> | ||
| Line 70: | Line 98: | ||
| Link Youtube: | Link Youtube: | ||
| + | https://youtube.com/shorts/j4JR8kcPbFc?feature=share | ||
| </note> | </note> | ||