CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Aide programme arduino

Lu--K
Lu--K
Niveau 8
08 mai 2015 à 12:32:15

Bonjour , j'ai aucune idée de comment faire sur l'arduino . Enfaite j'aimerais faire sa "
IF (la broche d9 reçois 5 fois un 1 dessus en moins de 30 seconde )
digitalWrite..."
Alors si vous avez des idée sa serais sympa ;)

kernel[]
kernel[]
Niveau 10
08 mai 2015 à 13:03:23

Utilise la fonction millis() pour faire un timer

Lu--K
Lu--K
Niveau 8
08 mai 2015 à 13:13:05

Je sais je suis chiant mais t'aurais pas un petit exemple car vraiment je comprend pas comment je pourrais faire :snif:

kernel[]
kernel[]
Niveau 10
08 mai 2015 à 13:26:17

uint32_t curr = 0, prev = 0;

/* ... */

void loop() {
	curr = millis();
	if((curr - prev) > 30000) {
		/* Tu entres ici toutes les 30 secondes */
		prev = curr
	}

}

Tu pourrais aussi utiliser les interruptions du timer du microcontroleur.

Après tu modifies un peu le code et ça te permettra de faire ton truc
(tu comptes ce que tu recois, et tu mets le compte à 0 toutes les 30 secondes.. en dehors de ça si le compte est à 5 t'as reçu 5 fois le signal en moins de 30 sec)

JerryDayPonay
JerryDayPonay
Niveau 33
08 mai 2015 à 13:37:37

En pseudo code, il faut ajouter un test pour savoir si le tableau est initialisé (avant les 5 premiers input).

t : Timer;
tab : Tableau[5];
i : Entier = 0;

Boucle principale :
|   Si il y a une entrée sur d9 :
|   |   tab[i] := t.tempsActuel()
|   |   Si t[i] - t[(i+1) % 5] >= 30 secondes :
|   |   |    // Tu fais ce que tu veux
|   |   i := (i+1) % 5

Lu--K
Lu--K
Niveau 8
08 mai 2015 à 13:44:55

Kernel
Le "uint32..." je mets sa dans le setup ?

Puis a la fin jai juste a faire sa dans void a la fin ?
"IF prev=cur
( digitalWrite)"

Sinon Jerry je t'avoue que je galère en arduino alors la j'ai rien compris a ton message désolé

Lu--K
Lu--K
Niveau 8
25 mai 2015 à 14:47:55

Voici le programme


/*macro definitions of magnetic pin and LED pin*/
#define MAGNECTIC_SWITCH 9
#define LED	13//the on board LED of the Arduino or Seeeduino

void setup()
{
 	pinMode(MAGNECTIC_SWITCH, INPUT);
	pinMode(LED,OUTPUT);
}
 
void loop() 
{
	if(isNearMagnet())//if the magnetic switch is near the magnet?
	{
		digitalWrite(LED,HIGH);
	}
	else
	{
		digitalWrite(LED,LOW);
	}
}


/*If the magnetic switch is near the magnet, it will return ture, */
/*otherwise it will return false								*/
boolean isNearMagnet()
{
	int sensorValue = digitalRead(MAGNECTIC_SWITCH);
	if(sensorValue == HIGH)//if the sensor value is HIGH?
	{
		return true;//yes,return ture
	}
	else
	{
		return false;//no,return false
	}
}

Je redemande de l'aide car j'ai essayer plein de chose mais sa marche toujours pas , j'aimerais que quand il a 5 fois un 1 sur la broche 9 ( le magnatic switch) en 30s j'allume la broche 13 alors si vous avez des idée je suis preneur !

moxo75
moxo75
Niveau 6
25 mai 2015 à 16:32:10

Tu pourrais passer par un systeme comme celui ci. Il est à modifier si tu veux que ta led reste allumée


#define MAGNECTIC_SWITCH 9
#define LED 13

int curr = 0, prev = 0, nb = 0;

void setup(){
    pinMode(MAGNECTIC_SWITCH, INPUT);
    pinMode(LED,OUTPUT);
   digitalWrite(LED,LOW);
}

void loop() {
    int sensorValue = digitalRead(MAGNECTIC_SWITCH);
    curr = millis();

    if (sensorValue == HIGH) 
        nb++;
    if (nb == 5)
        digitalWrite(LED,HIGH);
    if((curr - prev) > 30000) {
        nb = 0;
        prev = curr;
    }
}
Lu--K
Lu--K
Niveau 8
25 mai 2015 à 16:46:11

J'ai essayer ton programme et le problème c'est que des que je branche la capteur la led s'allume et ne s’éteint plus

Lu--K
Lu--K
Niveau 8
25 mai 2015 à 17:30:38

C'est bon ton programme marche sauf que en moins d'une seconde nb = 100 donc il faut que je trouve une moyenne pour mettre mon if après . Merci de ton aide !

Tikim
Tikim
Niveau 21
25 mai 2015 à 19:26:03

Non pas une moyenne. Il faut détecter un flanc montant plutôt que juste regarder l'état du switch. Un flanc montant c'est quand une entrée digitale passe de 0 à 1.

Il suffit d'avoir deux variables : une qui représente l'état précédent et une qui représente l'état actuel. Voici en pseudo code ce que ça donne :

Etat actuel = digital read ()
Si état précédent = 0 et état actuel = 1
Alors il y a un flanc montant (donc tu incrémentes nb)

Et finalement état précédent = état actuel.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware