SOLVED - PIN-kodni o'zgartiring, shuningdek, Arduino-da boshqa pinni ishga tushiring

Men bilmoqchi edim.

INPUT_PULLUP sifatida PIN, 6, 7, 8 va 9 raqamim mavjud. Men bir-biriga tegib boraman. Nima uchun PIN 6 tugmachasini bosganimda. SOMETIMES PIN 7 da kirishni oladi. Boshqa holatda, men 7-tugmani bosganimda, boshqa pin ham tetiklanadi. Nima uchun?

Bu ish tasodifiy. Ba'zida 10 marta bosganimda hamma narsa yaxshi bo'ladi, ammo keyin yana bir pin ham tetiklanadi. Boshqa holatlar faqat 4-5 marta bosiladi, keyin boshqa pin ham tetiklanadi.

Vaqtinchalik kalitlarni emas, balki yoqish/o'chirishni ishlataman.

Buni qanday tuzatish mumkin? Arduino bilan keng tarqalgan muammomi?

UPDATE

Dastur. (Oddiy dastur)

int led1 = 1;
int led2 = 2;
int led3 = 3;
int led4 = 5;

int switch1 = 6;
int switch2 = 7;
int switch3 = 8;
int switch4 = 9;

int led = 13;

//int counter = 0;

void setup()
{
 //put your setup code here, to run once
      pinMode(led1, OUTPUT);
      pinMode(led2, OUTPUT);
      pinMode(led3, OUTPUT);
      pinMode(led4, OUTPUT);
      pinMode(switch1, INPUT_PULLUP);
      pinMode(switch2, INPUT_PULLUP);
      pinMode(switch3, INPUT_PULLUP);
      pinMode(switch4, INPUT_PULLUP);
      pinMode(led, OUTPUT);
}  
void loop()
{

if (digitalRead(switch1) == 0){
  digitalWrite(led1, HIGH);
  }

 if (digitalRead(switch1) == 1){
  digitalWrite(led1, LOW);
  } 

if (digitalRead(switch2) == 0){
  digitalWrite(led2, HIGH);
  }

 if (digitalRead(switch2) == 1){
  digitalWrite(led2, LOW);
  } 


if (digitalRead(switch3) == 0){
  digitalWrite(led3, HIGH);
  }

 if (digitalRead(switch3) == 1){
  digitalWrite(led3, LOW);
  } 


if (digitalRead(switch4) == 0){
  digitalWrite(led4, HIGH);
  }

 if (digitalRead(switch4) == 1){
  digitalWrite(led4, LOW);
  } 

digitalWrite(led, HIGH);

delay(1000);

digitalWrite(led, LOW);

}

Sxematik

Mening davrim kirish uchun shunga o'xshash. Chiqish faqat qarshilik, qarshilik va erga yo'naltiriladi.

I found similar case http://www.instructables.com/id/Arduino-Push-Switch-Debouncing-Interrupts/

Veb saytida, u shunday dedi: "Ushbu o'rnatish bilan bog'liq muammo qachon   tugmasi bosilib, interruptni bir necha bor chaqirishdi   hatto boshqa tugmachalarga o'tish. Bu nima uchun sodir bo'ldi? Buning sababi   

Uskunani o'zgartirmagan holda biron bir yechim bormi?

SOLVE

Muammo tel.

Kalit uchun telim o'tish kabeli va bir-birlari bir-biriga yaqinroq (tegish). Men ajrashishga harakat qilaman. Boshqa hech qanday pin tetik bo'lmaydi.

