Pages: [1] 2   Go Down
Author Topic: Fonction + boucle , dur dur ..  (Read 1820 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Je viens de finir ma maquette de feu tricolore mais j'aurais besoin d'aide pour la programmation.
Je pense que le language arduino est trop simple, je n'arrive pas à faire ce que je veux.

Je voudrais faire une fonction qui modifie les 1 en HIGH et les 0 en LOW et qui me fasse :

allume_del (a,b,c,d,e,f,g)
{

[une autre fonction qui modifie les a,b,c,d... en HIGH ou LOW ( là aussi en boucle pour pas se taper x fois if a=1 a=HIGH; if b=1 ...]

  digitalWrite(R1, a);
  digitalWrite(O1, b);
  digitalWrite(V1, c);
...
}

comme ça je peux faire mes séries d'allumage en appelant la fonction :
allume_del(1,0,0,0,0,1);
delay(1000);
et mettre ceci plusieurs fois en modifiant les 0 et 1...

Je sais le faire en php mais je n'arrive même pas à faire ma propre fonction sur arduino pourtant c'est pas faute d'avoir chiner des exemples.

Je vous remercie smiley

« Last Edit: June 04, 2010, 12:57:58 pm by nestea57 » Logged

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

Salut,
je commence en arduino et le C++ est lointain.
donc la syntaxe exacte...

tu passes un tableau en parametre de allume_del

tu déclares un tableau de tableaux.

tu fais un
for(i=0;i<taille(tableau_de_tableaux);i++) {
  allume_del(tableau_de_tableaux);
}

y a d'autres solutions possibles smiley-wink
j'espere que ça t'aide un peu.

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci mais ce que tu m'as mis c'est pour faire varier tout seul les 0 et les 1 or c'est le seul truc que je veux garder sous mon contrôle. ( les 4 feux verts ne doivent pas s'allumer en même temps. )

Je vais tenter en C ou C++, peut on mettre du code C/C++ comme ça ? avec le language arduino ou il faut déclarer quelque chose ? et je peux utiliser les variables définis avec arduino dans du langage C ?
« Last Edit: June 05, 2010, 01:47:32 am by nestea57 » Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Le langage Arduino, c'est du C++ avec seulement un main simplifié et des #include implicites.

Donc oui tu peux faire des classes C++ à côté (onglets) et les importer dans ton sketch (.pde) Arduino :

Code:
#include "feu.h"

Feu fa, fb, fc, fd, fe;

void loop()
{
  if (fa.estVert() && fb.estRouge())
{
   fa.passeAuRouge();
   fb.passeVert();
   // etc...
}
}

« Last Edit: June 05, 2010, 03:09:34 am by julien@pobot.org » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oula pas tout compris mais j'ai avancé, j'ai fait ma fonction mais je n'arrive toujours pas à faire un truc simple.
a prendra la valeur de 0 ou 1 lorsque j'appelle la fonction.
Ensuite, en fonction de sa valeur, je la modifie par HIGH ou LOW et donc ensuite je met à 5 ou 0V.

  char a = 1;
  if (a==1) a="HIGH" else a="LOW";
  digitalWrite(rouge, a); // Donc si a=1 la sortie rouge sera à 5V sinon à 0V

Il me dit : error: invalid conversion from 'const char*' to 'char

En fait c'est beaucoup plus dur que je ne le pensais, le php/mysql c'est beaucoup plus simple.
« Last Edit: June 05, 2010, 11:40:21 am by nestea57 » Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu veux faire quoi avec tes HIGH et tes LOW ?
Commander une sortie numérique ?
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Je pense que le language arduino est trop simple,...

Oui mais il faut déjà le maitriser.
« Last Edit: June 05, 2010, 01:18:18 pm by julien@pobot.org » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je m'étais mal exprimé, je pense surtout qu'il faut le comprendre, il fonctionne vraiment pas pareil que les langages comme ceux que je connais.

Alors oui je veux commander des sorties numériques, j'ai déjà tout fait il me reste qu'à régler le problème de la fonction.
Je cherche toujours sur google comment faire :

si a=1 alors mettre a = HIGH sinon mettre a=LOW
et mettre digitalWrite(rouge, a);

Donc une variable "a" en chaine de caractère et inclure ce qu'elle contient dans digitalWrite.
« Last Edit: June 05, 2010, 01:24:14 pm by nestea57 » Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ici :

http://arduino.cc/fr/Main/DigitalWrite

Quote
Syntaxe

digitalWrite(broche, valeur)

Paramètres

    * broche: le numéro de la broche de la carte Arduino
    * valeur : HIGH ou LOW (ou bien 1 ou 0)

Casse toi pas la tête à convertir, mets ta pin numérique à 1 ou 0, ça fera la même chose que si tu la mets à HIGH ou LOW.
« Last Edit: June 05, 2010, 01:29:45 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wa je te remercie ! Pourtant je l'avais vu je ne sais combien de fois la page là !
Merci d'avoir résolu mon problème smiley mais il faut persévérer en programmation donc je tenterais quand même de trouver comment faire un changement comme ça.
Bon bah mon système de feux tricolores avance smiley
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-wink
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

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

Le truc surtout c'est que HIGH et LOW sont des constantes de type entier qui valent 1 et 0.

Php est bien sympa de convertir les constantes qu'il ne connait pas en chaine de caractères mais ça ne veut pas dire qu'il faut coder de cette façon.
Je serais toi je rajouterais la ligne error_reporting(E_ALL); au début de tes scripts, tu aurais de mauvaises surprises mais ça devrait éclaircir pas mal de bizarreries.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui mais j'ai toujours eu l'habitude de coder avec php, pas besoin de définir le type de la variable, on peut mettre ce que l'on veut dedans ... les int, char etc... c'est pour la base de donnée.
J'ai rarement utilisé error_reporting(E_ALL);...
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Essaie un truc comme ça, mais ça mettra tes valeurs à 1 ou 0 , tu n'arriveras pas à faire imprimer "HIGH" ou "LOW".

Code:
int test = 2;
boolean essai = false;

void setup(){
Serial.begin(9600);
}

void loop(){
  
  Serial.print ("test = ");
  Serial.println (boolean(test),BIN);   // boolean(test)   convertit "test" en booleen
  
  Serial.print ("essai = ");
  Serial.println (essai,BIN);
  
  test= !test;
  essai=!essai;
  
  delay(600);
  
}
« Last Edit: June 05, 2010, 03:04:42 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

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

Après faut voir ce qu'on veut faire. Je verrais plutôt un
Code:

int etat = 0 ;

loop()
{
switch( etat )
{
case 0 :
// On allume le feu vert
digitalWrite( pin_vert  , HIGH ); // identique à digitalWrite( pin_vert  , 1 );
digitalWrite( pin_orange  , LOW );
digitalWrite( pin_rouge  , LOW );
delay( 6000 );
etat++;
break ;
case 1 :
digitalWrite( pin_vert  , LOW );
digitalWrite( pin_orange  , HIGH );
digitalWrite( pin_rouge  , LOW );
delay(1500);
etat++;
break ;
case 2 :
digitalWrite( pin_vert  , LOW );
digitalWrite( pin_orange  , LOW );
digitalWrite( pin_rouge  , HIGH );
delay(4500);
etat = 0 ;
break ;
}

}


« Last Edit: June 05, 2010, 03:35:49 pm by Franxoois » Logged

Pages: [1] 2   Go Up
Jump to: