Pages: [1] 2   Go Down
Author Topic: PADLOCK avec arduino+10 switch  (Read 1941 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Building stuff and saving the world.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour tout le petit monde ca va bien? 8-)
alors aujourd'hui le but est de trouver ce qu'il y a(ou a pas) dans mon code pour que mon systeme fonctionne. Ca fait qd meme un ptit moment que je buche dessus et comme personne en a fait de comme ca a ce que j'ai vu eh bien c'est aps trop évident. :-/

Il s'agit d'utiliser arduino pour déverrouiller (envoyer un signal a un relais 5v) suite a l'entrée d'une bonne combinaison de 6 chiffres (dans le présent programme c'est 6-6-6-6-6-6).

La circuiterie fonctionne entierement (merci Mr bisson! ;D) mais le probleme réside dans le code

voila le monstre! (certains trucs sont inutiles mais sont présente pr le débuggage)

HEHE

/*
 * Analyse analogue suivit de calcul logique pour détermienr la touche pressée.
 */
int nba ;   //nb actif
int swt = 5;    // Ligne des commutateurs
int val ;    //Valeur lue sur la ligne de commutateurs
int nb0 = 12 ;   //Lumiere pour le nombre 0
int nb1 = 13 ;   //Lumiere pour le nombre 1
int nb2 = 2 ;   //Lumiere pour le nombre 2
int nb3 = 3 ;   //Lumiere pour le nombre 3
int nb4 = 4 ;   //Lumiere pour le nombre 4
int nb5 = 5 ;   //Lumiere pour le nombre 5
int nb6 = 6 ;   //Lumiere pour le nombre 6
int nb7 = 7 ;   //Lumiere pour le nombre 7
int nb8 = 8 ;   //Lumiere pour le nombre 8
int nb9 = 9 ;   //Lumiere pour le nombre 9
int LO = 10;   //Lumiere pour systeme Verrouillé
int UL = 11;   //Lumiere pour systeme Déverrouillé
int State =0;  //état du verrou 1=ouvert 0=fermé
byte C[7];   //variables du password.
byte i=1 ;   //définie la variable d'incrémentale

void setup() {
  pinMode(swt, INPUT);
  pinMode(nb0, OUTPUT);
  pinMode(nb1, OUTPUT);
  pinMode(nb2, OUTPUT);
  pinMode(nb3, OUTPUT);
  pinMode(nb4, OUTPUT);
  pinMode(nb5, OUTPUT);
  pinMode(nb6, OUTPUT);
  pinMode(nb7, OUTPUT);
  pinMode(nb8, OUTPUT);
  pinMode(nb9, OUTPUT);
  pinMode(LO, OUTPUT);
  pinMode(UL, OUTPUT);
  Serial.begin(9600);
  digitalWrite(nb0,LOW);
  digitalWrite(nb1,LOW);
  digitalWrite(nb2,LOW);
  digitalWrite(nb3,LOW);
  digitalWrite(nb4,LOW);
  digitalWrite(nb5,LOW);
  digitalWrite(nb6,LOW);
  digitalWrite(nb7,LOW);
  digitalWrite(nb8,LOW);
  digitalWrite(nb9,LOW);
}

void loop(){
  if (i==7 &&C[1]==6&&C[2]==6&&C[3]==6&&C[4]==6&&C[5]==6&&C[6]==6);
  State=1;
  if (i==7 &&C[1]!=6||C[2]!=6||C[3]!=6||C[4]!=6||C[5]!=6||C[6]!=6);
  {
    i=1;
    State=0;
  }
  if (State==0);
  {
    digitalWrite(UL,LOW);
    digitalWrite(LO,HIGH);
  }
  if (State==1);
  {
    digitalWrite(UL,HIGH);
    digitalWrite(LO,LOW);
  }


  val = analogRead(swt);    // lit la valeur de la ligne des commutateurs et l'attribue a la variable val
  {
    if (val > 40);   //vérifie si une touche est pressée
    {
      if (val > 40 && val < 143);          
      nba = 9;  
      if (val > 164 && val < 246);
      nba = 8;
      if (val > 266 && val < 348);
      nba = 7;
      if (val > 368 && val < 451);
      (nba = 6);
      if (val > 471 && val < 553);
      (nba = 5);
      if (val > 573 && val < 655);      
      (nba = 4);
      if (val > 676 && val < 758);
      (nba = 3);
      if (val > 778 && val < 860);
      (nba = 2);
      if (val > 880 && val < 963);
      (nba = 1);
      if (val > 983 && val < 1024);
      (nba = 0);
      C=nba;
      i=i+1;
      delay(500);  
    }
    delay(10);  
  }
  Serial.println(val);
  Serial.println(nba);
}


Le probleme principal qui bloque le tout présentement c'est que la variable nba ne devient jamais qlque choz autre que 0  :'(
Donc qd je vérifie via le serial que mes différents voltages entre et sont convertits pr swt ca fonctionne sauf un ptit truc..

Le truc étant que jarrive pas a faire 0 en entrée avec mon systeme de switch alors qun potentiometre lui peut.
Jai 10 interupteurs qui recoivent tous un certains voltage (0,5 a 5 en incrément de 0,5 volt-->de la les marges pour lidentification) et qui le apssent au capteur 5 analog qui lui détermine quel interrupteur est actionné et store cette valeur incr.mente et ainsi de suite....quelqun peut bien me prendre par la main,réviser mon code et me dire comment le faire fonctionner?
« Last Edit: April 16, 2008, 05:20:11 pm by lordzeppo » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lut
J'ai l'impression qu'il y a des { } en trop, par exemple après le analogRead.
Sinon rajoute des ( ) dans les if pour séparer les conditions.
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

/*
 * Analyse analogue suivit de calcul logique pour détermienr la touche pressée.
 */
int nba ;   //nb actif
int swt = 5;    // Ligne des commutateurs
int val ;    //Valeur lue sur la ligne de commutateurs
int nb0 = 12 ;   //Lumiere pour le nombre 0
int nb1 = 13 ;   //Lumiere pour le nombre 1
int nb2 = 2 ;   //Lumiere pour le nombre 2
int nb3 = 3 ;   //Lumiere pour le nombre 3
int nb4 = 4 ;   //Lumiere pour le nombre 4
int nb5 = 5 ;   //Lumiere pour le nombre 5
int nb6 = 6 ;   //Lumiere pour le nombre 6
int nb7 = 7 ;   //Lumiere pour le nombre 7
int nb8 = 8 ;   //Lumiere pour le nombre 8
int nb9 = 9 ;   //Lumiere pour le nombre 9
int LO = 10;   //Lumiere pour systeme Verrouillé
int UL = 11;   //Lumiere pour systeme Déverrouillé
int State =0;  //état du verrou 1=ouvert 0=fermé
byte C[7];   //variables du password.
byte i=1 ;   //définie la variable d'incrémentale

void setup() {
  pinMode(swt, INPUT);
  pinMode(nb0, OUTPUT);
  pinMode(nb1, OUTPUT);
  pinMode(nb2, OUTPUT);
  pinMode(nb3, OUTPUT);
  pinMode(nb4, OUTPUT);
  pinMode(nb5, OUTPUT);
  pinMode(nb6, OUTPUT);
  pinMode(nb7, OUTPUT);
  pinMode(nb8, OUTPUT);
  pinMode(nb9, OUTPUT);
  pinMode(LO, OUTPUT);
  pinMode(UL, OUTPUT);
  Serial.begin(9600);
  digitalWrite(nb0,LOW);
  digitalWrite(nb1,LOW);
  digitalWrite(nb2,LOW);
  digitalWrite(nb3,LOW);
  digitalWrite(nb4,LOW);
  digitalWrite(nb5,LOW);
  digitalWrite(nb6,LOW);
  digitalWrite(nb7,LOW);
  digitalWrite(nb8,LOW);
  digitalWrite(nb9,LOW);
}

void loop(){
  if (i==7 &&C[1]==6&&C[2]==6&&C[3]==6&&C[4]==6&&C[5]==6&&C[6]==6);
  State=1;
  if (i==7 &&C[1]!=6||C[2]!=6||C[3]!=6||C[4]!=6||C[5]!=6||C[6]!=6);
  {
    i=1;
    State=0;
  }
  if (State==0);
  {
    digitalWrite(UL,LOW);
    digitalWrite(LO,HIGH);
  }
  if (State==1);
  {
    digitalWrite(UL,HIGH);
    digitalWrite(LO,LOW);
  }


  val = analogRead(swt);    // lit la valeur de la ligne des commutateurs et l'attribue a la variable val
  
    if (val > 40);   //vérifie si une touche est pressée
    {
      if (val > 40 && val < 143);            
      nba = 9;  
      if (val > 164 && val < 246);
      nba = 8;
      if (val > 266 && val < 348);
      nba = 7;
      if (val > 368 && val < 451);
      (nba = 6);
      if (val > 471 && val < 553);
      (nba = 5);
      if (val > 573 && val < 655);      
      (nba = 4);
      if (val > 676 && val < 758);
      (nba = 3);
      if (val > 778 && val < 860);
      (nba = 2);
      if (val > 880 && val < 963);
      (nba = 1);
      if (val > 983 && val < 1024);
      (nba = 0);
      C=nba;
      i=i+1;
      delay(500);  
    }
    delay(10);  

  Serial.println(val);
  Serial.println(nba);
}

Arduino ne met plus d'erreur quand on enlève les { }
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Building stuff and saving the world.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je n'avais aucune erreur de compilation mais plustot de programme,teste le si tu peut,la variable nba ne prend jamais une valeur déterminente,c'Est la le gros de mon probleme.Je vias essailler de fournir des pics et des schéma de mon actuelle conception.
merci pour ton aide,jvais tenter ce prog a linstant pour voir au cas ^^.--->meme probleme  :'( la variable nba ne veut jamais prendre la valeur autre que 0....smiley-sad

et jai un autre ptit probleme,coté électronique celui la

qd je branche un potentiometre(gnd,5V,Signal) chui capable davoir un analog read a 0.Mes switch sont en dégradé de voltage en incrément de 0,5 volt et apres la 10e résistance je retourne ca au GND,lentrée est au positif,et chaque switch envoie un signal parfaitement ajusté a Ardui mais lorsque je nappui sur aucune touche je suis incapable d'obtenir la valeur 0 en entrée,comme qd le potentiometre est a 0....any suggestions?
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec un petit schéma ça serait plus facile  smiley-wink
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Building stuff and saving the world.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

voila un sch.ma pr les switch ^^..jme demande pk ca fait aps comme un potentiometre..smiley-sad smiley-razz
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 41
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ton probleme c'est ca :

if (val > 40 && val < 143);            
     nba = 9;    

il ne faut pas de ; a la fin du if...
ca s'ecrit comme ca :

if (val > 40 && val < 143)
     nba = 9;    

et encore mieux :

if (val > 40 && val < 143) {
     nba = 9;    
}

c'est valable pour tout ta serie de if...
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Building stuff and saving the world.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

oué merci ca a regler le probleme de l'assignation ^^

1 probleme reste: comment faire pour que la valeur lue soit 0(comme qd jai un potentiometre)
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 41
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le 0 que tu cherches, c'est pour ta valeur nba ? ou pour la valeur lue sur l'entrée analogique ?
autrement dit :

est-ce le probleme c'est :
que tu n'arrives pas a avoir une valeur assez basse ? ( < 40)
ou une valeur assez haute ( > 983)

quand tu devrais avoir 0, tu as quoi en entrée analog ?
question code, je pense que c'est bon, surtout si ca marche avec un potentiometre, donc je chercherais plus au niveau de ton montage.

bonne chance.
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec un potentiomètre tu as 0 sur l'entrée analogique car tu es relié à la masse. Ici avec ton système quand aucuns boutons n'est enfoncés, ton entrée est en l'air, elle n'a pas de potentiel déterminé.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Building stuff and saving the world.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ou jdoit rajouter un brin dfil pour que mon analog read me donne 0 comme avec un potentiometre?....
Peut-tu modifier le schéma electrique que jai fait pour me montrer? ca serais apprécié:P

un autre truc,jcroit pas que la variable C fonctionne..quelqun peut me montrer une autre facon d'assigner des valeurs pour éliminer le delais et pour qu'il ane détecte qu'une seule fois la touche presée.....j'aimerais un remaniement complet du code dans le genre:

si touche pressée-->C1=nba
Si touche relachée-->attendre
si touche pressée-->C2=nba

un truc dans le genre...pour éliminer le delais de 500 milis qui me poz probleme.merci !
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 41
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Moi j'utiliserai un flag  :

au depart, :
flag = 0;

lire la valeur analog

if (analog !=0) {
   si (flag ==0) {
     flag=1
     enregistrer la valeur lue
  }sinon {
     ne rien faire, l'utilisateur n'a pas encore relaché le bouton.
  }
}sinon {
 flag = 0
}

en gros l'idée, c'est que tant qu'on a pas relaché le bouton, on ignore la valeur lue.
quand on relache le bouton, le flag est remis à 0, et on s'occupera de la prochaine valeur non nulle lue...
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Building stuff and saving the world.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Skall t'es vrmnt d'une aide précieuse,mais comme le c c'est pas vrmnt mon fort..tu veut bien remanier mon programme?  :smiley
mais ca regle toujours pas le probleme du potentiometre qui mdonne 0 et de mon paquet de switch..jai essailler de brancher un jumper a quelques endroits..ca a tout fait planter -_- any suggestion?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 13
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je dis peut être une grosse bétise mais ton mot de passe comporte 6 chiffres et tu en déclare 7
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Building stuff and saving the world.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ouais mais ca c nécéssaire parceque jutilise pas le C0,seulement c1 pour le chiffre 1 et etc..plus simple a l'oeil.mais emrci dla remarke ^^ ;D
Logged

Pages: [1] 2   Go Up
Jump to: