INPUT ( BUTTON - TUŞ - DÜĞME ÖRNEKLERİ )
1) Button - Tuş kullanımına bir çok durumda ihtiyaç duyacağız ve önemli bir elemandır.pin8'e bağladığımız button (tuş) ve direnç kombinasyonu ile arduino arayüzüne tuştan gelen bilgiyi göndererek bilgisayar ekranından gözlemleyelim.
- Tuşa basılmadığı zamanlarda ekrana durmadan 0 bilgisi gider iken
- Tuşa bastığımız andan itibaren ekrana durmadan 1 bilgisi gitmektedir
int dugme=8;
void setup(){
Serial.begin(9600);
pinMode(dugme,INPUT); // tuşlar giriş olarak ayarlanmıştır. Yani pin8 bu kez çıkış değilde girdi olarak ayarlamış oluyoruz.
}
void loop(){
int dugmeDurumu = digitalRead(dugme); // pin8 den okunan değeri anahtarDurumu isimli değişkenine atadık ve düğmeden gelecek olan bilgiyi digitalRead() komutu ile yapıyoruz.
Serial.println(dugmeDurumu);
delay(1);
}
EKRAN ÇIKTISI
tuşa basılmadan önce tuşa basıldı esnada
0 1
0 1
0 1
0 1
... ...
2) Aynı devreyi kullanarak arduino uno üzerinde bulunan pin13 deki led'i buton kontrolü ile yakıp söndürmeye çalışalım.
- Tuşa basılmadığı zamanlar da led yanmayacak
- Tuşa basıldığı zamanlar da ise led yanacak
( Bu komut daha çok oyuncak arabaları uzaktan kumandalarda kullanılır ileri - geri - sağa - sola gibi )
int anahtar=8;
int led=13;
void setup(){
pinMode(anahtar,INPUT);
pinMode(led,OUTPUT);
}
void loop(){
int anahtarDurumu = digitalRead(anahtar);
digitalWrite(led,anahtarDurumu); // HIGH = 1(açık) , LOW = 0 (kapalı) anlamına gelmektedir
}
3) Aynı işlemi farklı yazılımlar ile çalıştıralım
const int tus = 8;
const int led = 13;
int tusDurumu = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(tus, INPUT);
}
void loop(){
tusDurumu = digitalRead(tus);
if (tusDurumu == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
4) Bu kez aynı devrede butona her basıldığında sayı artışı yapılıyor ve bu sayıların takibini arduino arayüzünden USB bağlantısı ile görelim.
int button = 8;
int sayi = 0;
void setup(){
pinMode( button, INPUT );
Serial.begin(9600);
}
void loop(){
int kontrol = digitalRead( button );
if( kontrol == 1 ){ // kontrol değeri bire "1" eşit ise sayı değerini bir arttırıyor ve ekrana basıyor.
sayi = sayi + 1;
Serial.println( sayi );
delay(1);
}
}
NOT: Burada dikkat etmeniz gereken husus ise button'a basmaya başladığımız anda çok hızlı bir şekilde numaralar saymaya başlıyor ve ekran dan bu çıktıyı kontrol edin.
int button=8;
int sayi=0;
void setup(){
pinMode(button,INPUT);
Serial.begin(9600);
}
void loop(){
int kontrol=digitalRead(button);
if(kontrol==1){
sayi=sayi+1;
for(;;){
int kontrol=digitalRead(button);
if(kontrol==0)break;
}
Serial.println(sayi);
}
}
6) Bundan sonraki örnek komutlar bir önceki örneklerin farklı kodlar kullanılarak tekrarlanmıştır. Bu bölümler başlangıç olarak biraz karmaşık gelebilir ve bu gayet normal. Bu yüzden şimdilik üzerinde fazla durmayın. Sadece görmüş olun yeterli. Burada milis() komutu kullanarak düğmeye basıldığında led'i yakıp söndürelim.
const int buttonPin = 8;
const int ledPin = 13;
int ledState = HIGH;
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}
digitalWrite(ledPin, ledState);
lastButtonState = reading;
}
7) Düğmeye tıklanma sayacı ( numaratör ). 5 inci örnek bu işlemin aynısıdır fakat 5 inci örnek daha sade, kısa ve basit bir kullanım yöntemidir.
const int buttonPin = 8;
const int ledPin = 13;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
else {
Serial.println("off");
}
}
lastButtonState = buttonState;
}
8) Arduino içerisinde bulunan pin2 deki dahili pull-up direncini kullanarak pin13 deki led'i yakıp söndürmek
void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
digitalWrite(13,LOW);
}
void loop(){
int sensorVal = digitalRead(2);
Serial.println(sensorVal);
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}
const int buttonPin = 8;
const int ledPin = 13;
int ledState = HIGH;
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}
digitalWrite(ledPin, ledState);
lastButtonState = reading;
}
7) Düğmeye tıklanma sayacı ( numaratör ). 5 inci örnek bu işlemin aynısıdır fakat 5 inci örnek daha sade, kısa ve basit bir kullanım yöntemidir.
const int buttonPin = 8;
const int ledPin = 13;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
}
else {
Serial.println("off");
}
}
lastButtonState = buttonState;
}
8) Arduino içerisinde bulunan pin2 deki dahili pull-up direncini kullanarak pin13 deki led'i yakıp söndürmek
void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
digitalWrite(13,LOW);
}
void loop(){
int sensorVal = digitalRead(2);
Serial.println(sensorVal);
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}


Mehmet öncelikle yararlı bilgilerin için teşekkür ederim
YanıtlaSilArduino ya yeni başladım kendi çapımda bişeyler yapmaya çalışıyorum.
Yukarıda örnek 7 de yazmış olduğun sayıcı kodlarını enkoderden bilgi okumak için kullandım şu an ben gideceği adımları sayıp haritalama yapan efektif çalışan bir robot yapmaya çalışıyorum 2 adet enkoderli dc motorla yapmayı düşünüyorum ve robotta ultrasonik mesafe sensörleri kullanarak duvar takibi yaptıracağım. Ama robotun ileri giderken şaşırmaması için mesela sağ motor fazla gittiğinde yavaşlat yada sol motoru hızlandır gibi pwm kullanıp bunu nasıl yapabilirim, arduino mega 2560 kullanıyorum yada senin bildiğin otonom robotla ilgili örnek kodlar varmı nasıl bişeyler yazabilirim yardımcı olabilirsen sevinirim, saygılar
Merhaba Deniz,
Silöncelikle teşekkür ederim. ilk başta proje yaparken ilk tavsiyem, mümkünse piyasada hem kolay bulunan hemde internet ortamında fazlaca örneğini bulabileceğin parçalar kullanman. Burda şunu vurgulamak istiyorum. daha önce enkoderli bir dc motor kullanmadım. Yanlış bilmiyor isem enkoderli dc motorların kablo sayılarında bile farklılıklar olduğu. Öncelikle servo motor seçimi yapmanı tavsiye ederim ve servo motorlar ile ilgili çok fazla açıklayıcı örnek bulabilirsin. Servo motorda hız kontrolü olduğundan bu projen için en yararlı olan motor olacağını düşünüyorum. Diğer konular için daha detaylı bilgi verir isen yardımcı olurum.