je suis en train d'essayer de piloter ma télécommande de portail avec un arduino
en effet, lorsque l'on est en moto, enlever les gants puis chercher la télécommande dans une de ses poches est une galère quotidienne
je me suis dit qu'il y avait des systèmes (onéreux) qui existaient pour les voitures donc pourquoi ne pas adapter pour les motos
un premier appel de phare, on ouvre le portail, un second appel de phare, on ouvre le garage.....
en pj le fonctionnement je souhaiterai avoir ainsi que le code que j'ai commencé, mais maintenant, je suis bloqué :
lorsque j'appui sur mon bp, je passe d'une sortie a l'autre par contre, je ne sais pas remettre mon compteur a zéro
bonjour,
il y a longtemps... tres longtemps, dans un elektor ou un radioplan, il y avait un montage du type:
modulation de l'ampoule de phare d'une voiture ( , de l'autre cote on recupere le signal via un dispositif(ldr? photodiode? ) je ne me souviens plus et ca marchais.
je pense que ca doit etre faisable..
un uno, un mosfeet de puissance , l'ampoule de ta moto..
en face photodiode, uno relais et hoopp!!
en fait, je veux faire plus simple : quand je fais un appel de phare, j'alimente un relais, je recupére le contact sec de celui ci pour l'envoyer sur une entrée de l'arduino
c'est ce signal que je compte
Je viens d'essayer de comprendre ton image mais c'est vraiment pas clair, je pense que c'est aussi pour ça que tu coup tu ne t'en sors pas avec ton code
en m'inspirant (voir même plus), j'ai réussi a adapter les infos du tuto a mon projet
lorsque l'on appui la première fois sur le bp, on active la sortie 11, si on appui a nouveau avant 3s on active la sortie 10 sinon on revient en étape initiale, ........jusqu'à la quatrième sortie
je pourrai me contenter de ce fonctionnement mais je vais essayer encore de modifier
le fonctionnement souhaité :
on démarre un timer de 3 secondes et pendant ces 3 secondes on compte le nombre de fois que l'on appui sur le bouton poussoir
a la fin des 3 secondes on fait le bilan
1 appui = sortie 11
2 appuis = sortie 12
3 appuis = sortie 9
4 appuis = sortie 8
la sortie devra rester activé 2 secondes puis on revient a l'étape initiale
si quelqu'un peut m'aider sur la bibliothèque a utiliser
Alors pour reprendre ton fonctionnement voulu avec YASM, ça pourrait donner ça :
/*
Essai avec YASM pour willyf6 sur le forum arduino
Le montage :
* un bouton poussoir connecté entre la broche 2 et le GND
*/
// Les constantes ne changent pas durant le programme.
// Utilisée ici pour définir la numéro de la broche :
const int BOUTON_PIN = 2; // crée un identifiant pour la broche utilisée avec le bouton poussoir
const int LED_PINS[4] = {13, 12, 6, 4}; // tableau pour les numéros des broches de sorties
//librairie yasm à installer depuis le gestionnaire de librairie de l'IDE arduino :
//croquis->inclure une bibliotheque->gérer les bibliothèques chercher "yasm" et cliquer sur installer
#include <yasm.h>
YASM telecommande; //la machine à états que l'on va utiliser
#include <btn.h>
BTN bouton; //la classe BTN : un outil pratique pour gérer le bouton
//les délais employés :
const unsigned long DELAI_ATTENTE_ORDRE=5*1000; //5*1000ms = 5s
const unsigned long DELAI_ACTIVE_SORTIE=2*1000; // 2s
byte choixOrdre;
void setup()
{
// met la broche du bouton en entrée
pinMode(BOUTON_PIN, INPUT_PULLUP);
// met toutes les broches des leds en sortie :
for(byte i=0;i<3;i++) {
pinMode(LED_PINS[i], OUTPUT);
}
//donne l'état initial de la machine à états
telecommande.next(attente);
// initialise la communication série
// Attention : utiliser la meme vitesse de communication pour le Terminal Série
Serial.begin(115200); //pourquoi aller lentement ??
Serial.println(F("prêt"));
}
void loop()
{
// lit l'état actuel du bouton poussoir et le mémorise dans la variable
bouton.update( ! digitalRead(BOUTON_PIN) ); // on utilise ! car le bouton fait contact au GND donc il faut inverser l'état réel (actif LOW)
// execute la machine à états
telecommande.run();
}
void ledsOff()
{
// met toutes les broches des leds à LOW :
for(byte i=0;i<3;i++) {
digitalWrite(LED_PINS[i], LOW);
}
}
////////////////machine à états "telecommande" ////////////////////
void attente()
{
if( telecommande.isFirstRun()) bouton.state(); //juste pour vider le buffer du bouton au cas où
if( bouton.state(BTN_LONGCLICK) ) {
telecommande.next(compteur);
Serial.println(F("appui long détecté : passage au comptage"));
}
}
void compteur()
{
if( telecommande.isFirstRun()) {
bouton.state(); //juste pour vider le buffer du bouton au cas où
choixOrdre=0; //et RAZ du compteur au cas où déja utilisé
}
//on compte les appuis sur le bouton
if( bouton.state(BTN_CLICK) ) {
choixOrdre++;
Serial.print(choixOrdre);
Serial.println(F(" appui(s) détecté(s)"));
}
//au bout du delai on passe à la suite
if( telecommande.elapsed(DELAI_ATTENTE_ORDRE) ) telecommande.next(decode);
}
void decode()
{
if( telecommande.isFirstRun() ) {
Serial.print(F("décodage : "));
//on active la sortie correspondante
switch (choixOrdre) {
case 1 :
digitalWrite(LED_PINS[0],HIGH);
Serial.println(F("allumage led 1"));
break;
case 2 :
digitalWrite(LED_PINS[1],HIGH);
Serial.println(F("allumage led 2"));
break;
case 3 :
digitalWrite(LED_PINS[2],HIGH);
Serial.println(F("allumage led 3"));
break;
case 4 :
digitalWrite(LED_PINS[3],HIGH);
Serial.println(F("allumage led 4"));
break;
default :
//sauf dans le cas où on n'a ps eu d'ordre valide où on retourne au début immédiatement (si 0 ou >4)
telecommande.next(attente);
Serial.println(F("erreur, retour en attente"));
}
}
//au bout du delai on désactive et on revient au début
if( telecommande.elapsed(DELAI_ACTIVE_SORTIE) ) {
ledsOff();
telecommande.next(attente);
Serial.println(F("fin d'activation, retour en attente"));
}
}
ici on a : appui long (>700ms) sur le bouton pour démarrer le compteur
puis on compte les appuis simples et on agit en conséquence
ça devrait fonctionner (testé avec juste un fil en lieu de place du bouton, pas idéal, du coup j'ai mis 5s de délai et non 3 sinon j'y arrivais pas)
pour faire clignoter la led sur pin 13 pour indiquer que tu es en mode "comptage des appuis" ça peut être utile sur montage réel sans sortie sur port série
j'ai parlé de la pin 13 car sur beaucoup de cartes (uno, mega...) il y a déjà une led sur cette pin.
Mais elle peut-être connecté n'importe où. Si j'ai bien compris tu as deux télécommandes à activer, ça fait donc deux sorties sur les 4 actuellement utilisées, il va rester plein de possibilités