Commande on_for

Salut du Quebec La commande on_for existe-t-elle en arduino. Je m'explique. J'ai un detecteur de mouvement avec un contact sec. Si pas de présence la led verte flash sans arret. si par contre un mouvement est detecté je veux faire clignoter la led rouge pendant 5 minutes meme si le contact du detecteur de mouvement est redevenue a off. La commande on_for en basic est la plus approprié.. mais en arduino, c'est le néant total. Des idées??? Voici mon code (adapté d'une recherche google) car un peu niais en prog arduino.....:

/* Led avec detecteur de mouvement - LA lecture du contact du detecteur de mouvement actionne les deux led - CONNECTIONS: - Contact sec du deteceur de mouvement +5 a borne 3 - Résistance 10k de la borne 3 au ground - LED et resistances 220 ohm en serie avec les bornes 10 et 11 au ground

/-----( Déclaration des constantes et bornes )-----/

define buttonPin 3

define ledPin1 10

define ledPin2 11

void setup() /****** SETUP: roule une fois ******/ { pinMode (ledPin1,OUTPUT) ; // PIN 10 led rouge pinMode (ledPin2, OUTPUT) ; // PIN 11 led verte pinMode (buttonPin, INPUT) ; // PIN 3 est l'entrée du contact sec du detecteur de mouvement }//--(end setup )---

void loop() /****** Boucle: LEd rouge ******/ { if (digitalRead(buttonPin)==HIGH) // Si contact sec detecteur de mouvement a ''on'' { digitalWrite(ledPin1, HIGH) ; // LED rouge on delay(500); // attendre .5 seconde digitalWrite(ledPin1, LOW); // led rouge off delay(100); // attendre .1 secondes

} else /****** Boucle: LEd verte ******/ { digitalWrite(ledPin2, HIGH) ; // Si contact sec du detecteur de mouvement est a off delay(10); // attendre .01 secondes digitalWrite(ledPin2, LOW); // Led verte a off delay(4000); // attendre 4 secondes

} delay(50); // afin d'éviter l'hystérésis }//--(fin du programme )---

on_for ??? dans quel système ? Je ne connais pas cette instruction.

Salut,

XavierMiller:
on_for ??? dans quel système ? Je ne connais pas cette instruction.

quebeclibre:
La commande on_for en basic

En basic visiblement :wink:

Si tu veux faire clignoter pendant 5 minutes, il te suffit d’un while et de millis() :

if(digitalRead(monDetecteur)==LOW) {
time = millis();
while(millis()<(time+(5*60000))) { 
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}
}

Bonjour les copains, Non, je ne crois pas que cette commande relative à Basic fasse partie du langage C. mais ton problème est relatif à un chronométrage, ce n’est pas très compliqué à résoudre, il y a une foule de façon de le traiter. Par exemple : 1) Tu déclares : int Chronometre = 0 ; 2) Dans ta boucle de base tu intègre une instruction du genre : 3) If (Chronometre > 0) {Faire clignoter la rouge} else {faire clignoter la verte} 4) Toujours dans la boucle de base : delay(100) ; Cette instruction te permet de faire clignoter dix fois par seconde. 5) If (Chronometre > 0) Chronometre-- ; Cette instruction sera chargée de décompter ta temporisation. 6) Quand ton détecteur de présence capte un mouvement il force la valeur de la temporisation dans le chronomètre avec une instruction du genre : Chronometre = 3000. (3000 car il faut cinq minutes, soit 300 secondes et on décompte dix fois par seconde environ. Si tu veux de la précision du enlève à cette valeur le temps passé à réaliser les autres instructions de la boucle de base.

Ce n’est qu’un canevas, je n’ai pas testé sur mon arduino.

Je connais bien le BASIC (C64, GWBASIC, QBASIC, VBA), mais n'ai jamais vu on_for, d'où ma question ;)

ce serait pas plutôt du perl ou du python ?

Bonjour,

XavierMiller: ce serait pas plutôt du perl ou du python ?

Perl je ne sais pas. Mais ce n'est pas du python. @+

LUA

on_for()

Lua interface on_state = on_for.X(on_period)

The operator on_for returns true if the X has been ON (or different then 0) for the specified amount of time in seconds.

The operator return false otherwise.

Inputs

Number - on_period:

Period in seconds for which the function must be ON for the function to return true

Outputs

Boolean - on_state:

true if the X has been ON for the specified amount of time.

false otherwise

Usage example:

var("wall_switch","ME.BV1")
  
print(time, "BV1:", wall_switch)
         
if on_for.wall_switch(5) then
        print(time, "The wall switch is ON for at least 5 seconds")   
end

ah voilà !

Merci beaucoup a tous pour vos réponses, je vais voir et vous reviens avec les résultats

Secundo, vraiment désolé de vous avoir induit en erreur avec l'info que on_for est une instruction basic. Je travaille en régulation informatisé avec Delta Controls (produit canadien) qui utilise un hybride fortran comme language. ( meme si Onfor n'est pas une instruction Fortran)

