Fonction de retard arduino, et pourquoi vous ne devriez pas l`utiliser

Quand vous avez commencé apprendre à développer

pour l`Arduino, vous avez probablement construit un produit qui fonctionne un peu comme ceci:Mise en route avec Arduino: Guide du débutantMise en route avec Arduino: Guide du débutantArduino est une plate-forme de prototypage électronique open source basée sur flexible, facile à utiliser du matériel et des logiciels. Il est destiné aux artistes, designers, amateurs, et toute personne intéressée par la création d`objets interactifs ou des environnements.Lire la suite

Connecté à votre Arduino serait une seule lumière LED. Cela tournerait toutes les secondes environ, et continuera jusqu`à ce que l`Arduino est éteint. Voici le programme « Bonjour tout le monde » d`Arduino, et illustre parfaitement la façon dont seulement quelques lignes de code peuvent créer quelque chose de tangible.

arduino dirigé par

Je suis également prêt à parier utilisé le retard() fonction de définir les intervalles entre la lumière pour allumer et éteindre. Mais voici la chose: tout retard est à portée de main pour des démonstrations de base de la façon dont fonctionne Arduino, vous devriez vraiment pas l`utiliser dans le monde réel. Voici pourquoi - et ce que vous devez utiliser à la place.

Comment retard () Travaux

La façon dont le retard() fonction fonctionne est assez simple. Il accepte seul entier (Ou nombre) argument. Ce nombre représente le temps (mesuré en millisecondes), le programme doit attendre de passer à la ligne de code suivante.Les bases de programmation informatique 101 - Variables et types de donnéesLes bases de programmation informatique 101 - Variables et types de donnéesAprès avoir présenté et a parlé un peu de la programmation orientée objet avant et où son homonyme vient, je pensais qu`il est temps de passer par les bases absolues de la programmation d`une manière spécifique non linguistique. Ce...Lire la suite

Mais le problème est, la retard() fonction n`est pas une bonne façon de rendre votre programme d`attente, car il est ce qu`on appelle une fonction « blocage ».

La différence entre le blocage et les fonctions non bloquante

Pour illustrer pourquoi les fonctions de blocage sont mauvaises, je veux que vous imaginer deux chefs différents dans une cuisine: Henry Blocking, et Eduardo non bloquante. Les deux font le même travail, mais de façon très différentes.

Quand Henry fait le petit déjeuner, il commence par mettre deux tours de pain dans le grille-pain. Quand il a finalement pings, et le pain éjecte brun doré, Henry le met sur une plaque et des fissures deux œufs dans une poêle à frire. Encore une fois, il se tient en tant que l`huile apparaît, et les blancs commencent à durcir. Quand ils ont fini, il assiettes les et commence à faire frire deux tranches de bacon. Une fois qu`ils sont assez croustillants, il les enlève la poêle, les met sur la plaque et commence à manger.

arduino-Chef

Eduardo fonctionne d`une manière légèrement différente. Alors que son pain est grillage, il a déjà commencé à faire frire ses œufs et du bacon. Au lieu d`attendre un élément pour terminer la cuisson avant de passer à un autre, il vous cuisez plusieurs articles en même temps. Le résultat final est Eduardo prend moins de temps pour faire le petit déjeuner que Henry fait - et au moment où Henry bloqueuse a fini, les toasts et les œufs sont allés froid.

C`est une analogie stupide, mais il illustre le point.

Blocage fonctions empêchent un programme de faire quoi que ce soit d`autre jusqu`à cette tâche particulière est terminée. Si vous souhaitez que plusieurs actes se produire en même temps, vous ne pouvez pas utiliser retard().

En particulier, si votre application vous oblige à acquérir constamment des données à partir de capteurs attachés, vous devez prendre soin d`éviter d`utiliser la retard() fonction, comme il fait une pause absolument tout.

Heureusement, retard() n`est pas la seule façon de rendre votre attente de programme lors du codage pour Arduino.

Rencontrez Millis ()

le Millis () fonction exécute une seule tâche. Lorsqu`elle est appelée, elle retourne (comme longue datatype) le nombre de millisecondes qui se sont écoulées depuis son lancement le programme. Alors, pourquoi est-ce utile?

Parce qu`en utilisant un peu de mathématiques simples, vous pouvez facilement les aspects « temps » de votre programme sans impact sur la façon dont cela fonctionne. Ce qui suit est une démonstration de base de la façon dont Millis () fonctionne. Comme vous le verrez, la volonté du programme allume la lumière LED pendant 1000 millisecondes (une seconde), puis se enlever. Mais surtout, il le fait d`une manière qui est non-blocage.

Maintenant, regardons comment cela fonctionne avec Arduino.

arduino-Millis-exemple

Ce programme - qui est fortement basé sur un de la documentation officielle Arduino - fonctionne en soustrayant le temps enregistré précédent de l`heure actuelle. Si le reste (ie. Le temps écoulé depuis la dernière fois enregistré) est supérieure à l`intervalle (dans ce cas, 1000 millisecondes), le programme met à jour la PreviousTime variable à l`heure, et soit fait tourner la LED allumée ou éteinte.

Video: "YOU WON'T BELIEVE YOUR EYES!" - Smarter Every Day 142

Et parce qu`il est un non-blocage, tout code qui est situé à l`extérieur de cette première instruction if devrait fonctionner normalement.

Simple, non? Notez que nous avons créé la variable heure actuelle comme non signé longue. Un non signé valeur signifie simplement qu`il ne peut jamais être négative- nous le faisons pour que le nombre maximum que nous pouvons stocker est plus grande. Par défaut, les variables numériques sont signés, ce qui signifie un « bit » de la mémoire pour cette variable est utilisée pour stocker si la valeur est positive ou négative. En nous avons un peu plus spécifiant sera seulement positif, jouer avec.

interruptions

Jusqu`à présent, nous avons appris sur une façon d`aborder le calendrier dans notre programme Arduino qui est mieux que retard(). Mais il y a une autre, beaucoup mieux, mais plus complexe: interruptions. Ceux-ci ont l`avantage de vous permettre de chronométrer précisément votre programme Arduino et de répondre rapidement à une entrée externe, mais dans un asynchrone manière.

Cela signifie qu`il fonctionne conjointement avec le programme principal, constamment en attente d`un événement de se produire, sans interrompre le flux de votre code. Cela vous aide à répondre efficacement aux événements, sans impact sur les performances du processeur Arduino.

Quand une alarme est déclenchée, il arrête soit le programme, ou appelle une fonction, communément connu sous le nom gestionnaire d`interruption ou Interruption de service de routine. Une fois que cela a été conclu, le programme va ensuite revenir à ce qu`elle allait.

La puce AVR alimenter l`Arduino ne supporte que les interruptions matérielles. Ceux-ci se produisent lorsqu`une broche d`entrée va de haut en bas, ou lorsqu`il est déclenché par les minuteries intégrées de l`Arduino.

Il semble cryptique. Confondre, même. Mais ce n`est pas. Pour voir comment ils fonctionnent, et voir quelques exemples d`entre eux étant utilisés dans le monde réel, appuyez sur la documentation Arduino.

Ne pas se boucher

En utilisant Millis () prend certes un peu de travail supplémentaire par rapport à l`utilisation retard(). Mais croyez-moi, vos programmes vous remercier, et vous ne pouvez pas multi-tâches sur l`Arduino sans elle.

Video: Arduino IDE

Si vous voulez voir un exemple de Millis () utilisé dans un monde réel projet Arduino, consultez Arduino Night James Bruce Lumière et l`alarme Sunrise.Arduino Night Light et Sunrise Projet d`alarmeArduino Night Light et Sunrise Projet d`alarmeAujourd`hui, nous allons faire un réveil au lever du soleil, qui doucement et lentement vous réveiller sans avoir recours à une machine à faire du bruit offensif.Lire la suite

Trouvé toutes les autres fonctions de blocage, nous devrions nous méfier de? Faites-moi savoir dans les commentaires ci-dessous, et nous causerons.

Crédits photo: Arduino (Daniel Spiess), Chef (Ollie Svenson)

Articles connexes