Arduino Forum

International => Français => Topic started by: mirage2000 on Dec 09, 2013, 09:36 pm

Title: besoin d'un guide
Post by: mirage2000 on Dec 09, 2013, 09:36 pm
Bonjour,
J'ai depuis quelque temps un besoin que je n'arrive pas a résoudre avec des interrupteurs (et oui la veille école), et j'ai découverts Arduino. qui pourrait me semble t il résoudre mon problème.
J'ai donc un récupérer un NANO V3, et j'ai installé le soft qui va bien., j'ai uploader un prog fourni avec le soft, ca charge, j'ai donc fait un grand pas....
Mon objectif n'étant pas d'apprendre le langage d'ARDUINO, c'est pas trop ma tasse de thé, mais juste résoudre un besoin ponctuel.
Je pense que des bouts de codes doivent trainer ca et là, il suffirait de les couper/coller.

Explication du besoin:
J'ai besoin de faire 5 fonctions  (F1, F2....F5), et chaque fonction va  piloter 8 relais suivant une table de vérités que j'ai établie:
F1 > 11000011
F2 > 00110011
F3 > 00110000  .....etc quand je serai faire pour un , la suite je devrai m'en sortir.

Je souhaite dans un premier temps, faire defiler les fonctions simplement avec deux touches UP/DW, et dans un second temps, cerise sur le gâteau, j'ai vu qu'on pouvait mettre un LCD, et là, je voudrais pouvoir afficher: Fonction 1, Fonction 2.......

Si vous pouviez m'aider svp, pour me donner les librairies sur lesquelles je dois travailler pour gérer ces fonctions, si du code existe déjà, sa m'éviterai de partir dans tous les sens.

Merci pour votre support, et qui sait, j'y prendrai peut être gout  :smiley-roll-sweat:
Title: Re: besoin d'un guide
Post by: Super_Cinci on Dec 09, 2013, 09:42 pm
Salut,

gogole est ton ami, et des codes d'exemple, il y en a des tonnes! ne serait-ce que dans l'IDE, fichier/exemples, tu vas trouver de quoi t'amuser!

Le langage arduino n'est en fait que du langage C / C++. donc il faut apprendre le langage C!
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 10, 2013, 12:17 am
Je le mets là: :P
Le début doit être bon; l'idée générale est bonne.
Mais quand les experts vont débarquer ici, il va y avoir des cris, et même des coups de feu. ]:) ]:D
Je suis vraiment curieuse de voir en quoi ils vont transformer les goto. :P
Code: [Select]

byte pins[8] = {  2, 3, 4, 5, 6, 7, 8, 9};  // declare les 8 pins de sortie
byte i=0;
byte index=0;
// Ici il faudrait déclarer les labels "moins"; "plus" et "F1"; "F2"...EXT
// Mais quand les experts vont débarquer ici les labels vont voooler cui cui cui....
// Et les "goto" aussiiiii!
// iLs vont te transformer tout ça en fonctions, et ça va être bô.

void setup()
{
  for( i=0; i<8; i++) pinMode(pins[i], OUTPUT); //pins mise en sortie
  for( i=0; i<8; i++) pinMode(pins[i], LOW);
   pinMode (10, INPUT_PULLUP); // pin mise en entree
   pinMode(11, INPUT_PULLUP); //
    pinMode(10, HIGH); // pin d'entree mise à "1"
   pinMode(11, HIGH);   
}
void loop(){
    if (digitalRead(10) == 0){ goto moins;} //tant que pin(10) ou pin(11) pas =0 ça tourne
    if (digitalRead(11) == 0){ goto plus;}
    delay(100);
}
  moins:
  if (index==0){
    index=5
  }
  index=index-1
  if (index==1){ goto F1;}
  if (index==2){ goto F2;}
  if (index==3){ goto F3;}
  if (index==4){ goto F4;}
  if (index==5){ goto F5;}
  //
  plus:
  if (index==6){
    index=1
  }
  index=index+1
  if (index==1){ goto F1;}
  if (index==2){ goto F2;}
  if (index==3){ goto F3;}
  if (index==4){ goto F4;}
  if (index==5){ goto F5;}
  //
  F1: // fonction N°1
  pinMode(pins(2), HIGH); // F1
  pinMode(pins(2), HIGH);
  pinMode(pins(2), LOW);
  pinMode(pins(2), LOW);
  pinMode(pins(2), LOW);
  pinMode(pins(2), LOW);
  pinMode(pins(2), HIGH);
  pinMode(pins(2), HIGH);
//F2:
........excétéra...téra...
}
Title: Re: besoin d'un guide
Post by: fifi82 on Dec 10, 2013, 01:42 am
je me suis amusé à programmer un petit truc , je sais pas si c'est ce que tu veux, en plus je ne suis pas un expert en prog et ça fait même pas une semaine que je joue avec une arduino uno ...

Code: [Select]

const byte tb=5; // nombre de "fonction"
const int up = 10; // numéro de la broche du bp up
const int down=11; // numéro de la broche du bp down
const int pin=2; // numéro de la première sortie

byte F[tb+1]; // tableau qui contiendra la programation des "fonctions"
int pos; // numéro de la "fonction" à envoyer sur les sorties
boolean arup; // bit pour l'anti rebond de la touche up
boolean ardown; // bit pour l'anti rebond de la touche down

void setup() {

 // on configure les 8 broches de 0 à 7 en sortie
 for (int p = pin; p < pin+8; p++)  {
   pinMode(p, OUTPUT);      
 }
 pinMode(up, INPUT);  // la broche 10 pour Up
 pinMode(down, INPUT);  // la broche 11 pour down
 // programmation des "fonctions" :
 // il suffit de changer les 1 et les 0 pour chaque "fonction"
 F[1]=0b11000011 ;  // 0b est obligatoire pour écrire en binaire
 F[2]=0b00110011 ;  // le bit de gauche à droite du b est relié à la broche 7
 F[3]=0b00110000 ;  // le bit de droite à la fin est relié à la broche 0
 F[4]=0b00001111 ;
 F[5]=0b11111111 ;

 pos=1; // la "fonction 1" sera active au démarage
}

void loop() {

 // on passe en revue les 8 sorties et on active la sortie suivant le tableau
  for (int p = 0; p < 8; p++) digitalWrite(p+pin,bitRead(F[pos], p));
   
 // si on appuis sur up on change de "fonction" en incrémentant pos
 if (digitalRead(up) and pos < tb) {if (!arup){ pos++; arup=1;}
 } else arup=0; // arup bloque le changement tant qu'on n'a pas relaché le bouton up
 
 // si on appuis sur duwn on change de "fonction" en décrémentant pos
 if (digitalRead(down) and pos > 1) {if (!ardown){ pos--; ardown=1;}
 } else ardown=0;// ardonw bloque le changement tant qu'on n'a pas relaché le bouton down

}    
   


j'ai mis "fonction" entre guillemets dans les com car setup() ou loop() sont elles de vraie fonctions

Title: Re: besoin d'un guide
Post by: lve123 on Dec 10, 2013, 08:14 am
Bonjour
Il serait intéressant d'utiliser un registre à décalage 74HC595 (pour sortir les 8 bits) suivi ULN2003 (pour commander des relais ). Surtout si on veut plus tard ajouter un afficheur LCD: on risque d'être à court de pins de sorties de l'Arduino.
A+
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 10, 2013, 08:30 am

Je suis vraiment curieuse de voir en quoi ils vont transformer les goto. :P


Tu es vraiment incurable. Avec toi c'est "le Basic ou la mort".
Les goto se remplacent par des appels de fonctions. tu remplaces goto F1 par funcF1().
Et tu mets le code des fonctions dans une fonction. Même en Basic quand on ne code pas avec les pieds c'est ce que l'on fait.
Title: Re: besoin d'un guide
Post by: B@tto on Dec 10, 2013, 08:44 am

Il serait intéressant d'utiliser un registre à décalage 74HC595 (pour sortir les 8 bits) suivi ULN2003 (pour commander des relais ). Surtout si on veut plus tard ajouter un afficheur LCD: on risque d'être à court de pins de sorties de l'Arduino.


8 relais + 2 bouton + un LCD ça rentre (16 pins)

pour la prog :

Code: [Select]
#define BoutonUP 11
#define BoutonDOWN 12

const byte Fonction[] ={0b00000011,0b00001100,0b001100000,0b11000000,0b10000001}; //arbitraire
const byte Pins[] = {3,4,5,6,7,8,9,10}; // à adapter suivant branchement des relais

int i,x;

void setup() {

for(i=0;i<8;i++){
pinMode(Pins[i],OUTPUT);
}

pinMode(BoutonUP,INPUT_PULLUP);
pinMode(BoutonDOWN,INPUT_PULLUP);

}

void loop() {

if(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW) {

digitalRead(BoutonUP)==LOW?x++:x--;
if(x>5)x=0;
if(x<0)x=5;

for(i=0;i<8;i++) {

digitalWrite(Pins[i],(1&Fonction[x]>>i));

}

while(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW); //tant qu'un bouton est appuyé

delay(50); // suppression des effets de rebond
}

}
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 10, 2013, 10:28 am
à: fdufnews. Merci, c'est tout ce que je voulais savoir. :P
Mais tu vois, ce qui manque, pour  vulgariser le "C"; c'est un tuto, qui serait toutes les erreurs de syntaxe les plus courantes, et ce qu'elles génère comme message.
Parce que perso, le débuggeur me sort des fois des trucs qui me laissent perplexe.
Comme "constructor/destructor"... Je m'attends à me prendre un "Terminator" dans la face  un de ces quatre.
Il y a aussi les "types" qui ne sont pas de la bonne "ethnie";  il faut alors faire une analyse du génome; et va trouver un labo ouvert un Dimanche...
à: B@tto. C'est beau !!! :P
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 10, 2013, 01:15 pm

à: fdufnews. Merci, c'est tout ce que je voulais savoir. :P
Mais tu vois, ce qui manque, pour  vulgariser le "C"; c'est un tuto, qui serait toutes les erreurs de syntaxe les plus courantes, et ce qu'elles génère comme message.
Parce que perso, le débuggeur me sort des fois des trucs qui me laissent perplexe.
Comme "constructor/destructor"... Je m'attends à me prendre un "Terminator" dans la face  un de ces quatre.
Il y a aussi les "types" qui ne sont pas de la bonne "ethnie";  il faut alors faire une analyse du génome; et va trouver un labo ouvert un Dimanche...

Un peu de lecture pour toi (et d'autres)
http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c (http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c)
https://www.rocq.inria.fr/secret/Matthieu.Finiasz/teaching/ENSTA/IN101%20-%20poly%20C.pdf (https://www.rocq.inria.fr/secret/Matthieu.Finiasz/teaching/ENSTA/IN101%20-%20poly%20C.pdf)
Evidemment c'est "cours" sont orientés C (le vrai). Le "langage arduino" repose sur un sous-ensemble du C (et du C++) et il prend quelques libertés avec le standard dans le but de simplifier son l'utilisation par les profanes.

Concernant les messages retournés par le compilateur. Il n'y a qu'une règle à connaitre:
L'erreur est sur la ligne indiquée OU SUR LES LIGNES PRECEDENTES.
Ensuite faut chercher.
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 10, 2013, 01:28 pm
Un lien...Du lien...Des liens...Thank you man !
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 10, 2013, 09:38 pm
Bonsoir tous,
Merci pour vos reponses respectives et vos exemples.
Je vais interfacer tout ca ce weekend, essayer ce que vous m avez passe, et vous tiendrai au ju.
Je retiens que ca tient dans le uno, c est deja pas mal.
Pour super cinci, cest quoi le IDE?... et pour le C ca va une autre paire de manches, car a part ce besoin, j ai rien d autre, et de plus je ne suis pas un softeux...
@@@@+++++
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 10, 2013, 11:45 pm
L'IDE, c'est la fenêtre qui s'ouvre quand tu double clique sur l'icone "Arduino.exe" (faut pas être préssé); fenêtre dans laquelle tu va coller  le code l'orfèvrerie de B@tto. Que tu "téléversera" dans la carte; après l'avoir "sauver sous". Le fichier sera dans un dossier du même nom dans le dossier "Arduino" qui a été crée dans "tes documents" (Windoze), à l'installation.
Note: Dans la fenêtre  (IDE) d'Arduino, ( "Outils/portSérie") tu peux contôler que ton port est le même que dans: Clic droit sur poste de travail/Propriétés/Matériel/Gestionaire des périphériques/Ports(Com et LPT).(pour Windoze.)
Note: Que si tu a autre chose de branché sur ton USB (ex: clé 3G ou autre qui tourne en tâche de fond, c'est à dire débranchée mais application non "quittée") tu peux avoir un pb de conflit.(c'est du vécu.)
Title: Re: besoin d'un guide
Post by: icare on Dec 10, 2013, 11:47 pm
Bonsoir,

Pour super cinci, cest quoi le IDE?... et pour le C ca va une autre paire de manches, car a part ce besoin, j ai rien d autre, et de plus je ne suis pas un softeux...
@@@@+++++

IDE pour integrated development environment.
Ou si tu préfères c'est arduino qui te permet d'écrire tes programmes.
@+
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 10, 2013, 11:52 pm
Il me semble que dans le code de B@tto:
Dans la while le: (bouton) doit être: (boutonUp). Ou me trompe-je ?
Title: Re: besoin d'un guide
Post by: icare on Dec 11, 2013, 12:02 am
Bonsoir,

Il me semble que dans le code de B@tto:
Dans la while le: (bouton) doit être: (boutonUp). Ou me trompe-je ?

Oui et non, tu as le choix  :smiley-mr-green:
Si ton BP est câblé entre la pin et gnd alors actif à LOW
Si ton BP est câblé entre la pin et +5V alors actif à HIGH
Tout est une question de référentiel
@+
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 11, 2013, 12:15 am
"bouton" n'a pas été déclaré. "boutonUp" oui.
Alors icare...On plane... :smiley-mr-green:
Title: Re: besoin d'un guide
Post by: B@tto on Dec 11, 2013, 08:12 am

Il me semble que dans le code de B@tto:
Dans la while le: (bouton) doit être: (boutonUp). Ou me trompe-je ?


Yes c'est corrigé ;)
Title: Re: besoin d'un guide
Post by: icare on Dec 11, 2013, 09:07 am
Bonjour,

"bouton" n'a pas été déclaré. "boutonUp" oui.
Alors icare...On plane... :smiley-mr-green:

C'était pour voir si tu suivais. Non, bien vue.
@+
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 11, 2013, 08:56 pm
alors là chapo ! 8)
L'appel du grale a été plus fort, j'ai pas pu attendre !!!
j'ai câblé les leds, les bp, et j'ai chargé le code de Ohhhh mon B@ttoOOOO, et ça clignote, on se croirait dans une boite de nuit....
je vérifie tout cela calmement, maintenant que le pic d'adrénaline est passé.

Bon je re édité mon post:
Ca  fonctionne mais par contre je ne retrouve pas l'allumage des leds dans l'ordre des sorties, ca me parrait inversé?
Ma FONCTION1  est 1 1 0 0 0 0 0 1 et ca correspond a D10 D9 D8 D7 D6 D5 D4 D3
normal ???

Question: si je voulais qu'au démarrage je vienne directement sur FONCTION1, car tout est a zero , on fait comment?
merci encore pour votre patience et devouement

@+
Title: Re: besoin d'un guide
Post by: B@tto on Dec 11, 2013, 09:34 pm

Ca a l'air de fonctionner mais par contre je ne retrouve pas l'allumage des leds dans l'ordre des sorties, ca me parrait inversé?
Ma premiére sequence est 1 1 0 0 0 0 0 1 et ca correspond a D10 D9 D8 D7 D6 D5 D4 D3
normal ???


Il faut reprendre les deux tableau du début :

const byte Fonction[] ={0b00000011,0b00001100,0b001100000,0b11000000,0b10000001};

== > ce sont les séquences, comme tu n'avais pas donné toutes les fonctions j'ai fait du pifomètre la, à toi d'éditer comme ça t'ira. Le principe c'est que les 0 et les 1 sont liés avec le deuxième tableau :

const byte Pins[] = {3,4,5,6,7,8,9,10};

Mais effectivement l'ordre est "inversé" (et oui tout est affaire de relativité ;) ). Si je prend la première fonction :

00000011 ==>   0  0  0  0  0  0  1   1     
                          10 9  8   7  6  5  4  3  ==> ça donne pin 3 et 4 HIGH et tout les autres à LOW

Donc soit tu inverses l'ordre dans Pins[] soit dans Fonction[]


Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 11, 2013, 09:37 pm
merci b@tto, tu as  répondu j'etais encore en train de modifier mon post, lol

Question: si je voulais qu'au démarrage je vienne directement sur FONCTION1, car tout est a zero , on fait comment?
Title: Re: besoin d'un guide
Post by: B@tto on Dec 11, 2013, 09:49 pm
Ca se complique un peu ... En fait on pourrait faire simple et utiliser l'EEPROM du contrôleur (une mémoire morte qu'on peut utiliser dans le code). C'est très simple d'utilisation. Problème : cette mémoire a une quantité d'écriture limitée (100 000). L'idée serait de stocker la variable x puisque c'est elle qui dit où on en est dans Fonction[]. Donc à chaque changement il faudrait sauvegarder cette variable comme ça dès qu'il y a une coupure, on recharge x et on reprend donc au même endroit. Le truc c'est donc de savoir combien il va y avoir de changement de fonction approximativement  par jour, et voir si c'est compatible avec la durée de vie de l'EEPROM. Sinon il faudra une mémoire externe.

Si ta question c'était juste comment définir la fonction de démarrage à chaque démarrage, il suffit juste de donner à x une valeur lors de sa déclaration. Exemple :

Code: [Select]
int i;
int x=1;


au lieu de

Code: [Select]
int i,x;
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 11, 2013, 10:17 pm
dsl, je me suis mal exprimé, en faite lorsque je fait un reset, toutes les sorties sont à o, je suis obligé de faire UP pour avoir ma premiére fonction, ce que je voudrais, c'est apres un reset, demarrer directement dur ma FONCTION1, je ne voudrais jamais avoir toutes les sorties a 0.

J'ai essayé ce que tu m'a dit:

int i;
int x=1;

ca n'a rien changé.

Title: Re: besoin d'un guide
Post by: B@tto on Dec 12, 2013, 08:50 am
Ah Ok, il suffit juste de modifier le setup :

Code: [Select]

int i,x;

void setup() {

for(i=0;i<8;i++){
pinMode(Pins[i],OUTPUT);
digitalWrite(Pins[i],(1&Fonction[x]>>i));
}

pinMode(BoutonUP,INPUT_PULLUP);
pinMode(BoutonDOWN,INPUT_PULLUP);

}
Title: Re: besoin d'un guide
Post by: fifi82 on Dec 12, 2013, 08:57 am
oui mais quand tu fait :

Code: [Select]
if(x>5)x=0;
if(x<0)x=5;


tu choisi x de 0 à 5, alors que c'est de 1 à 5 je comprend pas

c'est pas plutôt ?
Code: [Select]
if(x>5)x=1;
if(x<1)x=5;
Title: Re: besoin d'un guide
Post by: B@tto on Dec 12, 2013, 09:03 am
nan l'index d'un tableau démarre à zéro mais du coup tu soulèves quand même une erreur ;) le bon code c'est :

Code: [Select]

if(x>4)x=0;
if(x<0)x=4;
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 12, 2013, 07:56 pm
hello B@to.
Ca fonctionne nickel, je suis sans voix  8)  8) , quelle maitrise.

Ma dernière étape, mettre un afficheur 2 Lignes qui affichera:

1 ére ligne >>> Press UP DW to select     (affichage en permanence)
2 iéme ligne >>>  FONCTION  1, FONCTION 2...ect   (en fonction de la FONCTION choisie avec UP/DW)

j'ai vue sur le fofo qu'on pouvait cabler en 4 bits, mais il me faut  4 bits + RS + E, mais je sais pas ou brancher, sachant que j'ai D3 a D12 de pris par les BP et les leds.

ca commence à m'interresser mechant ce truc, merci encore, je te dois une fiére chandelle
Title: Re: besoin d'un guide
Post by: B@tto on Dec 12, 2013, 09:02 pm
Les pins analogiques (A0 à A5 si tu as une UNO ) sont également des pins digitaux, sachant que A0 = 14, A1 =15 .... Donc tu as la place ;)
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 12, 2013, 09:13 pm
Aiiiii c'est un NANO V3 que j'ai, j'suis mal?



Title: Re: besoin d'un guide
Post by: B@tto on Dec 12, 2013, 09:33 pm
Nan nan c'est pareil, sauf que en cadeau bonusqye tu as des pins analogiques (A6 et A7) qui ne sont pas digitaux eux (au cas ou)
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 12, 2013, 09:49 pm
donc sauvé !! :smiley-roll-sweat:
J'ai pris le schemas ici:
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertLCDSeulAfficheTexte (http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertLCDSeulAfficheTexte)

Bon j'affecte comme cela:
RS > D0
E > D1
D4 > AO
D5 > A1
D6 > A2
D7 > A3

J' essayé de faire afficher le LCD en utilisant la config ci dessus, ben ca marche pas.
Title: Re: besoin d'un guide
Post by: icare on Dec 12, 2013, 10:50 pm
Bonsoir,

J'ai pris le schemas ici:
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertLCDSeulAfficheTexte (http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertLCDSeulAfficheTexte)

Bon j'affecte comme cela:
RS > D0
E > D1
D4 > AO
D5 > A1
D6 > A2
D7 > A3

J' essayé de faire afficher le LCD en utilisant la config ci dessus, ben ca marche pas.

As-tu bien suivi les indications du lien mon-club.fr du chapitre 1 à 7 ?
Si oui, donne nous ton code pour voir.
Si non, fait ce qu'il décrive.
@+
Title: Re: besoin d'un guide
Post by: B@tto on Dec 13, 2013, 12:17 am
Evite D0 et D1 ce sont les pins série. Même si c'est pas forcement la d'où vient le problème ...

Sinon rentre 14 pour D4, 15 pour D5 etc ... La aussi pas sûr que ça vienne de la, mais bon
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 13, 2013, 08:47 am

Sinon rentre 14 pour D4, 15 pour D5 etc ... La aussi pas sûr que ça vienne de la, mais bon

Le plus simple c'est d'utiliser A0, A1, .. qui sont définis correctement dans pins_arduino.h
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 13, 2013, 02:15 pm
bonjour les amis,
Je voudrais être sur d'avoir compris, j'ai recupereré la datasheet du NANO V3, et je ne retrouve rien sur le faite que les pins Analogiques A0 à A5 peuvent fonctionner en DIGITAL????

Pour essayer l'afficheur  (16 colonnes 2 lignes ) j'ai modifié le code comme cela:

#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD


// --- constantes des broches ---

const int RS=2; //declaration constante de broche
const int E=1; //declaration constante de broche

const int D4=26; //declaration constante de broche
const int D5=25; //declaration constante de broche
const int D6=24; //declaration constante de broche
const int D7=23; //declaration constante de broche

// --- Déclaration des variables globales ---

// --- Initialisation des fonctionnalités utilisées ---
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// initialisation LCD en mode 4 bits

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage ---

lcd.begin(16,2); // Initialise le LCD avec 20 colonnes x 4 lignes

delay(10); // pause rapide pour laisser temps initialisation

// Test du LCD

lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
delay(8000); // pause de 2 secondes

lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran

} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

lcd.print("Arduino...") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.setCursor(9, 1) ; // 10ème col - 2ème ligne - positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
lcd.print("...pour te") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.setCursor(4, 2) ; // 5ème col - 3ème ligne - positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
lcd.print("...servir") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.setCursor(12, 3) ; // 13ème col - 4ème ligne - positionne le curseur à l'endroit voulu (colonne, ligne) (1ère=0 !)
lcd.print("...amigo") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes

lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran

// --- ici instructions à exécuter par le programme principal ---

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---

Title: Re: besoin d'un guide
Post by: B@tto on Dec 13, 2013, 03:16 pm

bonjour les amis,
Je voudrais être sur d'avoir compris, j'ai recupereré la datasheet du NANO V3, et je ne retrouve rien sur le faite que les pins Analogiques A0 à A5 peuvent fonctionner en DIGITAL????


tu peux me croire, testé et approuvé ;)

mais si tu doute toujours :

While the main function of the analog pins for most Arduino users is to read analog sensors, the analog pins also have all the functionality of general purpose input/output (GPIO) pins (the same as digital pins 0 - 13).

http://arduino.cc/en/Tutorial/AnalogInput


const int D4=26; //declaration constante de broche
const int D5=25; //declaration constante de broche
const int D6=24; //declaration constante de broche
const int D7=23; //declaration constante de broche


Jte laisse trouvé l'erreur ...
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 13, 2013, 06:34 pm
je te crois sur parole  :)
Bon je pense avoir inversé , car j'avais pris la doc du NANO V2.3 et pin A0 à A7 sont inversées.
J'en ai profité pour changer E et RS, je les est viré des pin reserve au RX/TX, j'ai donc maintenant branché sur les pin suivantes:

const int RS=5; //declaration constante de broche
const int E=16; //declaration constante de broche

const int D4=19; //declaration constante de broche
const int D5=20; //declaration constante de broche
const int D6=21; //declaration constante de broche
const int D7=22; //declaration constante de broche

ben que neni   :~

j'ai sur la ligne du haut les 20 matrices qui d'affichent, et rien sur la ligne du bas,j'ai l'impression que ca communique pas..
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 13, 2013, 09:27 pm

J'en ai profité pour changer E et RS, je les est viré des pin reserve au RX/TX, j'ai donc maintenant branché sur les pin suivantes:

const int RS=5; //declaration constante de broche
const int E=16; //declaration constante de broche

const int D4=19; //declaration constante de broche
const int D5=20; //declaration constante de broche
const int D6=21; //declaration constante de broche
const int D7=22; //declaration constante de broche


Pourquoi est-ce que tu t'évertues à renommer les broche alors que tu peux utiliser directement A0, A1, ..., A6 comme nom de broche pour manipuler les broches digitales.
En plus tu ne fais pas attention au réponses précédentes.
        B@tto t'as expliqué que la broche A0 c'était la numéro 14
        Et moi je t'ai dit que tu pouvait utiliser directement A0, A1,... qui sont défini avec les bonnes valeurs dans les librairies arduino

Code: [Select]
pinmode(A0,OUTPUT); // configure la broche A0 en sortie
digitalWrite(A0, HIGH); // met la sortie A0 au niveau haut


Il est préférable d'utiliser le nom des broches plutôt que leur numéro car si tu portes le programme sur une mega par exemple le numéro des broches analogiques n'est plus le même mais c'est transparent si tu utilises les noms A0, A1 car leur définition dépend du processeur cible..
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 13, 2013, 09:50 pm
Quote
B@tto t'as expliqué que la broche A0 c'était la numéro 14

dsl je ne comprends pas, A0  sur NANOV3 c'est 19, ca sort d'ou ce 14 ????

ce que tu veux dire c'est ca?
const int RS=D2; //declaration constante de broche
const int E=D13; //declaration constante de broche

const int D4=A0; //declaration constante de broche
const int D5=A1; //declaration constante de broche
const int D6=A2 //declaration constante de broche
const int D7=A3; //declaration constante de broche

ca me sort des errors >>>  D4, D13, D7 was not declared in this scope?
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 13, 2013, 10:01 pm
Quote
const int D4=A0;

Je le tente...Tu déclare un INTeger (un entier, donc un nombre) et tu lui donne un "A0"  à manger; comme ça passe pas, il considère que A0 est une variable, et qu'en tant que telle, elle n'a pas été déclarée.
J'ai bon ? :P
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 13, 2013, 10:13 pm

Quote
B@tto t'as expliqué que la broche A0 c'était la numéro 14

dsl je ne comprends pas, A0  sur NANOV3 c'est 19, ca sort d'ou ce 14 ????

ce que tu veux dire c'est ca?
const int RS=D2; //declaration constante de broche
const int E=D13; //declaration constante de broche

const int D4=A0; //declaration constante de broche
const int D5=A1; //declaration constante de broche
const int D6=A2 //declaration constante de broche
const int D7=A3; //declaration constante de broche

ca me sort des errors >>>  D4, D13, D7 was not declared in this scope?

P...n y'a des jours c'est pas facile
Si tu utilises les broches A0 à A3 pourquoi vouloir leur donner un autre nom. Après on ne sait plus de quoi on parle.
Si l'écran est connecté aux broches A0 à A3 on l'écrit tout simplement.
Code: [Select]
LiquidCrystal lcd(RS, E, A0, A1, A2, A3);// initialisation LCD en mode 4 bits
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 13, 2013, 10:30 pm
je suis dépité :smiley-sad-blue: je m'en sort pas.
On reprendra tout ca calmement.
Merci pour votre patience.
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 14, 2013, 11:08 am

Quote
B@tto t'as expliqué que la broche A0 c'était la numéro 14

dsl je ne comprends pas, A0  sur NANOV3 c'est 19, ca sort d'ou ce 14 ????



Le numéro utilisé dans les librairies arduino n'a absolument rien à voir avec le numéro de la broche du module arduino lui même. Le numéro dans les librairies dépend du processeur utilisé. Ces valeurs sont déclarées dans le répertoire arduino/hardware/arduino/variants/ un sous-répertoire par plateforme.
Pour les cartes "standards" c'est le répertoire du même nom.
Un même processeur peut se trouver sur des cartes de formes différentes dont les broches ne sont pas organisées de la même manière. Donc le logiciel ne connait les broches que par le "nom" et non par leur position physique sur le module arduino.
http://arduino.cc/en/Tutorial/AnalogInputPins (http://arduino.cc/en/Tutorial/AnalogInputPins)
Les broches digitales sont numérotées 0 à 13, les broches analogiques sont nommées A0 à A7 (il y a des cartes avec 8 entrées analogiques). Dans le fichier pin-arduino.h A0 à A7 sont définis comme allant de 14 à 21.
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 18, 2013, 08:52 pm
Bonjour les amis,
DSL j'étais en deplacement au fin fond de la campagne, pas moyen de me connecter  :smiley-fat:
Bon je vois que c'est le gros melange de mon coté depuis le debut.
Donc si j'ai bien compris, quand on parle des pins, c'est celle sur micro directement????
Comme sur le nanoV3 c'est un MEGA328, il faut que je parte avec les N° de pin du micro depuis le schémas?
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 18, 2013, 10:31 pm

Bonjour les amis,
DSL j'étais en deplacement au fin fond de la campagne, pas moyen de me connecter  :smiley-fat:
Bon je vois que c'est le gros melange de mon coté depuis le debut.
Donc si j'ai bien compris, quand on parle des pins, c'est celle sur micro directement????
Comme sur le nanoV3 c'est un MEGA328, il faut que je parte avec les N° de pin du micro depuis le schémas?


Regarde sur l'image. Le nom des broches est sérigraphié sur la carte. Dans les programmes il faut utiliser ces noms là.
(http://arduino.cc/en/uploads/Main/ArduinoNanoFront_3_sm.jpg)
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 19, 2013, 07:04 am
Quote
const int RS=A5 ;//declaration constante de broche
const int E=A4 ; //declaration constante de broche

const int D4=A0; //declaration constante de broche
const int D5=A1; //declaration constante de broche
const int D6=A2 //declaration constante de broche
const int D7=A3; //declaration constante de broche


Bon voici le schemas complet , et la nouvelle affectation des broches, est ca marche !!!! en faite je sais pas pourquoi, mais D2 et D13 ca merde!!!

http://imageshack.us/photo/my-images/849/irfa.jpg/ (http://imageshack.us/photo/my-images/849/irfa.jpg/)
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 19, 2013, 09:00 pm
Je vais vous solliciter encore un peu, ci dessous le code permettant de commander mes leds suivant une table vérité établie:

Quote
//Pilotage de led Version du 11_12_2013//

#define BoutonUP 11
#define BoutonDOWN 12

const byte Fonction[] ={0b11000001,0b00110011,0b00110000,0b00111111,0b00111100}; //table fonctionnement sorties
const byte Pins[] = {3,4,5,6,7,8,9,10}; // à adapter suivant branchement des relais

int i,x;  // permet de demarrer a la plage 0
//int i;   // permet de demarrer à partir d'une plage choisi
//int x=1;

void setup() {

//for(i=0;i<8;i++){          //debute à la plage 0
//pinMode(Pins,OUTPUT);
//}
for(i=0;i<8;i++){            //debute a la plage 1
pinMode(Pins,OUTPUT);
digitalWrite(Pins,(1&Fonction
  • >>i));
    }


    pinMode(BoutonUP,INPUT_PULLUP);
    pinMode(BoutonDOWN,INPUT_PULLUP);

    }

    void loop() {

    if(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW) {

    digitalRead(BoutonUP)==LOW?x++:x--;
    if(x>5)x=0;        // dimensionement du tableau
    if(x<0)x=5;

    for(i=0;i<8;i++) {

    digitalWrite(Pins,(1&Fonction
    • >>i));

      }

      while(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW); //tant qu'un bouton est appuyé

      delay(500); // suppression des effets de rebond
      }

      }




comment faire maintenant pour que chaque fois que j'appuie sur le bouton UP /DW, j'affiche sur le LCD le N° de sequence de mes leds ????:
0b11000001  >>> sequence 1
0b00110011  >>> sequence 2
0b00110000 >>> sequence 3
0b00111111  >>> sequence 4
0b00111100   >>> sequence 5

merci




Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 20, 2013, 09:38 pm
Bonsoir,

J'essaie maintenant de coupler les deux bouts de code, je suis donc arrivé à cela:

Ca demarre, le LCD affiche        " Select UP/DW."  puis passe la main au contrôle des relais avec les BP  (merci encore B@tto), mais là il faudrait que je mette les conditions et passer l'info au LCD, (voir poste ci dessus) mais mon incompétence me bloque, une petite piste ???

Quote
//Pilotage de relay Version du 20_12_2013//

// --- Inclusion des librairies utilisées ---
#include <LiquidCrystal.h> // Inclusion de la librairie pour afficheur LCD

// --- Déclaration des constantes LCD ---
const int RS=A5; //declaration constante de broche
const int E=A4; //declaration constante de broche

const int D4=A0; //declaration constante de broche
const int D5=A1; //declaration constante de broche
const int D6=A2; //declaration constante de broche
const int D7=A3; //declaration constante de broche

// --- Initialisation des fonctionnalités utilisées ---
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// initialisation LCD en mode 4 bits

// --- Déclaration des constantes relay ---
#define BoutonUP 11
#define BoutonDOWN 12

const byte Fonction[] ={0b11000001,0b00110011,0b00110000,0b00111111,0b00111100}; //table fonctionnement sorties
const byte Pins[] = {3,4,5,6,7,8,9,10}; // à adapter suivant branchement des relais

int i,x;  // permet de demarrer a la plage 0

// debut de la fonction setup()

void setup()  {

//lcd
lcd.begin(20,2); // Initialise le LCD avec 20 colonnes x 2 lignes

delay(10); // pause rapide pour laisser temps initialisation

// Test du LCD

lcd.print("Select UP/DW") ; // affiche la chaîne texte - message de test
//delay(2000); // pause de 2 secondes

//lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran

//relay

for(i=0;i<8;i++)           //debute a la plage 1
pinMode(Pins,OUTPUT);
digitalWrite(Pins,(1&Fonction
  • >>i));

    pinMode(BoutonUP,INPUT_PULLUP);
    pinMode(BoutonDOWN,INPUT_PULLUP);
    }
    // fin de la fonction setup()


    void loop() {

    if(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW) {

    digitalRead(BoutonUP)==LOW?x++:x--;
    if(x>5)x=0;        // dimensionement du tableau
    if(x<0)x=5;

    for(i=0;i<8;i++) {

    digitalWrite(Pins,(1&Fonction
    • >>i));

      }

      while(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW); //tant qu'un bouton est appuyé

      delay(500); // suppression des effets de rebond
      }

      }

Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 21, 2013, 09:28 pm
Je vais surement faire hurler les puristes,  pour renvoyer sur le LCD la position, je pense que switch devrait pouvoir repondre à mon besoin, j'ai donc écrit:

Quote
/ control de la valeur de X et affichage

switch (Fonction
  • )  {
      case 0b11000001:
      lcd.print("Seq1 ")
      break ;
       case 0b00110011:
      lcd.print("Seq2 ")
      break ;
       case 0b00110000:
      lcd.print("Seq3 ")
      break ;
       case 0b00111111:
      lcd.print("Seq4 ")
      break ;
       case 0b00111100:
      lcd.print("Seq5 ")
      break ;
    default:
    lcd.print("je cherche... ")
    }


Qu'en pensez vous? suis je sur la bonne voie ? ou il faut faire autrement ?  j'ai un message d'erreur :  expected ; before break
merci de votre aide.
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 21, 2013, 10:32 pm
expected (il manque) ; (point virgule) before (avant (la ligne)) break.
Mais je pense que tu a eu cette erreur à cette ligne because le prog est venu directement sur cette ligne.
Il doit manquer des point virgules à toutes les lignes semblables à celle là.
Si je ne dit pas de c****ies. Lol !
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 22, 2013, 09:37 am
ok Caro, je vais regardé, je suis un ultra debutant.
A tu un avis sur l'utilisation de l'instruction "switch" pour envoyer les infos à l'afficheur sous conditions, est ce la bonne démarche, ou faut il mieux utiliser un IF...ELSE?
@+
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 22, 2013, 11:18 am
+1 pour le ; à la fin des lignes
Le switch est très bien pour ça. Très bien aussi l'utilisation de default qui permet de détecter les cas non traités.
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 22, 2013, 07:56 pm
ok pour le ; , bon ca à l'air de fonctionner,j'ai mis cela:

Quote
switch (Fonction
  • ) {
      case 0b11000001:
      lcd.print("Seq1 ");
      break;
       case 0b00110011:
      lcd.print("Seq2 ");
      break ;
       case 0b00110000:
      lcd.print("Seq3 ");
      break ;
       case 0b00111111:
      lcd.print("Seq4 ");
      break ;
       case 0b00111100:
      lcd.print("Seq5 ");
      break ;
    default:
    lcd.print("je cherche... ");
    break ;
    }
    }


sauf que:
1>  j'ai l'écran qui est en boucle et qui se rempli  sur " je cherche...." quand aucunes conditions est remplies
2> Lorsque j'appuis sur le BP, et que la condition est remplie, ca s'arrete sur la condition (normal  :)) et j'ai l'écran qui est rempli de Seq1 Seq1 Seq1 .............

Je suis pas loin, de la verité, il doit y avoir une histoire de formatage d'affichage ?
Title: Re: besoin d'un guide
Post by: B@tto on Dec 23, 2013, 10:33 am
C'est normal pour deux raisons :

- Je pense que tu as mal placé ton switch, il ne faut pas le mettre directement dans boucle mais uniquement lorsqu'un bouton est appuyé, donc idéalement avant le while(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW);

- Ensuite tu lis "Fonction" mais c'est un tableau déjà : ne pas le désigner par un index ici c'est déjà une erreur, en plus ce n'est pas lui "qui dit où qu'on en est", c'est la variable x.

-ensuite tu ne fait pas de lcd.clear() : lcd.print() "écrit" sur l'écran à la suite, c'est normal par exemple tu n'as pas à gérer le retour à la ligne "manuellement". Ici tu t'en fiches mais bon ;)
Donc le "truc" consiste à effacer l'écran avec lcd.clear() et à faire un print ensuite. Donc à supposer que tu as respecté mes précédentes remarques, et en améliorant le code il devient :

Code: [Select]

lcd.clear();
lcd.print("Seq")
lcd.print(x+1);


Ca fait plus court hein ? :D
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 23, 2013, 08:44 pm
Ha je pensais bien que tu étais dans l'ombre....

Quote
Je pense que tu as mal placé ton switch, il ne faut pas le mettre directement dans boucle mais uniquement lorsqu'un bouton est appuyé, donc idéalement avant le while(digitalRead(BoutonUP)==LOW || digitalRead(BoutonDOWN)==LOW);


Ok , du coup ça a réglé un problème de rafraîchissement désagréable >>> +1 :D

Quote
- Ensuite tu lis "Fonction" mais c'est un tableau déjà : ne pas le désigner par un index ici c'est déjà une erreur, en plus ce n'est pas lui "qui dit où qu'on en est", c'est la variable x.


Alors là,  :smiley-fat:  , comment je dois écrire mon switch,  pour lire X  ??      >>>> switch (x)  ???

J'ai fait cela, mais ca doit pas être tres optimisé? mais sa fonctionne.

Quote
switch (Fonction
  • )
    {
     
      case 0b11000001:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("La sequence est: ");
      lcd.setCursor(0, 1);
      lcd.print("Seq1 ");
      delay(500);
      break;
     
       case 0b00110011:
       lcd.clear();
       lcd.setCursor(0, 0);
      lcd.print("La sequence est: ");
      lcd.setCursor(0, 1);
      lcd.print("Seq2 ");
      delay(500);
      break ;
     
       case 0b00110000:
       lcd.clear();
       lcd.setCursor(0, 0);
      lcd.print("La sequence est: ");
      lcd.setCursor(0, 1);
      lcd.print("Seq3 ");
      delay(500);
      break ;
     
       case 0b00111111:
       lcd.clear();
       lcd.setCursor(0, 0);
      lcd.print("La sequence est: ");
      lcd.setCursor(0, 1);
      lcd.print("Seq4 ");
      delay(500);
      break ;
     
       case 0b00111100:
       lcd.clear();
       lcd.setCursor(0, 0);
      lcd.print("La sequence est: ");
      lcd.setCursor(0, 1);
      lcd.print("Seq5 ");
      delay(500);
      break ;
     
    default:
    lcd.clear();
    lcd.setCursor(0, 0);
      lcd.print("Choisir une sequence");
    lcd.setCursor(0, 1);
    lcd.print("Pressez UP / DW... ");
    delay(500);
    break ;.
Title: Re: besoin d'un guide
Post by: B@tto on Dec 23, 2013, 08:51 pm
T'as le choix : soit le code que je viens de te poster, soit le tiens qui peut simplement être raccourci / optimisé :

Code: [Select]
lcd.clear();
lcd.setCursor(0, 0);
  lcd.print("La sequence est: ");

switch (x){
 
  case 0:
  lcd.print("Seq1 ");
  break;
 
   case 1:
  lcd.print("Seq2 ");
  break ;
 
   case 2:
  lcd.print("Seq3 ");
    break ;
 
   case 3:
  lcd.print("Seq4 ");
   break ;
 
   case 4:
  lcd.print("Seq5 ");
  break ;
 
default:

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Choisir une sequence");
lcd.setCursor(0, 1);
lcd.print("Pressez UP / DW... ");

}

delay(500);
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 23, 2013, 09:22 pm
Oui c'est beaucoup plus clair, et le résultat est le même, je garde le tien qui est plus propre.
J'arrive presque au bout, mais du coup dans mes bricolage, j'ai perdu le démarrage sur la Seq1, je démarre sur toutes les sortie a 0, je suis obligé d'appuyer une fois sur UP pour lancer le truc.
Tu m'avais dis de remplacer:
Quote

int i,x;
par
int i;  
int x=1;



Mais ca fonctionne plus...

Aussi pour pas mourrir idiot, peux tu m'expliquer cette partie du code? stp
Quote
for(i=0;i<8;i++)          
pinMode(Pins,OUTPUT);
digitalWrite(Pins,(1&Fonction
  • >>i));
Title: Re: besoin d'un guide
Post by: B@tto on Dec 23, 2013, 10:50 pm
Alors tentative d'explication :

Code: [Select]
for(i=0;i<8;i++)         ==> bon la tu l'auras compris je pense, on fait une boucle pour définir l'état de chaque sortie
Code: [Select]
pinMode(Pins[i],OUTPUT); ==> bon la aussi tu auras compris, on définit le pin en OUTPUT
Code: [Select]
digitalWrite(Pins[i],(1&Fonction[x]>>i)); ==> ici ça se corse, je décortique :

Prenons par exemple i=4 et x = 3 donc séquence = 0b00111111 :

Code: [Select]
Fonction[x]>>i <=> 00111111 >> 4 => 0011    
Ici on fait du bit bitshifting littéralement du décalage de bit, et ici sur 4 rang vers la droite
ensuite 0011&1 <=> 0011 & 0001 = 1 => ici on fait une opération logique binaire ET, et ça fait ce que ça dit c'est à dire qu'il me faut ET 1 ET 1 pour faire 1. 1 ET 0 fait 0.

Dans les opérateurs logique on trouve entre autre également le OU qui lui fait 1 OU 0 = 1 0 OU 0 = 0      1 OU 1 = 1     

Donc ici, si au lieu d'un ET j'avais fait un OU :
0011 | 1 <=> 0011 | 0001 = 0011

Pour en revenir à nos moutons
Code: [Select]
1&Fonction[x]>>i me permet d'extraire de la séquence le 1 ou le 0 qui m'interesse. A noter que TRUE, HIGH ou 1 c'est la même chose, donc écrire digitalWrite(9,HIGH) c'est exactement la même chose que  digitalWrite(9,1)

Pour ton problème de séquence au démarrage, tu peux poster ton code actuel complet ?
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 24, 2013, 08:49 am
Bon tout fonctionne, j'avais pas remis int x=1 au bon endroit.

je te remercie pour les explications. Si tu veux je comprends le code à 90%, c'est sur  les petites subtilités d'écritures que je bloque.
les instructions pinmode, digitalwrite.......no problem, mais par exemple :
Quote
for(i=0;i<8;i++)

j'ai bien compris que FOR c'est une boucle, , il y a 40 ans  :)je programmais un peu en basic,
et les boucles FOR NEXT, avait la forme FOR I=0 to X, mais cette structure, je ne la comprends pas:
I=0 (ok), I<8 (c'est quoi ce 8), I++ (alors là ?)

Title: Re: besoin d'un guide
Post by: fdufnews on Dec 24, 2013, 09:26 am

j'ai bien compris que FOR c'est une boucle, , il y a 40 ans  :)je programmais un peu en basic,
et les boucles FOR NEXT, avait la forme FOR I=0 to X, mais cette structure, je ne la comprends pas:
I=0 (ok), I<8 (c'est quoi ce 8), I++ (alors là ?)



for(i=0;i<8;i++)

for (code à l'initialisation de la boucle; condition de maintien dans la boucle; code exécuté à chaque fin de boucle)

Nota: chaque bloc peut contenir plusieurs expressions séparées par des virgules, bien que cela ait peu de sens dans la condition de maintien

Ne pas oublier qu'il y a ça pour les problèmes de langage: http://arduino.cc/en/Reference/HomePage (http://arduino.cc/en/Reference/HomePage)
dans notre cas: http://arduino.cc/en/Reference/For (http://arduino.cc/en/Reference/For)

edit: ajout du nota
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 24, 2013, 11:54 am
Ok tres bien, pour les précisions, c'est clair.

Je profite de ce poste, car je tiens à vous  remercier  pour cette immersion dans le code arduino, et de m'avoir soutenu, et de votre patience.
Je vais faire mumuse avec mes relais, et j'ai déjà un autre projet sous le coude.
En tout cas je vous souhaite un joyeux Noël et mes bons voeux anticipés.....
Title: Re: besoin d'un guide
Post by: Carolyne on Dec 24, 2013, 12:01 pm
Mirage 2000, pour poster du code, c'est l'outil :"#" qui est à gauche de la petite "bulle" écrite que tu emploi, qui elle , est la balise "citation"; qui sert pour reprendre du texte posté par quelqu'un d'autre.
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 29, 2013, 08:26 am
Code: [Select]
const byte Fonction[] ={0b00000011,0b00001100,0b001100000,0b11000000,0b10000001};

Bonjour tous,
Petite question, existe t une instruction qui donnerait l'inverse de ma fonction ci dessus ?
exemple:   0b00000011 donnerait 0b11111100 ???  mais pour toute ma fonction.

Je pourrais permuter les 0 et les 1 à la main, mais je préfère pas pour garder une certaine logique.

:) ok caro pour le #
Title: Re: besoin d'un guide
Post by: fdufnews on Dec 29, 2013, 09:05 am

Code: [Select]
const byte Fonction[] ={0b00000011,0b00001100,0b001100000,0b11000000,0b10000001};

Bonjour tous,
Petite question, existe t une instruction qui donnerait l'inverse de ma fonction ci dessus ?
exemple:   0b00000011 donnerait 0b11111100 ???  mais pour toute ma fonction.

Je pourrais permuter les 0 et les 1 à la main, mais je préfère pas pour garder une certaine logique.

:) ok caro pour le #

L'opérateur ~ fait ça. Voir là : http://arduino.cc/en/Reference/BitwiseXorNot (http://arduino.cc/en/Reference/BitwiseXorNot)
Title: Re: besoin d'un guide
Post by: mirage2000 on Dec 29, 2013, 11:05 am
Merci fdufnews à bientôt et meilleurs vœux a tous.