SOLVED - Comutare PIN, declanșează și alt buton în Arduino

Aș vrea să știu.

Am Pin 6, 7, 8 și 9 ca INPUT_PULLUP. Am schimbat unul pe celălalt. De ce când apăs pe butonul de comutare la PIN 6. UNICETIME PIN-ul 7, de asemenea, de intrare. Alt caz, de asemenea, atunci când am apăsa pe butonul de comutare la 7, alte pin, de asemenea, declanșa. De ce?

Acest caz este aleator. Uneori, totul este ok când apăs de 10 ori, dar după aceea și celălalt se declanșează. Un alt caz doar de 4-5 ori apăsați, apoi alte pin, de asemenea, declanșa.

Eu folosesc butonul de pornire/oprire nu comutator temporar.

Cum de a rezolva asta? Este o problemă obișnuită cu arduino?

UPDATE

Program. (Program simplu)

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);

}

schematică

Circuitul meu este simplu ca și pentru intrare. Pentru ieșire numai la condus, rezistor și sol.

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

Pe site-ul Web, El a spus, "Problema cu acest setup a fost atunci când   butonul a fost apăsat, întreruperea a fost apelată de mai multe ori și   chiar și comutarea altor butoane. De ce sa întâmplat asta? Este cauzată de   un comutator care transmite feedback. "

Există vreo soluție fără modificarea hardware-ului?

CLARIFICA

Problema este firul.

Sârmă mea pentru comutator este cablul de jumper, și fiecare celălalt mai apropiat (atingeți) unul de celălalt cablu. Încerc să mă despart și să lucrez. Nu există nici un alt PIN va fi declanșator.

0
Întrebarea dvs. spune că aveți "Pin 2 și 3 ca INPUT_PULLUP", dar în pinii de cod 2 și 3 sunt utilizați ca ieșiri pentru LED2 și LED3. Editați întrebarea și eliminați neconcordanța. De asemenea, eliminați "întreruperea" din titlul întrebării deoarece apare că întrebarea nu are nimic de-a face cu întreruperile.
adăugat autor Martin C. Martin, sursa
@Nateowami, am fost actualizat întrebarea mea cu cod și schematică. Aveți vreo experiență în acest sens? Pentru că cred că ar trebui să fie ceva în neregulă cu Arduino.
adăugat autor Reunanen, sursa
@NickGammon Am fost actualizat întrebarea mea cu cod și schematică. Aveți vreo experiență în acest sens? Pentru că cred că ar trebui să fie ceva în neregulă cu Arduino.
adăugat autor Reunanen, sursa
@Nateowami Am verificarea switch2 și switch3 cu multimetru și nu este conectat. Folosesc comutatorul lămpii (pornit/oprit) și nu comutatorul temporar. Întrebare simplă: ar trebui să fie perfect de lucru, nu? De asemenea, am un comportament diferit, când pornesc, alte lămpi sunt activate, mai puțin de 1 secundă. Verificați videoclipul meu youtube.com/watch?v=s6CxPuQya0g
adăugat autor Reunanen, sursa
@Majenko, ce vrei să spui? Nu am înțeles. Scuze.
adăugat autor Reunanen, sursa
@NickGammon Mi-am schimbat deja postarea.
adăugat autor Reunanen, sursa
întrebarea mea este rezolvată. Vă mulțumesc tuturor.
adăugat autor Reunanen, sursa
Aș sugera să citiți acest articol hackaday.com/2015/12/10/… (și, de asemenea, partea întâi). Elliot acoperă totul despre switch-uri, zgomotul de comutare și modul de rezolvare a problemei (debouncing) în software-ul.
adăugat autor German, sursa
Pierdeți întârzierea (1000)
adăugat autor Majenko, sursa
Vreau să spun că întârzierea este întotdeauna o idee proastă indiferent de ceea ce faceți - mai ales când citiți comutatoare și așteptați ca ei să răspundă într-un mod normal.
adăugat autor Majenko, sursa
Este ce o problemă obișnuită? Fără schematică și fără cod, întrebarea dvs. nu are sens real. Citiți Cum pot pune o întrebare bună?
adăugat autor Nick Gammon, sursa
De ce cand apasa comutatorul la codul PIN 2. PIN-urile de cateva ori primesc, de asemenea, intrari. - ai LED-uri pe Pin 2 si Pin 3, nu comutatoare. Astfel, întrebarea dvs. nu are sens. Editați codul și schematică, deci cel puțin există o consistență internă.
adăugat autor Nick Gammon, sursa
Poți posta o diagramă schematică sau o diagramă simplă a circuitului tău?
adăugat autor Brett Ryan, sursa
Ați verificat firele dvs. pentru a vă asigura că firele pentru led2 și led3 nu ating? Dacă ating astfel, le-ar putea face să lumineze uneori greșit. De asemenea, verificați firele pentru comutatorul2 și comutatorul3. Ce fel de comutator folosești?
adăugat autor Brett Ryan, sursa

1 răspunsuri

Este posibil să fie obtinerea de zgomot de comutare între firele buton, care este de nivel scăzut și scurt, dar fără nici o debouncing, ar putea fi suficient pentru a provoca efectul pe care îl vedeți.

Aș sugera 1) scrierea unei scurte funcții care dezvăluie și citește orice buton; și 2) folosind if/else declarații în loc de a testa fiecare buton de două ori.

Un test rapid este să țineți o pereche de fire mai apropiate sau mai îndepărtate unul de celălalt în timp ce apăsați unul dintre cele două butoane și vedeți dacă distanța dintre ele schimbă efectul. Dacă da, ați găsit cauza.

0
adăugat