0
Savolingiz sizda "INPUT_PULLUP sifatida 2 va 3-sonlarni belgilang" deb aytilgan, lekin kod 2 va 3 da LED2 va LED3 ga chiqish sifatida ishlatiladi. Iltimos, savolni tahrirlang va ziddiyatni olib tashlang. Shuningdek, savolning sarlavhasidan "interrupt" ni olib tashlang, chunki savol so'rovi bilan hech qanday aloqasi yo'q.
qo'shib qo'ydi muallif Martin C. Martin, manba
@Nateowami, men kodni va sxemali savolimni yangiladim. Sizda bunday tajriba bormi? Menimcha, bu Arduino bilan noto'g'ri narsa bo'lishi kerak.
qo'shib qo'ydi muallif Reunanen, manba
@NickGammon Men kodni va sxema bilan mening savolim yangilandi. Sizda bunday tajriba bormi? Menimcha, bu Arduino bilan noto'g'ri narsa bo'lishi kerak.
qo'shib qo'ydi muallif Reunanen, manba
@Nateowami Switch2 va switch3-ni multimetriya bilan tekshirib ko'raman va u bog'liq emas. Men chiroqni o'chirish (yoqish/o'chirish) vaqtinchalik kalitlarga emas. Oddiy savol: Bu juda yaxshi ish bo'lishi kerak, to'g'rimi? Bundan tashqari, boshqa xatti-harakatim bor, men yoqilganda, boshqa chiroq ham 1 sekunddan kamroq. Mening videoni tekshirib ko'ring youtube.com/watch?v=s6CxPuQya0g
qo'shib qo'ydi muallif Reunanen, manba
@Majenko nima demoqchisiz? Men tushunmadim. Kechirasiz.
qo'shib qo'ydi muallif Reunanen, manba
@NickGammon Men postimni o'zgartirdim.
qo'shib qo'ydi muallif Reunanen, manba
mening savolim hal qilindi. Barchangizga rahmat.
qo'shib qo'ydi muallif Reunanen, manba
Men ushbu maqolani o'qishni taklif qilaman. hackaday.com/2015/12/10/… (va shuningdek, birinchi qism). Elliot barcha kalitlarni, shovqinlarni almashtirishni va dasturiy ta'minotdagi muammoni qanday hal qilishni o'z ichiga oladi.
qo'shib qo'ydi muallif German, manba
delay (1000) funktsiyasini yo'qotish
qo'shib qo'ydi muallif Majenko, manba
Men sizning nima qilayotganingizdan qat'iy nazar, kechikish doimo yomon fikrdir - ayniqsa, kalitlarni o'qiyotganingizda va ularni oddiy tarzda javob berishini kutayotganingizda.
qo'shib qo'ydi muallif Majenko, manba
nima keng tarqalgan muammomi? Hech qanday sxema va kod yo'q, sizning savolingiz haqiqiy ma'noga ega emas. Iltimos, Yaxshi savolni qanday beraman? ni o'qing.
qo'shib qo'ydi muallif Nick Gammon, manba
Nega men PIN 2 tugmachasini bosganimda. PIN 3 da kirishni ham oladi. - siz PIN-2 va PIN 3-da LEDlar ga egasiz, kalitlarni emas. Shunday qilib, savolingiz mantiqiy emas. Iltimos, kodni va sxemani tahrir qiling, shuning uchun hech bo'lmaganda ba'zi bir ichki mustahkamlik mavjud.
qo'shib qo'ydi muallif Nick Gammon, manba
Sizning elektronlaringizning sxematik yoki oddiy diagrammasini joylashtirasizmi?
qo'shib qo'ydi muallif Brett Ryan, manba
Led2 va led3 simlariga tegmasligiga ishonch hosil qilish uchun simlarni tekshirib qo'ydingizmi? Agar ular ba'zida noto'g'ri gaplarni yoritib qo'yadigan narsaga tegsa. Bundan tashqari, switch2 va switch3 uchun simlarni tekshiring. Qaysi turdagi kalitlardan foydalanmoqdasiz?
qo'shib qo'ydi muallif Brett Ryan, manba

1 javoblar

Siz past darajali va qisqartirilgan tugmachali simlar o'rtasida shovqinni almashtirmoqchi bo'layotirsiz, ammo hech qanday tashvishlanmasdan, siz ko'rayotgan ta'sirga sabab bo'lishi mumkin.

Men taklif qilaman 1) deb ataydi va har qanday tugmani o'qiydi; va 2) har bir tugmani ikki marta sinash o'rniga if/else ifodalarini ishlatish.

Tez test - bu ikkita tugmachalardan birini bosib turib, bir-biriga yaqin yoki bir-biridan uzoqroq juftliklarni bir-biriga yaqinroq tutishdir. Agar shunday bo'lsa, siz sababni topdingiz.

0
qo'shib qo'ydi