Ben uygulamayı LCD Keypad Shield ile yaptığım için fritzingde hem LCD'siz hem LCD li olanı çizmek istedim.
Modülden bahsetmek gerekirse, modülün 5 adet pini var. GND ve 5V pinlerinin dışında, VRx pini var ki bu pin X düzlemindeki konumunu , VRy pini Y düzlemindeki konumunu bize gösterecek. SW pini ile de buton durumunu okuyacağız.
Uygulamayı açısal konumunu X ve Y düzlemindeki konuma göre alan iki servo motor ve buton durumuna göre yanıp sönen led ile yapacağız.
SW pinini arduinoya direkt bağladım o yüzden basılı olduğunda "0" basılı olmadığında "1" değeri döndürecek. Siz isterseniz pull-down direnci ile girebilirsiniz.
Kodlar;
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <LiquidCrystal.h> #include <Servo.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Servo servo_x,servo_y; // 2 Adet Servo Motoru Tanımlıyoruz #define xPin A3 // VRx Pin #define yPin A2 // VRy Pin #define butonPin A1 // SW Pin #define led 1 int x_angle=0; // Okunacak X Konum Değeri int y_angle=0; // Okunacak Y Konum Değeri int xPos = 0; // Okunan X değerine göre servo_x'in Açısı int yPos = 0; // Okunan Y değerine göre servo_y'nin Açısı int butonDurum = 0; void setup() { pinMode(butonPin, INPUT_PULLUP); pinMode(led,OUTPUT); lcd.begin(16, 2); servo_x.attach(3); servo_y.attach(2); } void loop() { lcd.clear(); xPos = analogRead(xPin); // X konumunu okuduk yPos = analogRead(yPin); // Y Konumunu okuduk butonDurum = digitalRead(butonPin); // Buton durumunu okuduk if(butonDurum==0) { digitalWrite(led,HIGH); // Buton basılı ise yanacak } else { digitalWrite(led,LOW); // Buton basılı değil ise sönecek } /* Okunan X ve Y konumunun ADC değerini (0-1023) 0-180 aralığına indirgedik. Servo Motoru okunan 0-1023 değerine göre 0-180 derece arasında konuma almasını sağlayacağız. map komutunun başına (int) ibaresi girdik çünkü servo.write() komutu integer değerle çalışır. Float değer olursa integer bir sayıya çevirmiş olduk. */ x_angle=(int)map(xPos,0,1023,0,180); y_angle=(int)map(yPos,0,1023,0,180); lcd.print("X: "); lcd.print(x_angle); // X açısını LCD'de yazdırdık lcd.setCursor(0,1); lcd.print("Y: "); lcd.print(y_angle); // Y açısını LCD'de yazdırdık lcd.print(" Button:"); lcd.print(butonDurum); // Buton durumunu LCD'de yazdırdık. servo_x.write(x_angle); // Servoyu sürdük servo_y.write(y_angle); // Servoyu sürdük delay(125); } |
Uygulamamızın videosu;
Hiç yorum yok:
Yorum Gönder