
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΡ Π²ΡΠΎΡΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠΉ ΠΎΡΠ½ΠΎΠ²Π°ΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Arduino. ΠΡΠΎΡ ΡΡΠΎΠΊ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΠΈΠ³Π½Π°Π»ΠΎΠ², PWM-Π²Ρ ΠΎΠ΄Π°ΠΌ Arduino ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΠ·ΡΠΊΠ΅ Arduino.
Π ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ ΠΠΆΠ΅ΡΠ΅ΠΌΠΈ ΠΠ»ΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊ PWM-Π²Ρ ΠΎΠ΄Ρ Arduino ΠΊΠ½ΠΎΠΏΠΊΡ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΊΠΎΡΡΡΡ ΡΠ²Π΅ΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π°.
PWM, ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΒ Pulse-Width Modulation — ΡΡΠΎ ΡΠΈΡΠΎΡΠ½ΠΎ-ΠΈΠΌΠΏΡΠ»ΡΡΠ½Π°Ρ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΡ. Π― ΠΏΠ»Π°Π½ΠΈΡΡΡ ΠΏΠΎΡΠ²ΡΡΠΈΡΡ ΡΡΠΎΠΌΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π±ΡΠ΄Ρ Π·Π°ΠΎΡΡΡΡΡΡ Π·Π΄Π΅ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠΌ ΠΏΠΎΠ½ΡΡΠΈΠΈ. ΠΡΠΎΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ° ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ:
- ΠΠ»Π°ΡΠ° Arduino
- ΠΠ½ΠΎΠΏΠΊΠ°
- Π‘Π²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄
- 2 ΡΠ΅Π·ΠΈΡΡΠΎΡΠ°
- Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄Π°
ΠΡΠ°ΠΊ, ΡΠΌΠΎΡΡΠΈΠΌ Π²ΠΈΠ΄Π΅ΠΎ.
Π§Π°ΡΡΡ 1.
Π§Π°ΡΡΡ 2.
Π’ΠΈΠΏ boolean — ΡΡΠΎ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1 ΠΈΠ»ΠΈ 0 (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΡΠΈΠ½Π½ΠΎ-Π»ΠΎΠΆΠ½ΠΎ, Π΅ΡΡΡ ΡΠΈΠ³Π½Π°Π»-Π½Π΅Ρ ΡΠΈΠ³Π½Π°Π»Π°). Π ΡΠ·ΡΠΊΠ΅ Arduino Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΡΠΈΠΏΡ boolean: HIGH-LOW, TRUE-FALSE. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, HIGH = 1, LOW = 0, TRUE = 1, FALSE = 0.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΅ΡΡΡ, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ: == (ΡΠ°Π²Π½ΠΎ), &&(ΠΈ), Π° ΡΠ°ΠΊΠΆΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡΡΠΈΡΠ°Π½ΠΈΡ !, ΠΊΠΎΡΠΎΡΡΠΉ «ΠΈΠ½Π²Π΅ΡΡΠΈΡΡΠ΅Ρ» Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Ρ.Π΅. Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ledPin Π½Π° 0, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π²Π½ΠΎ 1 ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ledPin Π² 1, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π²Π½ΠΎ 0. Π’Π°ΠΊΠΆΠ΅ Π·Π΄Π΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ if-else.
ΠΠΎΠ΄ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΌΡ Π²ΠΈΠ΄Π΅ΠΎ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | const int LED=9; // Π‘Π²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΊ 9 Π²ΡΠ²ΠΎΠ΄Ρ const int BUTTON=2; // ΠΠ½ΠΎΠΏΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° ΠΊΠΎ 2 Π²ΡΠ²ΠΎΠ΄Ρ boolean lastButton = LOW; // ΠΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ boolean currentButton=LOW; // Π’Π΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ boolean ledOn=false; // Π’Π΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° void setup() { pinMode(LED, OUTPUT); // ΠΠΈΠ½ ΡΠΎ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠΌ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΡ
ΠΎΠ΄Π° pinMode(BUTTON, INPUT); // ΠΠΈΠ½ Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²Ρ
ΠΎΠ΄Π° } // Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π΄ΡΠ΅Π±Π΅Π·Π³Π° // ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ // ΠΈ Π²ΡΠ΄Π°Π΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ boolean debounce(boolean last) { boolean current=digitalRead(BUTTON); // ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ // Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ... if (last != current) { delay(5); // ΠΠ΄Π΅ΠΌ 5 ΠΌΡ current=digitalRead(BUTTON); // Π‘ΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ return current; // ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ } } void loop() { currentButton=debounce(lastButton); // Π΅ΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠΈΠ΅ if (lastButton == LOW && currentButton == HIGH){ ledOn = !ledOn; // ΠΠ΅Π½ΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° Π½Π° ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ } lastButton=currentButton; // ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π²Π½ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ digitalWrite(LED, ledOn); // ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° } |
ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ Π²ΠΎΠΏΡΠΎΡΡ — Π·Π°Π΄Π°Π²Π°ΠΉΡΠ΅.
ΠΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊ 1. ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π³ΠΈ Ρ Arduino
ΠΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊ 3. ΠΡΠ½ΠΎΠ²Ρ ΡΡ Π΅ΠΌΠΎΡΠ΅Ρ Π½ΠΈΠΊΠΈ
ΠΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊ 4. ΠΠ½Π°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ Π²Ρ ΠΎΠ΄Ρ Arduino
ΠΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊ 5. ΠΠΎΡΠΎΡΡ ΠΈ ΡΡΠ°Π½Π·ΠΈΡΡΠΎΡΡ
ΠΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊ 6. Serial ΠΈ Processing
ΠΡΠΈΠ²Π΅Ρ.
Π― Π½Π΅ ΠΏΠΎΠ½ΡΠ» ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ «last» Π² ΡΡΠ½ΠΊΡΠΈΠΈ debounce, «last» ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ°ΠΊΠΎΠΉ? ΠΠΎΡΠ»Π΅ if ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ «last» Ρ «current», Π½ΠΎ ΠΎΡΠΊΡΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π½Π°Π΅Ρ ΡΠ΅ΠΌΡ ΡΠ°Π²Π΅Π½ «last»??
ΠΠΈΡ Π°ΠΈΠ», ΠΏΡΠΈΠ²Π΅Ρ. last ΠΈ current — ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . Π last Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π° Π² current — ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. last ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΡ debounce. ΠΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ debounce (lastButton), ΡΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ debounce, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ last Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ lastButton.
Π’ΠΎ Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ «last» ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠΎΡΠΊΠΈ «return current;» ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ debounce ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π² ΡΠΈΠΊΠ»Π΅ void loop ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅? Π― ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΠ»?
Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΊΠΎΠ΄ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠ°ΡΡΠΈ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ last ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² 28 ΡΡΡΠΎΠΊΠ΅
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΡ debounce ΠΈ last ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ lastButton