#include <EEPROM.h>
void setup(){
unsigned char buton1 = 3,buton2 = 2,buton3 = 1;
EEPROM[0] = buton1; //EEPROM'a kaydet
EEPROM[1] = buton2; //EEPROM'a kaydet
EEPROM[2] = buton3; //EEPROM'a kaydet
Serial.begin(115200);
//EEPROM'dan oku ekrana yazdır
Serial.println("Buton1: "+(String)EEPROM[0]+" Buton2: "+(String)EEPROM[1]+" Buton3: "+(String)EEPROM[2]);
}
void loop(){}
tekrar merhaba,Kartın gücü kesildiğinde yada resetlendiğinde değerlerin saklı kalmasını istiyorsan eeprom haricinde birşey işini çözmeyecektir.
Arduino EEPROM kitaplığı işleri kolaylaştırmak için eepromnu bir dizi gibi kullanılmasını sağlayan bir tarz geliştirmiştir. Harici bir fonksiyon kullanmadan sadece EEPROM[] anahtar kelimesini kullanarak eepromu bir dizi gibi hem okumayı hem yazmayı sağlamıştır. Aşağıdaki örneği kendi projene uyarlayabilirsin.
C++:#include <EEPROM.h> void setup(){ unsigned char buton1 = 3,buton2 = 2,buton3 = 1; EEPROM[0] = buton1; //EEPROM'a kaydet EEPROM[1] = buton2; //EEPROM'a kaydet EEPROM[2] = buton3; //EEPROM'a kaydet Serial.begin(115200); //EEPROM'dan oku ekrana yazdır Serial.println("Buton1: "+(String)EEPROM[0]+" Buton2: "+(String)EEPROM[1]+" Buton3: "+(String)EEPROM[2]); } void loop(){}[/CO [/QUOTE]
#include <Arduino.h>
int buton = 12;
int buton2 = 11;
int buton3= 13;
int led1 = 3;
int led2= 4;
int butondurumu = 0;
int butondurumu2 = 0;
int butondurumu3 = 0;
String led_sirasi = "";
void setup() {
pinMode(buton, INPUT);
pinMode(buton2, INPUT);
pinMode(buton3, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
butondurumu = digitalRead(buton);
butondurumu2 = digitalRead(buton2);
butondurumu3 = digitalRead(buton3);
if (butondurumu == HIGH) {
while(butondurumu == HIGH) butondurumu = digitalRead(buton);
led_sirasi += '1';
}
if (butondurumu2 == HIGH) {
while(butondurumu2 == HIGH) butondurumu = digitalRead(buton2);
led_sirasi += '2';
}
if (butondurumu3 == HIGH) {
while (butondurumu3 == HIGH) butondurumu3 = digitalRead(buton3);
for(int i=0;i<led_sirasi.length();i++){
if(led_sirasi[i] == '1'){
digitalWrite(led1,HIGH);
delay(200);
digitalWrite(led1,LOW);
}
else if(led_sirasi[i] == '2'){
digitalWrite(led2,HIGH);
delay(200);
digitalWrite(led2,LOW);
}
}
led_sirasi = "";
}
}
teşekkür ederim hemen deniyorum. ve sonuçlar sizlerle de paylaşacağım.Anladığım kadarıyla ilk iki butona basıldığında basılma sırasıyla basılma sayılarını kaydedip üçüncü butona basıldığında bu kaydı kullanarak ledleri yakıp söndürmek istiyorsun. Öncelikle şunu söyleyim mikrokontrolörlerin ramleri sınırlı olduğu için dinamik büyüyen değişkenler tehlikelidir. Belirli bir büyüklükten sonra kilitlenecektir. Sabit büyüklükteki dizileri kullanman derleyici kontrolü sayesinde böyle bir tehlike olduğunda seni kurtaracaktır. Sorunun cevabına gelirsek biraz değişik bir yaklaşımla dinamik olarak büyüyebilen String kitaplığından faydalanabilirsin. Yani her butona basıldığında Stringe bir harf ekleyebilir üçüncü butona basıldığında bu harfleri sırayla kontrol ederek ilgili ledi yakabilirsin. Tekrar söylüyorum sınırlı değişken kullanmak senin için daha iyi olacaktır. Şimdilik senin kodunun değiştirilmiş hali işini görecektir.
C++:#include <Arduino.h> int buton = 12; int buton2 = 11; int buton3= 13; int led1 = 3; int led2= 4; int butondurumu = 0; int butondurumu2 = 0; int butondurumu3 = 0; String led_sirasi = ""; void setup() { pinMode(buton, INPUT); pinMode(buton2, INPUT); pinMode(buton3, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { butondurumu = digitalRead(buton); butondurumu2 = digitalRead(buton2); butondurumu3 = digitalRead(buton3); if (butondurumu == HIGH) { while(butondurumu == HIGH) butondurumu = digitalRead(buton); led_sirasi += '1'; } if (butondurumu2 == HIGH) { while(butondurumu2 == HIGH) butondurumu = digitalRead(buton2); led_sirasi += '2'; } if (butondurumu3 == HIGH) { while (butondurumu3 == HIGH) butondurumu3 = digitalRead(buton3); for(int i=0;i<led_sirasi.length();i++){ if(led_sirasi[i] == '1'){ digitalWrite(led1,HIGH); delay(200); digitalWrite(led1,LOW); } else if(led_sirasi[i] == '2'){ digitalWrite(led2,HIGH); delay(200); digitalWrite(led2,LOW); } } led_sirasi = ""; } }
tekrar merhaba,Anladığım kadarıyla ilk iki butona basıldığında basılma sırasıyla basılma sayılarını kaydedip üçüncü butona basıldığında bu kaydı kullanarak ledleri yakıp söndürmek istiyorsun. Öncelikle şunu söyleyim mikrokontrolörlerin ramleri sınırlı olduğu için dinamik büyüyen değişkenler tehlikelidir. Belirli bir büyüklükten sonra kilitlenecektir. Sabit büyüklükteki dizileri kullanman derleyici kontrolü sayesinde böyle bir tehlike olduğunda seni kurtaracaktır. Sorunun cevabına gelirsek biraz değişik bir yaklaşımla dinamik olarak büyüyebilen String kitaplığından faydalanabilirsin. Yani her butona basıldığında Stringe bir harf ekleyebilir üçüncü butona basıldığında bu harfleri sırayla kontrol ederek ilgili ledi yakabilirsin. Tekrar söylüyorum sınırlı değişken kullanmak senin için daha iyi olacaktır. Şimdilik senin kodunun değiştirilmiş hali işini görecektir.
C++:#include <Arduino.h> int buton = 12; int buton2 = 11; int buton3= 13; int led1 = 3; int led2= 4; int butondurumu = 0; int butondurumu2 = 0; int butondurumu3 = 0; String led_sirasi = ""; void setup() { pinMode(buton, INPUT); pinMode(buton2, INPUT); pinMode(buton3, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { butondurumu = digitalRead(buton); butondurumu2 = digitalRead(buton2); butondurumu3 = digitalRead(buton3); if (butondurumu == HIGH) { while(butondurumu == HIGH) butondurumu = digitalRead(buton); led_sirasi += '1'; } if (butondurumu2 == HIGH) { while(butondurumu2 == HIGH) butondurumu = digitalRead(buton2); led_sirasi += '2'; } if (butondurumu3 == HIGH) { while (butondurumu3 == HIGH) butondurumu3 = digitalRead(buton3); for(int i=0;i<led_sirasi.length();i++){ if(led_sirasi[i] == '1'){ digitalWrite(led1,HIGH); delay(200); digitalWrite(led1,LOW); } else if(led_sirasi[i] == '2'){ digitalWrite(led2,HIGH); delay(200); digitalWrite(led2,LOW); } } led_sirasi = ""; } }
//#define HATA_AYIKLAMA
#ifdef HATA_AYIKLAMA
#define GOSTER(x) Serial.println(x)
#else
#define GOSTER(x)
#endif
int buton = 12;
int buton2 = 11;
int buton3= 10;
int led1 = 3;
int led2= 4;
//int butondurumu = 0;
//int butondurumu2 = 0;
//int butondurumu3 = 0;
String led_sirasi = "";
void setup() {
pinMode(buton, INPUT);
pinMode(buton2, INPUT);
pinMode(buton3, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
Serial.begin(115200);
GOSTER("Basliyor");
}
void loop() {
//butondurumu = digitalRead(buton);
//butondurumu2 = digitalRead(buton2);
//butondurumu3 = digitalRead(buton3);
if (digitalRead(buton)) {
while(digitalRead(buton))delay(10);
led_sirasi += '1';
GOSTER(led_sirasi);
}
if (digitalRead(buton2)) {
while(digitalRead(buton2)) delay(10);
led_sirasi += '2';
GOSTER(led_sirasi);
}
if (digitalRead(buton3)) {
while (digitalRead(buton3)) delay(3);
for(unsigned int i=0;i<led_sirasi.length();i++){
if(led_sirasi[i] == '1'){
digitalWrite(led1,HIGH);
delay(200);
digitalWrite(led1,LOW);
GOSTER(led_sirasi[i]);
}
else if(led_sirasi[i] == '2'){
digitalWrite(led2,HIGH);
delay(200);
digitalWrite(led2,LOW);
GOSTER(led_sirasi[i]);
}
}
led_sirasi = "";
}
}
merhaabaBu senin yaptığın buton satırındaki debouncingden kaynaklanıyor. Kodu güncelledim,deneyebilirsin tekrar.. Simülatörde çalıştı. Eğer gereğinden fazla yanıp sönüyorsa delay(10) satırlarındaki sayıyı artır. Eğer buton hareketlerini terminalde görmek istiyorsan en baştaki #define HATA_AYIKLAMA satırını aktifleştir.
C++://#define HATA_AYIKLAMA #ifdef HATA_AYIKLAMA #define GOSTER(x) Serial.println(x) #else #define GOSTER(x) #endif int buton = 12; int buton2 = 11; int buton3= 10; int led1 = 3; int led2= 4; //int butondurumu = 0; //int butondurumu2 = 0; //int butondurumu3 = 0; String led_sirasi = ""; void setup() { pinMode(buton, INPUT); pinMode(buton2, INPUT); pinMode(buton3, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); Serial.begin(115200); GOSTER("Basliyor"); } void loop() { //butondurumu = digitalRead(buton); //butondurumu2 = digitalRead(buton2); //butondurumu3 = digitalRead(buton3); if (digitalRead(buton)) { while(digitalRead(buton))delay(10); led_sirasi += '1'; GOSTER(led_sirasi); } if (digitalRead(buton2)) { while(digitalRead(buton2)) delay(10); led_sirasi += '2'; GOSTER(led_sirasi); } if (digitalRead(buton3)) { while (digitalRead(buton3)) delay(3); for(int i=0;i<led_sirasi.length();i++){ if(led_sirasi[i] == '1'){ digitalWrite(led1,HIGH); delay(200); digitalWrite(led1,LOW); GOSTER(led_sirasi[i]); } else if(led_sirasi[i] == '2'){ digitalWrite(led2,HIGH); delay(200); digitalWrite(led2,LOW); GOSTER(led_sirasi[i]); } } led_sirasi = ""; } }
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?