Pages: [1]   Go Down
Author Topic: Détecter le contact de broches numériques entre elles  (Read 911 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous !
Voici un  petit bout de code qui permet de détecter le contact entre des broches numériques et de récupérer la combinaison sous la forme d'un octet.
L'idée m'a été donnée par "fdufnews" (cf http://forum.arduino.cc/index.php?PHPSESSID=0hgr36sca3nf997kmlespvljk6&topic=174413.0)
- J'ai 5 digital pin le pin D2 écrit dans le bit 1, le pin D3 dans le bit 2...
voici donc le tableau des différentes combinaisons : https://docs.google.com/spreadsheet/ccc?key=0AprTy3qEnd1TdDJKX3c3LWtHV1BTWXkwQktVUUhra2c&usp=sharing

Et le code:
Code:
int touchPins[] = {2,3,4,5,6};
#define numtouchPins (sizeof(touchPins)/sizeof(int *)) //array size
byte PinState;

void oneLOW(int PinID)
{
  for(int i=0; i <  numtouchPins; i++)//All pins INPUT with Pull Up
  {
     pinMode(touchPins[i],INPUT);
     digitalWrite(touchPins[i],HIGH);
  }
  pinMode(touchPins[PinID],OUTPUT);//put PinID LOW
  digitalWrite(touchPins[PinID],LOW);
  for(int i=0; i <  numtouchPins; i++)//read all pins
  {
    if(!digitalRead(touchPins[i]) && i!=PinID)//if the pin is LOW and we dont declar before (it touch another pin)
    {
      bitSet(PinState, i);//write state on PinState
    }
  }
}



void setup()
{
  for( int i=0; i <  numtouchPins; i++)
  {
     pinMode(touchPins[i],INPUT);
     digitalWrite(touchPins[i],HIGH);
  }
  Serial.begin(9600);
}

void loop()
{
  for(int i=0; i <  numtouchPins; i++)//scan pins
  {
    oneLOW(i);
  }
Serial.println(PinState);
PinState=0;
}

L'idée par la suite est de l’implémenter dans Mackey Mackey afin d'étendre les possibilités, je vais lancer un post dans le forum mackey mackey.

Je suis ouvert a toutes critiques bien sur.
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1392
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si j'ai bien compris, tu tentes de lire un clavier?

je trouve ton code super compliqué pour le peu qu'il fait, et à mon avis, ça fait peur...

peux-tu expliquer un peu plus? c'est quoi mackey?
Logged

Belgium
Offline Offline
Sr. Member
****
Karma: 15
Posts: 483
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.makeymakey.com/ smiley-wink
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1392
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Heu...

est-ce que tu essaies de fabriquer un makey? dans ce cas, ton code serait simplement :

Code:
byte result;  // variable contenant la lecture

void setup(){
  DDRD &= 0x83;  // pins D6:2 en entrée
  PORTD |= 0x7C;  // activer les pull-up
}

void loop(){
  result = (!PIND & 0x7C) >> 2;  // lecture et conversion du port D, 1 pour ce qui est "touché".

// ici l'utilisation de result.

}

reste à voir si les pull-up ne sont pas trop faibles pour détecter le corps humain, dans ce cas, on peut utiliser des résistances externes de 220K à la place de celles de l'arduino qui sont de l'ordre de 10K je crois.
Logged

Pages: [1]   Go Up
Jump to: