[Programmation] Translation BASIC-language Arduino

Bonjour à tous.
Je me suis lancé dans un projet d'allumage automatique d'une lumière lors d'un passage.
Je gère bien niveau électronique mais pas trop niveau programmation.
Quelqu'un ma fourni un code. Le problème, c'est qu'il est écrit en BASIC pour un microcontrôleurs picaxe.
Mais j'aimerais utiliser une Arduino Uno. Je doit donc traduire le programme en "langage Arduino".
Pouvez-vous m'aider à le traduire?

Code:

#picaxe 08M2
symbol eclairage=C.1 ;broche sortie lumière
symbol LDR=C.2 ;broche capteur LDR
symbol lumiere=b1 ;variable lumière
symbol compt=w13 ;compteur
symbol seuilhaut=120 ;à ajuster suivant LDR
symbol seuilbas=100 ;idem

setint OR %11000,%11000 ;interruption sur C.3 ou C.4 niveau haut

Do ;boucle principale
readadc LDR, lumiere
if compt >0 then
if lumiere < seuilbas then
high eclairage ;on allume
elseif lumiere > seuilhaut then
low eclairage ;on éteint
endif
else
low eclairage ; Personne ? on éteint
endif
loop

interrupt:
if pinC.3=1 then ;passage dans le sens entée
do loop while pinC.3=1
if pinC.4 = 1 then
inc compt ;on incrémente
endif
elseif pinC.4 =1 then
do loop while pinC.4=1
If pinC.3 = 1 then
dec compt ;sinon ,c'est le contraire
endif
endif
if compt >= 65534 then ;des fois qu'on sorte avant d'entrer
compt=0 ;ou alarme "C'EST PLEIN !"
endif
do loop while pins > 7 ;cçd si C.3 ou C.4 =1
setint OR %11000,%11000
return

Bonjour

Le "langage arduino" c'est du C++ standard.
Si tu veux utiliser Arduino, il te faut commencer par apprendre ce langage de programmation. Tu trouveras plein de ressources sur le net pour cela.

Les instructions ci-dessus sont très basiques. Leur déclinaison en C++ est tout à fait accessible à un niveau débutant.

bonjour,
le code arduino n'est pas compliqué a faire pour ton projet
mais il manque des trucs dans ton code qui doit se mettre entre balise code </> (soit dit en passant)

tu as la partie ldr et la partie compteur d'entrée sortie

Bonjour,

je pense, moi aussi, qu'un projet simple (comme celui-là) est un bon support pour se former.
je crois qu'il est préférable de créer son propre programme (même imparfait) plutôt que recopier (ou adapter) le programme d'un autre.

Pour quelqu'un qui connaît l'électronique, il est facile de simuler les entrées-sorties avec des inters ou des Leds, et de sortir les valeurs intermédiaires sur le terminal série.

je pense que ce projet est un bon support pour mettre un pied dans l'environnement Arduino ..... et d'y prendre le virus !

A propos de Picaxe , je crois que c'est un langage interprété donc nettement moins rapide qu'un langage compilé.
Cela à peut-être incité à utiliser une interruption qui ne serait plus nécessaire avec Arduino.

Donc un programme plus simple à concevoir ....

Serge .D

Bonjour,

aligote:
Cela à peut-être incité à utiliser une interruption qui ne serait plus nécessaire avec Arduino.

Je dirais qu'a priori l'interruption est toujours nécessaire. En revanche, on peut attacher une interruption différente pour chacune des deux broches, donc plus besoin de tester quelle broche a généré cette interruption, ce qui rendrait le programme plus simple.

Je sais presque compent faire ce programme.
Il me manque une seul chose. C'est pour la partie du passage.
Il faut que ça fasse la chose suivante:

Si le capteur 1 est HIGH;
Attendre que le capteur 1 et 2 soit HIGH;
Atendre que le capteur 2 soit HIGH;
Ajouter 1 à la variable compteur;

Mais comment faire?

Si tu branches le capteur 1 sur une interruption en mode "RISING", tu sais que lorsque cette interruption est déclenchée, ton capteur 1 est à HIGH. Tu n'as donc pas besoin de faire ce test.
Il te suffit donc alors de tester le capteur 2 dans cette interruption.

Et ça donne quoi, parceque j'ai pas très bien compris?

Tu as la référence de la fonction attachInterrupt ici:
https://www.arduino.cc/en/Reference/AttachInterrupt

Je suis désolé mais je n'ai toujours pas compris...

il y a bcx-basic, qui permet de transformer une programme basic ou C.
Mais le soucis c'est que çà sera des données brute, donc forcement quelques ligne a reecrire.

Nathanmart95:
Je suis désolé mais je n'ai toujours pas compris...

OK, je viens de relire ton premier message, je vois que ce n'est pas toi qui a écrit le code en Basic.
Du coup, est-ce que tu sais ce qu'est une interruption ?

Non ,je ne sait pas.

Il faudrait que tu creuses un peu le sujet dans ce cas. Mais si tu veux juste un code qui fonctionne sans trop comprendre comment ça marche, je ne peux pas t'aider.

Bah si,je veut comprendre.

Nathanmart95:
Je me suis lancé dans un projet d'allumage automatique d'une lumière lors d'un passage.

Bonjour,

Le projet parait simple. Pourquoi est ce que tu t'emme t'embêtes à essayer de traduire un programme en basic (qui plus est pour une autre plateforme) pour créer un programme bancal alors qui suffit de bien poser le problème pour écrire directement le programme en C++ pour arduino.
En général le problème n'est pas tant la traduction basic -> C++, mais plutôt le portage d'une plateforme à une autre.

Nathanmart95:
Bah si,je veut comprendre.

Dans ce cas, il faut que tu creuses un peu le principe des interruptions sur un micro-contrôleur. Je suis sûr que tu trouveras plein de sites Internet expliquant très bien ça.

const byte boutonUn = 2 ;
const byte boutonDeux = 3 ;
int compteur = 0 ;

void setup (){

pinMode(boutonUn,INPUT_PULLUP) ;
pinMode(boutonDeux,INPUT_PULLUP);

attachInterrupt(digitalPinToInterrupt(boutonUn ),Ajout,RISING*);
attachInterruot ( digitalPinToInterrupt ( boutonDeux) , Retrait, RISING);
}
void loop(){}

void Ajout (){
attachInterrupt ( digitalPinToInterrupt ( boutonDeux), AjoutDeux, RISING);
}
void Retrait(){

attachInterrupt(digitalPinToInterrupt(boutonUn),RetraitDeux, RISING);
}

void AjoutDeux(){
compteur++;
}
void RetraitDeux(){
compteur--;
}

Esce que vous pouvez m'aider?
Ce code ne fonctionne pas, et je ne voit pas comment faire...

hello
charges ça et ouvres ton moniteur en 9600 bauds

const byte boutonUn = 2 ;//si appui, BP doit faire contact avec GND
const byte boutonDeux = 3 ;//si appui, BP doit faire contact avec GND
int compteur = 0 ;
boolean flag_irs=false;

void setup () {
 Serial.begin(9600);
  pinMode(boutonUn, INPUT_PULLUP) ;
  pinMode(boutonDeux, INPUT_PULLUP);

  attachInterrupt(boutonUn ,   Ajout,   FALLING);//falling car le contact sera avec GND
  attachInterrupt(boutonDeux , Retrait, FALLING);//falling car le contact sera avec GND
}
void loop() {
  if(flag_isr=true){
  Serial.println(compteur);
  flag_irs=false;
}}

void Ajout () {
  compteur++;flag_irs=true;
}
void Retrait() {

  compteur--;flag_irs=true;
}