Mundarija:
- 1 -qadam: DS1803 ulanishlari
- 2 -qadam: Bayt buyrug'i
- 3 -qadam: DS1803 -ni boshqarish
- 4 -qadam: sozlash
- 5 -qadam: Dastur
Video: DS1803 Arduino bilan ikkita raqamli potentsiometr: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:28
Men DS1803 raqamli potmetrini Arduino bilan bo'lishishni yoqtiraman. Ushbu IC ikkita simli interfeys orqali boshqariladigan ikkita raqamli potmetrni o'z ichiga oladi, buning uchun men sim.h kutubxonasidan foydalanaman.
Bu IC oddiy analog potmetrni almashtirishi mumkin. Shunday qilib, siz kuchaytirgich yoki quvvat manbasini boshqarishingiz mumkin.
Bu ko'rsatmada men ishlayotganini ko'rsatish uchun ikkita LEDning yorqinligini boshqaraman.
Arduino aylanadigan kodlovchi pulslarini hisoblab chiqadi va qiymatni o'zgaruvchan qozonga [0] va qozonga [1] joylashtiradi. Enkoderning kalitini bosganingizda, idish [0] va qozon [1] o'rtasida almashishingiz mumkin.
Idishlarning haqiqiy qiymati DS1803 -dan o'qiladi va o'zgaruvchan potValue [0] va potValue [1] ga joylashtiriladi va LCD displeyda ko'rsatiladi.
1 -qadam: DS1803 ulanishlari
Bu erda siz DS1803 ulanishlarini ko'rishingiz mumkin. H - potentsiometrning yuqori tomoni, L - past tomoni va V - tozalagich. SCL va SDA - bu avtobus ulanishlari.
A0, A1 va A2 ulanishi bilan siz DS1803 -ga o'z manzilini berishingiz mumkin, shu orqali siz bitta avtobus orqali ko'proq qurilmalarni boshqarishingiz mumkin. Mening misolimda barcha pinlarni erga ulash orqali DS1803 manzilini 0 beraman.
2 -qadam: Bayt buyrug'i
DS1803 ning ishlash usuli buyruq baytida ishlatilishi mumkin. "Yozish potentsiometr-0" ni tanlaganingizda ikkala potentsiometr ham tanlanadi, faqat potentsiometr-0 ni sozlashni xohlasangiz, faqat birinchi ma'lumot baytini yuborishingiz kerak bo'ladi. "Potentsiometr-1 yozing" faqat potmetr-1 ni sozlang. "Ikkala potentsiometrga ham yozing" ikkala potentsiometrga bir xil qiymat beradi.
3 -qadam: DS1803 -ni boshqarish
Boshqaruv baytida (3 -rasm) qurilma identifikatori mavjud, bu har doimgidek qoladi. Mening misolimda A0, A1 va A2 0 ga teng, chunki biz barcha A-pinlarni erga qo'yish orqali manzilni tanlaymiz. Oxirgi R/V biti Arduino -dagi "Wire.beginTransmission" va "Wire.requestFrom" buyrug'i bilan 0 yoki 1 ga o'rnatiladi. 5 -rasmda siz butun telegrammani ko'rishingiz mumkin. O'qilgan telegramma 4 -rasmda ko'rsatilgan.
4 -qadam: sozlash
Bu sxema hamma narsani qanday ulash kerakligini ko'rsatadi. Nokia LCD displeyi har xil ulanishlar bilan ta'minlangan, uni to'g'ri ulaganingizga ishonch hosil qiling. Shuningdek, uning turli xil versiyalari aylanadigan kodlovchi, ba'zilari o'rta pinada umumiydir, boshqalari esa yo'q. Men kodlovchi A va B chiqish signallarini filtrlash uchun ozgina filtr tarmog'ini (100nF qopqoqli 470 Ohmli rezistor) qo'ydim. Menga bu filtr kerak, chunki chiqishda juda ko'p shovqin bor edi. Men shovqinni bekor qilish uchun dasturga hisobdan chiqish taymerini qo'ydim. Qolganlari uchun menimcha, sxema aniq. LCD displeyni Adafruit https://www.adafruit.com/product/338 orqali buyurtma qilish mumkin.
5 -qadam: Dastur
2 simli avtobusdan foydalanish uchun men Wire.h kutubxonasini o'z ichiga olaman. LCD-dan foydalanish uchun men Adafruit kutubxonasini o'z ichiga olaman, uni https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library saytidan yuklab olishingiz mumkin, shuningdek Adafruit_GFX.h kutubxonasi bu erda https:// github. com/adafruit/Adafruit-GFX-kutubxonasi.
#qo'shing
#qo'shing
#qo'shing
Adafruit_PCD8544 displeyi = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Bu erda siz barcha o'zgaruvchilarni ko'rishingiz mumkin. Bayt va buyruq baytini yuqorida aytib o'tilganidek boshqaring. DeBounceTime siz kodlovchi shovqiniga qarab sozlanishi mumkin.
bayt pot [2] = {1, 1}; bayt controlByte = B0101000; // 7 bit, bayt buyrug'iByte = B10101001; // oxirgi 2 bit - bu potmetrni tanlash. bayt potValue [2]; int i = 0; int deBounceTime = 10; // Bu qiymatni shovqin turiga qarab rostlang int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; imzosiz uzoq newDebounceTime = 0; imzosiz uzoq oldTime; mantiqiy bosilgan = 0; boolean soni = 1;
O'rnatishda men to'g'ri pinlarni aniqlayman va statik matnni LCD displeyga qo'yaman
void setup () {Wire.begin (); Serial.begin (9600); pinMode (kodlovchi_A, Kirish); pinMode (encoder_B, INPUT); pinMode (tugmaPin, Kirish); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (Qora); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Loopda men birinchi navbatda interval 500 ms dan oshishini tekshiraman, agar bo'lsa, LCD yangilanadi. Aks holda, kodlovchi tugmasi tekshiriladi. Agar toggleBuffer bosilsa, qo'ng'iroq qiling. Shundan so'ng, kodlovchi tekshiriladi. Agar 0 kirish past bo'lsa (burilish aniqlansa) Men B kirishini tekshiraman, agar B kirishi 0 bo'lsa, men potni , boshqalarini kamaytiraman. Shundan so'ng, qiymat DS1803 ga tel.write orqali yuboriladi.
void loop () {
interval ();
if (digitalRead (buttonPin) == 1 && (press == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressed = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} boshqa {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // uzatishni boshlang
Wire.write (commandByte); // Wire.write potmetrlarini tanlash (pot [0] * 10); // Wire.write potmetr ma'lumotlarining 1 -baytini yuborish (pot [1] * 10); // Wire.endTransmission potmeter ma'lumotlarining 2 -baytini yuborish (); // uzatishni to'xtating} else if if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {pressed = 1; agar (i == 0) {i = 1;} boshqa {i = 0;}}
Avval men varibllarni yozishim kerak bo'lgan joyni tozalayman. Men bu sohada to'rtburchak chizish uchun qilaman. Shundan so'ng men o'zgaruvchilarni ekranga yozaman.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // birinchi potmetr baytini o'qing potValue [1] = Wire.read (); // ikkinchi potmetr baytini o'qing display.fillRect (40, 0, 40, 45, WHITE); // LCD displeyda aniq o'zgaruvchan ekran.setCursor (40, 10); display.print (potValue [0]); // LCD displeyga 1 -potmetr qiymatini yozing.setCursor (40, 22); display.print (potValue [1]); // LCD displeyga 2 -potmetr qiymatini yozing.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervalli taymer, LCD ga ma'lumotlarni yozish uchun, agar ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Tavsiya:
Arduino uchun MCP41HVX1 raqamli potentsiometr: 10 qadam (rasmlar bilan)
MCP41HVX1 Arduino uchun raqamli potentsiometr: MCP41HVX1 raqamli potentsiometrlar oilasi (aka DigiPots) analog potansiyometr funktsiyasini taqlid qiluvchi va SPI orqali boshqariladigan qurilmalardir. Masalan, ilova sizning stereo ovoz balandligi tugmachasini DigiPot bilan almashtiradi
Pitonda potentsiometr tomonidan boshqariladigan ikkita 7 segmentli displey - ko'rish barqarorligining namoyishi: 9 qadam (rasmlar bilan)
7-segmentli ikkita displey CircuitPython-da potentsiometr tomonidan boshqariladi-ko'rish barqarorligining namoyishi: Ushbu loyiha 7-segmentli LED displeylaridagi (F5161AH) displeyni boshqarish uchun potentsiometrdan foydalanadi. Potentsiometr tugmachasi aylantirilganda, ko'rsatiladigan raqam 0 dan 99 gacha o'zgaradi. Har qanday vaqtda faqat bitta LED yonadi, lekin juda qisqa
3 ta potentsiometr va Arduino bilan 3 ta servo dvigatelni boshqarish: 11 qadam (rasmlar bilan)
3 ta potentsiometr va Arduino bilan 3 ta servo dvigatelni boshqarish: Salom. Bu mening birinchi o'rgatuvchim, shuning uchun, agar men uni sozlashda xatolarga yo'l qo'ysam, sabr qilasiz deb umid qilaman. Bu yangi boshlanuvchilar uchun yozilgan, shuning uchun orangizdagi eng ilg'orlari ko'p narsalarni o'tkazib yuborishi mumkin va men faqat o'zimning simimni ulashim mumkin
Raqamli va ikkilik soat 8 raqamli X 7 segmentli LED displeyda: 4 qadam (rasmlar bilan)
Raqamli va ikkilik soat 8 ta raqamli X 7 segmentli LED displeyda: Bu mening raqamli & 8 dyuymli x 7 segmentli LED displey yordamida ikkilik soat. Men odatiy qurilmalar, xususan, soatlar uchun yangi xususiyatlar berishni yaxshi ko'raman va bu holda ikkilik soat uchun 7 segmentli displeydan foydalanish noan'anaviy va
G'arbiy raqamli ikkita variantli USB muhofazasini qanday ochish kerak: 5 qadam
G'arbiy raqamli ikkita variantli USB muhofazasini qanday ochish mumkin: G'arbiy Raqamli Dual-Optionli USB-korpuslar ma'lumotlarni uzatish (yuqori tezlikdagi sneakernet) yoki faqat ma'lumotlarning oflayn zaxira nusxalarini yaratish uchun qulay qurilmalardir. sig'imi past, aks holda haydovchingiz o'lishi mumkin