Par exemple pour éviter le cyclage d'un ensemble de compresseurs de réfrigération d'une aréna Onfor est tres utile:

If A_D_COMP1 OnFor 1M Then A_D_COMP4 = Switch ( A_D_COMP4, CO_TEMP_RET_SAUM, 85, 75) End If

Finalement, je vous soumet un lien d'un manuel Fortran de IBM de 1956... Ben drôle que 58 ans plus tard on utilise encore ça...

http://www.fortran.com/FortranForTheIBM704.pdf

Merci a tous encore

quebeclibre: Merci beaucoup a tous pour vos réponses, je vais voir et vous reviens avec les résultats

Secundo, vraiment désolé de vous avoir induit en erreur avec l'info que on_for est une instruction basic. Je travaille en régulation informatisé avec Delta Controls (produit canadien) qui utilise un hybride fortran comme language. ( meme si Onfor n'est pas une instruction Fortran)

Par exemple pour éviter le cyclage d'un ensemble de compresseurs de réfrigération d'une aréna Onfor est tres utile:

If A_D_COMP1 OnFor 1M Then A_D_COMP4 = Switch ( A_D_COMP4, CO_TEMP_RET_SAUM, 85, 75) End If

Finalement, je vous soumet un lien d'un manuel Fortran de IBM de 1956... Ben drôle que 58 ans plus tard on utilise encore ça...

http://www.fortran.com/FortranForTheIBM704.pdf

Merci a tous encore

bonjour en fait si tu veux t'approcher "au mieux" de cette methode , il te faut gerer 2 compteurs par contact (ou un plus etat)

dans la boucle , lire l'etat du contact et si l'etat n'a pas changé incrementer la durée de cet etat.

Fortran , c'est avec ça que j'ai debuté la prog scientifique sur du DEC , il y a déjà ... longtemps , je ne sais meme plus si je saurais encore coder simplement, mais bon je suppose que c'est comme le velo = suffit de remonter dessus pour rouler :grin:

Bonjour,

Artouste: Fortran , c'est avec ça que j'ai debuté la prog scientifique sur du DEC , il y a déjà ... longtemps , je ne sais meme plus si je saurais encore coder simplement, mais bon je suppose que c'est comme le velo = suffit de remonter dessus pour rouler :grin:

Moi c'était un NORSDATA NORKSDATA NORSKDATA :) Bien vu Artouste Je vais me couché

icare: Bonjour,

Artouste: Fortran , c'est avec ça que j'ai debuté la prog scientifique sur du DEC , il y a déjà ... longtemps , je ne sais meme plus si je saurais encore coder simplement, mais bon je suppose que c'est comme le velo = suffit de remonter dessus pour rouler :grin:

Moi c'était un NORSDATA :)

bonjour icare dans ton cas , manquerais pas un K ? :grin:

Bonjour Artouste,

Artouste: bonjour icare dans ton cas , manquerais pas un K ? :grin:

Cela ne s'arrange pas avec l'âge ]:D

icare: Bonjour,

Artouste: Fortran , c'est avec ça que j'ai debuté la prog scientifique sur du DEC , il y a déjà ... longtemps , je ne sais meme plus si je saurais encore coder simplement, mais bon je suppose que c'est comme le velo = suffit de remonter dessus pour rouler :grin:

Moi c'était un NORSDATA NORKSDATA :) Bien vu Artouste

et oui :grin:, mais ton K est mal placé :grin: NORSKDATA 8)

Tiens, ne pourrait-on pas utiliser FORTRAN avec avr-gcc ? Je pense que c'est techniquement réalisable, à condition de faire un mix C/FORTRAN ou de réécrire wiring (et les libs Arduino) en FORTRAN :)

Re salut Et bien en ce qui me concerne le Fortran est très simple a maitriser. goto, not , and ,or.... etc... Je tente, tant bien que mal, a comprendre le language Arduino malgré quelques commandes semblables comme If, else.... malgré que j'ai pas remarqué, en Arduino, l'instruction ''then'' qui normalement, suit ''if'' en Fortran

J'ai pas réussi a faire flasher mes Led comme le suggérait B@tto... Une niaiserie c'est certain, mais faut travailler pour réussir , pas du genre a vouloir tout cuit dans le bec...

quebeclibre,

Le “langage Arduino” est simplement du C++ : passer du FORTRAN au C/C++ devrait être assez simple, il y a énormémént de tutos disponibles, par exemple sur “openclassrooms”.

Merci du tuyau je regarde ça

quebeclibre:
Merci du tuyau
je regarde ça

bonjour
Le plus “difficile” est de s’abstraire des automatismes de redaction issues d’un autre langage souvent pratiqué depuis longtemps.
Mais les reflexes nouveaux automatismes viennent eux aussi, vite.
Quand tu en est au debut à 50 compils foireuses parce que tu a oublié cette sal&%µr#e de point-virgule* à la fin, tu t’adapte vite :grin: