Show Posts
|
|
Pages: 1 [2] 3
|
|
17
|
International / Français / Re: Retrouver quel bit est a 1 sans Log
|
on: May 14, 2011, 04:58:14 am
|
|
Merci pour toutes vos reponses
J'ai essayer comme cela :
for (int i =0; i< 8; i++){ x = x >>i; if ( x & 1){ SelectPattern = i; }
x est le nombre binaire dont je veux savoir quel bit est a 1 mais ca ne marche pas j'ai un decalage en sachant que dans mon programme seul un Bit sera a 1 a la fois
En ce qui concerne BitRead la fonction ne retourne pas le numero du bit qui est a 1 il faut lui donner le Numero du bit a lire.
|
|
|
|
|
18
|
International / Français / Retrouver quel bit est a 1 sans Log
|
on: May 14, 2011, 04:37:00 am
|
|
Bonjour,
Je cherche une operation qui me permettrai de retrouver quel bit est a 1 dans un octet sans utiliser la fonction log Par exemple si j'ai:
B00010000 comment savoir que le bit 5 est a 1 sans faire :
B00010000 = 16 x = log16/log2
mais en utilisant les operations binaires.
merci pour votre aide
|
|
|
|
|
19
|
International / Français / Re: Faire tourner deux boucles a vitesses differentes
|
on: May 01, 2011, 01:56:27 pm
|
Merci pour ta reponse j'ai utilise la fonction millis et ça marche J'ai un peu modifier le programme pour utilise le PORTD en binaire Et j'aimerai pouvoir stocker dans une variable les different octet que j'ai en entre puis les afficher suivant le compteur incrementer par la Pin 15. J'ai donc cree un array pour stocker mes octet d'entree mais je n'arrice pas a les afficher En fait dans la derniere ligne de mon programme je voudrai que CurretPattern prenne la valeur de Pattern[compte] pourriez vous m'aidez?? voici le code // Mini Midi Drum sequencer //
int LedPin [6] = {2, 3, 4, 5, 6, 7}; //Pin ou sont connecter les leds int BoutonPin [7] = {9, 10, 11, 12, 13, 14, 15}; //Pin ou sont connecter les boutons int LedBinaire[6] ={4, 8, 16, 32, 64, 128}; //Valeur de chaque led en bianire byte Pattern [16] = {0}; byte CurrentPattern = 0;
int BoutonState[7] = {0}; //etat de chaques boutons 0=FAUX 1=VRAI int BoutonPressed[7] = {0}; int BoutonBounce[7] = {0};
int Step = -1; // compteur de la sequence boolean LedState[6] = {0}; // etat des 6 leds 0=eteint 1=allumer int count[7] = {0}; // variable qui compte le nombre de fois qu'on a appuyer sur le bouton unsigned long Currenttime = 0; unsigned long Pasttime = 0; int bpm =0; int compte = 0; // compte le nombre de fois qu'on appuie sur menu
void setup(){ for (int i =0; i <6; i++){ pinMode(LedPin[i], OUTPUT); //initialise les sortis digitalWrite(LedPin[i], LOW); } for (int i =0; i <7; i++){ pinMode(BoutonPin[i], INPUT); // intialise les entrees } }
void loop(){ // Fonction pour le BPM Currenttime = millis(); if (Currenttime - Pasttime >= bpm){ Pasttime = Currenttime; bpm = 300; Step++; if (Step >5){ Step =0; } } // Savoir quels boutons est appuyer for (int i =0; i <6; i++){ BoutonPressed[i] = digitalRead(BoutonPin[i]); delay(10); BoutonBounce[i] = digitalRead(BoutonPin[i]); if (BoutonBounce[i] = BoutonPressed[i]){ if (BoutonPressed[i] != BoutonState[i]){ if (BoutonPressed[i]){ count[i]++; if (count[i]==1){ CurrentPattern = CurrentPattern + LedBinaire[i]; LedState[i] =1; } if (count[i] >1){ count[i] = 0; CurrentPattern = CurrentPattern - LedBinaire[i]; LedState[i]=0; } } } } BoutonState[i] = BoutonPressed[i]; } if (compte = 1){ Pattern[1] = CurrentPattern; } if (compte = 0){ Pattern[0] = CurrentPattern; } // Set le bouton menu choix de pattern BoutonPressed[7] = digitalRead(15); delay(50); BoutonBounce[7] = digitalRead(15); if (BoutonBounce[7] = BoutonPressed[7]){ if (BoutonPressed[7] != BoutonState[7]){ if (BoutonPressed[7], HIGH){ compte++; if (compte >1){ compte =0; } } } } BoutonState[7] = BoutonPressed[7]; //Metter les Leds dans l'etat souhaite PORTD = CurrentPattern| LedBinaire[Step]; }
|
|
|
|
|
20
|
International / Français / Faire tourner deux boucles a vitesses differentes
|
on: April 29, 2011, 06:47:26 am
|
Salut à tous, Voila mon projet est un petit séquenceur de 6 leds et 7 boutons Six des boutons correspondent respectivement au Led (CàD que si j'appuie sur le bouton la Led s'allume et s’éteindra que si je reappuie sur le bouton). Lorsque je lance le programme le "sequenceur" demarre (les leds font un chenillard de gauche a droite) Mon souci est que quand j'augmente les delay de ma fin de loop ( ce qui correspond au tempo) mes boutons ne reponde plsu aussi bien que quand les delay est plus petit du fait que les infos soit traites entre chaque allumage de led du chenillard Est il possible de faire tourner deux boucles simultanément mais pas a la même vitesse pour que je puisse augmenter le delay de fin de loop sans perdre en precision sur les botons?? Voici le programme // Mini Midi Drum sequencer //
int LedPin [6] = {3, 4, 5, 6, 7, 8}; //Pin ou sont connecter les leds int BoutonPin [7] = {9, 10, 11, 12, 13, 14, 15}; //Pin ou sont connecter les boutons
int BoutonState[7] = {0}; //etat de chaques boutons 0=FAUX 1=VRAI int BoutonPressed[7] = {0}; int BoutonBounce[7] = {0};
int Step = -1; // compteur de la sequence boolean LedState[6] = {0}; // etat des 6 leds 0=eteint 1=allumer int count = {0}; // variable qui compte le nombre de fois qu'on a appuyer sur le bouton int i =0; //compteur de synchro
void setup(){ for (int i =0; i <6; i++){ pinMode(LedPin[i], OUTPUT); //initialise les sortis digitalWrite(LedPin[i], LOW); } for (int i =0; i <7; i++){ pinMode(BoutonPin[i], INPUT); // intialise les entrees } }
void loop(){ Step++; if (Step > 5){ Step = 0; }
for ( i =0; i <6; i++){ BoutonPressed[i] = digitalRead(BoutonPin[i]); delay(1); BoutonBounce[i] = digitalRead(BoutonPin[i]); if (BoutonBounce[i] = BoutonPressed[i]){ if (BoutonPressed[i] != BoutonState[i]){ if (BoutonPressed[i]){ count++; if (count==1){ LedState[i] =1; } if (count >1){ count = 0; LedState[i]=0; } } } } BoutonState[i] = BoutonPressed[i]; }
SetLeds((Step+3), (i+3)); delay (30); }
void SetLeds (int StepLed, int LedBouton) { for (int j =0; j <6; j++){ digitalWrite(LedPin[j], LOW); } for (int x =0; x <6; x++){ LedBouton = LedPin[x]; if (LedState[x] == true){ digitalWrite(LedBouton, HIGH); } if (LedState[x] == false){ digitalWrite(LedBouton, LOW); } } digitalWrite(StepLed, HIGH); }
|
|
|
|
|
23
|
International / Français / simplifier un programme ?
|
on: February 25, 2011, 03:59:55 pm
|
|
Bonjour,
J'ai fait ce petit programme qui me permet de lire la valeur de huit potentiomètres multiplexer sur un LCD et je voudrai le simplifier, mais je ne sais pas comment. Dans ce programme j'ai repeter la même operation pour les huits potentiometres, n'y a t'il pas un moyen de simplifier cela ? Merci pour votre aide
Voici le programme:
/* Le but du circuit est de lire la valeur d'un des huits potentiometre l'afficheur LCD en passant par un multiplexage analogique des entrées */
// include the library code: #include <LiquidCrystal.h> #include <EEPROM.h>
// initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int analogIn = 0; // valeur de la Pin analogique d'entrée
int valuepot1 = 0; // valeur du potar 1 int valuepot2 = 0; // valeur du potar 2 int oldvaluepot1 = 0; int oldvaluepot2 = 0; int valuepot3 = 0; // valeur du potar 3 int valuepot4 = 0; // valeur du potar 4 int oldvaluepot3 = 0; int oldvaluepot4 = 0; int valuepot5 = 0; // valeur du potar 5 int valuepot6 = 0; // valeur du potar 6 int oldvaluepot5 = 0; int oldvaluepot6 = 0; int valuepot7 = 0; // valeur du potar 7 int valuepot8 = 0; // valeur du potar 8 int oldvaluepot7 = 0; int oldvaluepot8 = 0;
// Initialsé le 4051 avec les pins de sorti
int r0 = 0; //value select pin at the 4051 (s0) int r1 = 0; //value select pin at the 4051 (s1) int r2 = 0; //value select pin at the 4051 (s2) int row = 0; // storeing the bin code int count = 0; // just a count int bin [] = {000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy byte val1; // valeur enreg dans l'eeprom du potar 1 byte val2; // valeur enreg dans l'eeprom du potar 2
void setup() { // set up the LCD's number of rows and columns: lcd.begin(16, 2); // initialise les pins de sorti pour 4051 pinMode(10, OUTPUT); // s0 pinMode(9, OUTPUT); // s1 pinMode(8, OUTPUT); // s2 }
void loop() { // set the cursor to column 0, line 1 //scanner les entrées du 4051 for (count=0; count<=7; count++) { row = bin[count]; r0 = row & 0x01; r1 = (row>>1) & 0x01; r2 = (row>>2) & 0x01; digitalWrite(8, r0); digitalWrite(9, r1); digitalWrite(10, r2); //Serial.println(bin[count]); delay (0); // enreg la valeur du potar 1 dans une variable if (count==0){ valuepot1 = analogRead (analogIn); if (valuepot1 != oldvaluepot1){ valuepot1 = analogRead (analogIn); lcd.clear(); lcd.setCursor(0,0); lcd.print("Valeur Pot1"); lcd.setCursor(0,1); lcd.print(valuepot1,DEC); } } oldvaluepot1 = (valuepot1); // enreg la valeur du potar 2 dans une variable if (count==4){ valuepot2 = analogRead (analogIn); if (valuepot2 != oldvaluepot2){ valuepot2 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot2"); lcd.setCursor(0,1); lcd.print(valuepot2,DEC); } } oldvaluepot2 = (valuepot2); // enreg la valeur du potar 3 dans une variable if (count==2){ valuepot3 = analogRead (analogIn); if (valuepot3 != oldvaluepot3){ valuepot3 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot3"); lcd.setCursor(0,1); lcd.print(valuepot3,DEC); } } oldvaluepot3 = (valuepot3); // enreg la valeur du potar 4 dans une variable if (count==6){ valuepot4 = analogRead (analogIn); if (valuepot4 != oldvaluepot4){ valuepot4 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot4"); lcd.setCursor(0,1); lcd.print(valuepot4,DEC); } } oldvaluepot4 = (valuepot4); // enreg la valeur du potar 5 dans une variable if (count==1){ valuepot5 = analogRead (analogIn); if (valuepot5 != oldvaluepot5){ valuepot5 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot5"); lcd.setCursor(0,1); lcd.print(valuepot5,DEC); } } oldvaluepot5 = (valuepot5); // enreg la valeur du potar 6 dans une variable if (count==5){ valuepot6 = analogRead (analogIn); if (valuepot6 != oldvaluepot6){ valuepot6 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot6"); lcd.setCursor(0,1); lcd.print(valuepot6,DEC); } } oldvaluepot6 = (valuepot6); // enreg la valeur du potar 7 dans une variable if (count==3){ valuepot7 = analogRead (analogIn); if (valuepot7 != oldvaluepot7){ valuepot7 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot7"); lcd.setCursor(0,1); lcd.print(valuepot7,DEC); } } oldvaluepot7 = (valuepot7); // enreg la valeur du potar 8 dans une variable if (count==7){ valuepot8 = analogRead (analogIn); if (valuepot8 != oldvaluepot8){ valuepot8 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot8"); lcd.setCursor(1,1); lcd.print(valuepot8,DEC); } } oldvaluepot8 = (valuepot8); } }
|
|
|
|
|
24
|
Forum 2005-2010 (read only) / Français / Arduino à la Réunion
|
on: December 09, 2010, 12:04:04 pm
|
Salut à tous les Diyers, Je viens de m'installer a la Réunion et je voulais savoir s'il y avait d'autres Diyers sur l'iles pour organiser des WorkGroup chez moi par exemple. Je suis pas caler au point de faire des programmes de fou mais j'ai de très bonne base en Hardware musical et j'aimerai les faire partager donc voila Contact: xarolium@hotmail.comA plus
|
|
|
|
|
29
|
Forum 2005-2010 (read only) / Français / Re: Voir la valeur des entrées analogiques sur LCD
|
on: October 03, 2010, 02:38:36 am
|
|
Merci B@tto pour ton aide , J'ai réussi a faire ce petit programme qui fonctionne en émulation mais je voudrai savoir s'il était possible de simplifié avec un switch ou un Array.
/* Le but du circuit est de lire la valeur d'un des huits potentiometre l'afficheur LCD en passant par un multiplexage analogique des entrées */
// include the library code: #include <LiquidCrystal.h> #include <EEPROM.h>
// initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int analogIn = 0; // valeur de la Pin analogique d'entrée
int valuepot1 = 0; // valeur du potar 1 int valuepot2 = 0; // valeur du potar 2 int oldvaluepot1 = 0; int oldvaluepot2 = 0; int valuepot3 = 0; // valeur du potar 3 int valuepot4 = 0; // valeur du potar 4 int oldvaluepot3 = 0; int oldvaluepot4 = 0; int valuepot5 = 0; // valeur du potar 5 int valuepot6 = 0; // valeur du potar 6 int oldvaluepot5 = 0; int oldvaluepot6 = 0; int valuepot7 = 0; // valeur du potar 7 int valuepot8 = 0; // valeur du potar 8 int oldvaluepot7 = 0; int oldvaluepot8 = 0;
// Initialsé le 4051 avec les pins de sorti
int r0 = 0; //value select pin at the 4051 (s0) int r1 = 0; //value select pin at the 4051 (s1) int r2 = 0; //value select pin at the 4051 (s2) int row = 0; // storeing the bin code int count = 0; // just a count int bin [] = {000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy
void setup() { // set up the LCD's number of rows and columns: lcd.begin(16, 2); // initialise les pins de sorti pour 4051 pinMode(8, OUTPUT); // s0 pinMode(9, OUTPUT); // s1 pinMode(10, OUTPUT); // s2 }
void loop() { //scanner les entrées du 4051 for (count=0; count<=7; count++) { row = bin[count]; r0 = row & 0x01; r1 = (row>>1) & 0x01; r2 = (row>>2) & 0x01; digitalWrite(8, r0); digitalWrite(9, r1); digitalWrite(10, r2); //Serial.println(bin[count]); delay (0); // enreg la valeur du potar 1 dans une variable if (count==0){ valuepot1 = analogRead (analogIn); if (valuepot1 != oldvaluepot1){ valuepot1 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot1"); lcd.setCursor(0,1); lcd.print(valuepot1,DEC); } } oldvaluepot1 = (valuepot1); // enreg la valeur du potar 2 dans une variable if (count==4){ valuepot2 = analogRead (analogIn); if (valuepot2 != oldvaluepot2){ valuepot2 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot2"); lcd.setCursor(0,1); lcd.print(valuepot2,DEC); } } oldvaluepot2 = (valuepot2); // enreg la valeur du potar 3 dans une variable if (count==2){ valuepot3 = analogRead (analogIn); if (valuepot3 != oldvaluepot3){ valuepot3 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot3"); lcd.setCursor(0,1); lcd.print(valuepot3,DEC); } } oldvaluepot3 = (valuepot3); // enreg la valeur du potar 4 dans une variable if (count==6){ valuepot4 = analogRead (analogIn); if (valuepot4 != oldvaluepot4){ valuepot4 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot4"); lcd.setCursor(0,1); lcd.print(valuepot4,DEC); } } oldvaluepot4 = (valuepot4); // enreg la valeur du potar 5 dans une variable if (count==1){ valuepot5 = analogRead (analogIn); if (valuepot5 != oldvaluepot5){ valuepot5 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot5"); lcd.setCursor(0,1); lcd.print(valuepot5,DEC); } } oldvaluepot5 = (valuepot5); // enreg la valeur du potar 6 dans une variable if (count==5){ valuepot6 = analogRead (analogIn); if (valuepot6 != oldvaluepot6){ valuepot6 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot6"); lcd.setCursor(0,1); lcd.print(valuepot6,DEC); } } oldvaluepot6 = (valuepot6); // enreg la valeur du potar 7 dans une variable if (count==3){ valuepot7 = analogRead (analogIn); if (valuepot7 != oldvaluepot7){ valuepot7 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot7"); lcd.setCursor(0,1); lcd.print(valuepot7,DEC); } } oldvaluepot7 = (valuepot7); // enreg la valeur du potar 8 dans une variable if (count==7){ valuepot8 = analogRead (analogIn); if (valuepot8 != oldvaluepot8){ valuepot8 = analogRead (analogIn); lcd.setCursor(0,0); lcd.print("Valeur Pot8"); lcd.setCursor(0,1); lcd.print(valuepot8,DEC); } } oldvaluepot8 = (valuepot8); } }
|
|
|
|
|
30
|
Forum 2005-2010 (read only) / Français / Voir la valeur des entrées analogiques sur LCD
|
on: September 24, 2010, 05:32:55 am
|
Bonjour, Je souhaiterai faire un programmer qui m'indique sur un LCD 16x2 la valeur d'une entrée analogique multiplexer avec un 4051. Le schema est le suivant  en fait j'arrive a afficher la valeur du premier potar mais je voudrai que lorsque j'en bouge un autre le LCD m'affiche le numéro du potar et ca valeur. Voici ou en ai mon code qui fonctionne mais ai loin d'etre complet /* Le but du circuit est de lire la valeur d'un des huits potentiometre sur l'afficheur LCD en passant par un multiplexage analogique des entrées
*/
// include the library code: #include <LiquidCrystal.h> #include <EEPROM.h>
// initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Initialsé le 4051 avec les pins de sorti int AnalogIn = 0; // valeur de la Pin analogique d'entrée byte AnalogInValue1 = 0; // valeur du potar 1 byte AnalogInValue2 = 0; // valeur du potar 2 int oldAnalogInValue = 0; // valeur lu a l'entrée de la Pin int r0 = 0; //value select pin at the 4051 (s0) int r1 = 0; //value select pin at the 4051 (s1) int r2 = 0; //value select pin at the 4051 (s2) int row = 0; // storeing the bin code int count = 0; // just a count int bin [] = {000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy byte val1; // valeur enreg dans l'eeprom du potar 1 byte val2; // valeur enreg dans l'eeprom du potar 2
void setup() { // set le bon LCD lcd.begin(16, 2); // ecrire message sur LCD lcd.print("valeur Pot"); // initialise les pins de sorti pour 4051 pinMode(8, OUTPUT); // s0 pinMode(9, OUTPUT); // s1 pinMode(10, OUTPUT); // s2 }
void loop() { // set the cursor to column 0, line 1 //scanner les entrées du 4051 for (count=0; count<=7; count++) { row = bin[count]; r0 = row & 0x01; r1 = (row>>1) & 0x01; r2 = (row>>2) & 0x01; digitalWrite(8, r0); digitalWrite(9, r1); digitalWrite(10, r2); delay (0); // enreg la valeur du potar 1 dans l'eeprom add 1 if (count == 0){ AnalogInValue1 = analogRead (AnalogIn)/ 4; EEPROM.write (1, AnalogInValue1); val1 = EEPROM.read (1); } // enreg la valeur du potar 2 dans l'eeprom add 2 if (count == 1){ AnalogInValue2 = analogRead (AnalogIn)/ 4; EEPROM.write (2, AnalogInValue2); val2 = EEPROM.read (2); } // mettre le curseur en 2 ligne lcd.setCursor(0, 1); //print vlaeur du potar 1 lcd.print(val1, DEC); } }
merci pour votre aide je sais que le code n'est pas très avancer mais comme je suis un Newbie j'ai encore du mal avec les automatismes de la programmation :-? :-?
|
|
|
|
|