Syntaxe Arduino. Langages de programmation

Introduction

Freeduino/Arduino est programmé dans un langage de programmation spécial - il est basé sur C/C++ et vous permet d'utiliser n'importe laquelle de ses fonctions. À proprement parler, il n'y a pas de langage Arduino séparé, tout comme il n'y a pas de compilateur Arduino - les programmes écrits sont convertis (avec des modifications minimes) en un programme C / C ++, puis compilés par le compilateur AVR-GCC. Donc en fait, une variante C/C++ spécialisée pour les microcontrôleurs AVR est utilisée.

La différence est que vous obtenez un environnement de développement simple et un ensemble de bibliothèques de base qui facilitent l'accès aux périphériques "à bord" du microcontrôleur.

D'accord, il est très pratique de commencer à travailler avec un port série à une vitesse de 9600 bits par seconde, en passant un appel sur une seule ligne :

Série.begin(9600);

Et lors de l'utilisation de C / C ++ "nu", vous devrez vous occuper de la documentation du microcontrôleur et appeler quelque chose comme ceci :

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8 ;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Voici un bref aperçu des principales fonctions et caractéristiques Programmation Arduino. Si vous n'êtes pas familier avec la syntaxe des langages C/C++, nous vous conseillons de vous référer à toute littérature sur ce sujet, ou à des sources Internet.

D'autre part, tous les exemples présentés sont très simples et vous n'aurez probablement aucune difficulté à comprendre les textes sources et à écrire vos propres programmes même sans lire de littérature supplémentaire.

Documentation plus complète langue Anglaise) est présenté sur le site officiel du projet - http://www.arduino.cc. Il y a aussi un forum, des liens vers des bibliothèques supplémentaires et leur description.

Par analogie avec la description sur le site officiel du projet Arduino, le "port" désigne le contact du microcontrôleur, sortie vers le connecteur sous le numéro correspondant. De plus, il existe un port de données série (port COM).

Structure du programme

Dans votre programme, vous devez déclarer deux fonctions principales: setup() et loop().

La fonction setup() est appelée une fois, après chaque mise sous tension ou réinitialisation de la carte Freeduino. Utilisez-le pour initialiser des variables, définir des modes de port numérique, etc.

La fonction loop() exécute séquentiellement les commandes décrites dans son corps encore et encore. Ceux. une fois la fonction terminée, elle sera appelée à nouveau.

Prenons un exemple simple :

void setup() // paramètres initiaux
{
beginSerial(9600); // définit la vitesse du port série à 9600 bps
pinMode(3, ENTRÉE); // définition du 3e port pour l'entrée de données
}

// Le programme vérifie si le 3e port contient un signal et envoie une réponse à
// sous forme de message texte sur le port série de l'ordinateur
void loop() // corps du programme
{
if (digitalRead(3) == HIGH) // condition pour l'interrogation du port 3
sérieEcrit("H"); // envoie un message sous la forme de la lettre "H" au port COM
autre
sérieEcrit("L"); // envoie un message sous la forme de la lettre "L" au port COM
retard(1000); // retarder 1 sec.
}

pinMode(port,mode);

La description:

Configure le port spécifié pour entrer ou sortir un signal.

Option :

port – numéro du port dont vous souhaitez définir le mode (valeur entière de 0 à 13).

mode - soit INPUT (entrée) ou OUTPUT (sortie).

pinMode(13, SORTIE); // La 13ème broche sera la sortie
pinMode(12, ENTRÉE); //et le 12 est l'entrée

Noter:

Les entrées analogiques peuvent être utilisées comme entrées/sorties numériques lorsqu'elles sont accessibles par les numéros 14 (entrée analogique 0) à 19 (entrée analogique 5)

digitalWrite(port, valeur);

La description:

Règle le niveau de tension sur haut (HIGH) ou bas (LOW) sur le port spécifié.

Option :

port : numéro de port

valeur : ÉLEVÉE ou BASSE

digitalWrite(13, ÉLEVÉ); // met la broche 13 à l'état "haut"

valeur = digitalRead(port);

La description:

Lit une valeur sur le port spécifié

Option :

port : numéro de port interrogé

Valeur de retour : renvoie la valeur actuelle sur le port (HIGH ou LOW) de type int

valeur entière ;
val = lecturenumérique(12); // interroge la 12ème sortie

Noter:

Si rien n'est connecté au port de lecture, la fonction digitalRead() peut renvoyer aléatoirement HIGH ou LOW.

Signal d'entrée/sortie analogique

valeur = analogRead(port);

La description:

Lit une valeur à partir du port analogique spécifié. Le Freeduino contient 6 canaux, chacun des convertisseurs A/N 10 bits. Cela signifie qu'une tension d'entrée de 0 à 5V est convertie en une valeur entière de 0 à 1023. La résolution de lecture est de : 5V/1024 valeurs = 0,004883V/valeur (4,883mV). Il faut environ 100 nS (0,0001 S) pour lire la valeur d'entrée analogique, de sorte que le taux de lecture maximum est d'environ 10 000 fois par seconde.

Option :

Valeur de retour : renvoie un entier compris entre 0 et 1023, lu à partir du port spécifié.

valeur entière ;
val = analogRead(0); // lecture de la valeur à l'entrée analogique 0

Noter:

Les ports analogiques sont des entrées de signal définies par défaut et, contrairement aux ports numériques, ils n'ont pas besoin d'être configurés en appelant la fonction pinMode.

analogWrite(port, valeur);

La description:

Envoie une valeur analogique au port. Cette fonctionnalité fonctionne sur : 3, 5, 6, 9, 10 et 11 ports numériques Freeduino.

Il peut être utilisé pour modifier la luminosité de la LED, pour contrôler le moteur, etc. Après l'appel de la fonction analogWrite, le port correspondant fonctionnera en mode de tension modulée en largeur d'impulsion jusqu'au prochain appel à la fonction analogWrite (ou aux fonctions digitalRead / digitalWrite sur le même port).

Option :

port : numéro de l'entrée analogique interrogée

valeur : entier compris entre 0 et 255. Une valeur de 0 génère 0 V sur le port spécifié ; une valeur de 255 génère +5 V sur le port spécifié. Pour les valeurs comprises entre 0 et 255, le port cyclera rapidement entre 0 et +5V - plus la valeur est élevée, plus le port génère fréquemment HIGH (5V).

analogWrite(9, 128);// définir la broche 9 sur une valeur équivalente à 2,5V

Noter:

Il n'est pas nécessaire d'appeler la fonction pinMode pour définir le port sur pin avant d'appeler la fonction analogWrite.

La fréquence de génération du signal est d'environ 490 Hz.

temps = millis();

La description:

Renvoie le nombre de millisecondes depuis que Freeduino a exécuté le programme en cours. Le compteur débordera et se remettra à zéro après environ 9 heures.

Valeur de retour : renvoie une valeur de type unsigned long

longtemps non signé; // déclaration de la variable time de type unsigned long
temps = millis(); // passage du nombre de millisecondes

retard(time_ms);

La description:

Met le programme en pause pendant le nombre de millisecondes spécifié.

Option :

time_ms – temps de retard du programme en millisecondes

retard(1000); //pause 1 seconde

retardMicrosecondes

retardMicrosecondes(time_µs);

La description:

Met le programme en pause pendant le nombre de microsecondes spécifié.

Option :

time_µs – temps de retard du programme en microsecondes

retardMicrosecondes(500); //pause 500 microsecondes

pulseIn(port, valeur);

La description:

Lit une impulsion (haute ou basse) à partir d'un port numérique et renvoie la durée de l'impulsion en microsecondes.

Par exemple, si le paramètre "value" est défini sur HIGH lors de l'appel de la fonction, alors pulseIn() attend que le port reçoive un niveau de signal élevé. Dès son arrivée, le compte à rebours commence jusqu'à ce que le port reçoive niveau faible signal. La fonction renvoie la longueur d'impulsion ( haut niveau) en microsecondes. Fonctionne avec des impulsions de 10 microsecondes à 3 minutes. Notez que cette fonction ne renverra pas de résultat tant qu'une impulsion n'aura pas été détectée.

Option :

port : numéro du port à partir duquel nous lisons l'impulsion

valeur : type d'impulsion HIGH ou LOW

Valeur de retour : renvoie la durée de l'impulsion en microsecondes (type int)

int durée ; // déclaration de la variable durée de type int
durée = pulseIn(broche, HIGH); // mesure la durée d'impulsion

Communication série

Freeduino possède un contrôleur série intégré qui peut être utilisé pour communiquer entre des appareils Freeduino/Arduino ou avec un ordinateur. Sur un ordinateur, la connexion correspondante est représentée par un port COM USB.

La communication se produit sur les ports numériques 0 et 1, et vous ne pouvez donc pas les utiliser pour les E/S numériques si vous utilisez les fonctions de données série.

Serial.begin (débit en bauds);

La description:

Définit le débit en bauds Port COM bits par seconde pour le transfert de données en série. Pour communiquer avec un ordinateur, utilisez l'une de ces vitesses standard : 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 ou 115200. Vous pouvez également spécifier d'autres vitesses lors de la communication avec un autre microcontrôleur par les ports 0 et 1.

Option :

baudrate : débit de données en bits par seconde.

Série.begin(9600); //fixe la vitesse à 9600 bps

série.disponible

compte = série.disponible();

La description:

Les octets reçus via le port série entrent dans le tampon du microcontrôleur, d'où votre programme peut les lire. La fonction renvoie le nombre d'octets accumulés dans le tampon. Le tampon série peut stocker jusqu'à 128 octets.

Valeur de retour :

Renvoie une valeur int, le nombre d'octets disponibles pour la lecture dans le tampon série, ou 0 si rien n'est disponible.

if (Serial.available() > 0) ( // S'il y a des données dans le tampon
// ici devrait recevoir et traiter les données
}

char = Serial.read();

La description:

Lit l'octet suivant du tampon série.

Valeur de retour :

Le premier octet disponible des données entrantes du port série, ou -1 s'il n'y a pas de données entrantes.

entrantByte = Serial.read(); // lire l'octet

La description:

Efface le tampon d'entrée du port série. Les données mises en mémoire tampon sont perdues et d'autres appels à Serial.read() ou Serial.available() auront un sens pour les données reçues après l'appel à Serial.flush().

Serial.flush(); // Efface le tampon - commence à recevoir des données "à partir de zéro"

La description:

Sortie de données vers le port série.

Option :

La fonction a plusieurs formes d'appel selon le type et le format des données de sortie.

Serial.print(b, DEC) imprime une chaîne ASCII, la représentation décimale de b.

entier b = 79 ;

Serial.print(b, HEX) imprime une chaîne ASCII, la représentation hexadécimale du nombre b.

entier b = 79 ;

Serial.print(b, OCT) imprime une chaîne ASCII, la représentation octale du nombre b.

entier b = 79 ;
impression en série (b, oct); // affichera la chaîne "117" sur le port

Serial.print(b, BIN) imprime une chaîne ASCII, la représentation binaire du nombre b.

entier b = 79 ;
Serial.print(b, BIN); // affichera la chaîne "1001111" sur le port

Serial.print(b, BYTE) imprime l'octet de poids faible de b.

entier b = 79 ;
Serial.print(b, BYTE); // imprime le nombre 79 (un octet). Dans le moniteur
// port série nous obtenons le caractère "O" - c'est
// le code est 79

Serial.print(str) si str est une chaîne ou un tableau de caractères, envoie str au port COM octet par octet.

caractères octets = (79, 80, 81); //tableau de 3 octets avec les valeurs 79,80,81
Serial.print("Voici nos octets :"); //affiche la chaîne "Voici nos octets :"
Impression série (octets); // affiche 3 caractères avec les codes 79,80,81 -
//ce sont les caractères "OPQ"

Serial.print(b) si b est de type byte ou char, imprime le numéro b lui-même sur le port.

caractère = 79 ;
Impression en série(b); // enverra le caractère "O" au port

Serial.print(b) si b est un entier, imprime la représentation décimale de b sur le port.

entier b = 79 ;
Impression en série(b); // affichera la chaîne "79" sur le port

La description:

La fonction Serial.println est similaire à la fonction Serial.print et possède les mêmes options d'appel. La seule différence est que deux caractères supplémentaires sont générés après les données - un retour chariot (ASCII 13 ou "\r") et un caractère de saut de ligne (ASCII 10 ou "\n").

L'exemple 1 et l'exemple 2 afficheront la même chose sur le port :

entier b = 79 ;
Serial.print(b, DEC); // affichera la chaîne "79" sur le port
Serial.print("\r\n"); // affichera les caractères "\r\n" - retour à la ligne
Serial.print(b, HEX); // affichera la chaîne "4F" sur le port
Serial.print("\r\n");//imprimera les caractères "\r\n" - saut de ligne

entier b = 79 ;
Serial.println(b, DEC); // affichera la chaîne "79\r\n" sur le port
Serial.println(b, HEX); // affichera la chaîne "4F\r\n" sur le port

Dans le moniteur de port série, nous obtenons.

Bonjour! Je suis Alikin Alexander Sergeevich, professeur d'enseignement complémentaire, je dirige les cercles "Robotique" et "Radio Engineering" au Théâtre central pour enfants et jeunes de Labinsk. Je voudrais parler un peu d'une manière simplifiée de programmer Arduino en utilisant le programme ArduBloсk.

J'ai introduit ce programme dans le processus éducatif et je suis ravi du résultat, il est particulièrement demandé par les enfants, en particulier lors de l'écriture de programmes simples ou pour la création d'une étape initiale de programmes complexes. ArduBloсk est un environnement de programmation graphique, c'est-à-dire que toutes les actions sont effectuées avec des images dessinées avec des actions signées en russe, ce qui simplifie grandement l'apprentissage de la plate-forme Arduino. Les enfants de la 2e année peuvent facilement maîtriser le travail avec Arduino grâce à ce programme.

Oui, certains pourraient dire que Scratch existe toujours et est également un environnement graphique très simple pour la programmation Arduino. Mais Scratch ne flashe pas l'Arduino, mais le contrôle uniquement au moyen de cable USB. Arduino est dépendant de l'ordinateur et ne peut pas fonctionner de manière autonome. Lors de la création de vos propres projets, l'autonomie pour Arduino est la chose principale, en particulier lors de la création d'appareils robotiques.

Même les robots LEGO bien connus, tels que NXT ou EV3, ne sont plus aussi intéressants pour nos étudiants avec l'avènement du programme ArduBloсk dans la programmation Arduino. En outre, Arduino est beaucoup moins cher que n'importe quel concepteur LEGO et de nombreux composants peuvent simplement être extraits d'anciens appareils électroniques grand public. Le programme ArduBloсk aidera non seulement les débutants, mais également les utilisateurs actifs de la plate-forme Arduino dans leur travail.

Alors, qu'est-ce qu'ArduBlock ? Comme je l'ai dit, il s'agit d'un environnement de programmation graphique. Presque entièrement traduit en russe. Mais dans ArduBloсk, le point culminant n'est pas seulement cela, mais aussi le fait que le programme ArduBloсk écrit par nous est converti en code EDI Arduino. Ce programme est intégré à l'environnement de programmation Arduino IDE, c'est-à-dire qu'il s'agit d'un plugin.

Vous trouverez ci-dessous un exemple d'une LED clignotante et d'un programme converti dans l'IDE Arduino. Tout le travail avec le programme est très simple et n'importe quel étudiant peut le comprendre.


À la suite de travailler sur le programme, vous pouvez non seulement programmer l'Arduino, mais également étudier des commandes qui nous sont incompréhensibles dans le format texte de l'IDE Arduino, mais si vous êtes trop paresseux pour écrire des commandes standard, vous devriez rapidement esquisser sortez un programme simple dans ArduBlok avec une manipulation rapide de la souris, et déboguez-le dans l'IDE Arduino.

Pour installer ArduBlok, vous devez d'abord télécharger et installer l'IDE Arduino à partir du site Web officiel d'Arduino et comprendre les paramètres lorsque vous travaillez avec Carte Arduino ONU. Comment faire cela est décrit sur le même site ou sur Amperk, ou regardez YouTube. Eh bien, lorsque vous avez compris tout cela, vous devez télécharger ArduBlok à partir du site officiel, ici. Je ne recommande pas de télécharger les dernières versions, elles sont très difficiles pour les débutants, mais la version du 2013-07-12 est la plus importante, ce fichier y est le plus populaire.

Ensuite, nous renommons le fichier téléchargé en ardublock-all et dans le dossier "documents". Créez les dossiers suivants : Arduino > tools > ArduBlockTool > tool et dans ce dernier nous lançons le fichier téléchargé et renommé. ArduBlok fonctionne pour tout le monde systèmes d'exploitation ah, même sous Linux, je l'ai personnellement testé sur XP, Win7, Win8, tous les exemples sont pour Win7. L'installation du programme est la même pour tous les systèmes.


Eh bien, si c'est plus simple, j'ai préparé une archive sur le Mail-disk 7z, en décompressant, vous trouverez 2 dossiers. Dans un déjà programme de travail Arduino IDE, et dans un autre dossier, le contenu doit être envoyé dans le dossier documents.

Pour travailler dans ArduBlok, vous devez exécuter l'IDE Arduino. Ensuite, nous allons dans l'onglet Outils et nous y trouvons l'élément ArduBlok, cliquez dessus - et le voici, notre objectif.


Passons maintenant à l'interface du programme. Comme vous l'avez déjà compris, il n'y a pas de paramètres, mais il y a beaucoup d'icônes pour la programmation, et chacune d'elles porte une commande au format texte Arduino IDE. Il y a encore plus d'icônes dans les nouvelles versions, alors faites affaire avec ArduBlok dernière version difficile et certaines icônes ne sont pas traduites en russe.


Dans la section "Gestion", nous trouverons une variété de cycles.


Dans la section "Ports", nous pouvons gérer les valeurs des ports, ainsi que les émetteurs de sons, les servos ou les capteurs de proximité à ultrasons qui leur sont connectés.


Dans la section "Nombres / Constantes", nous pouvons choisir des valeurs numériques ou créer une variable, mais il est peu probable que vous utilisiez celle ci-dessous.


Dans la section "Opérateurs", nous trouverons tous les opérateurs de comparaison et de calcul nécessaires.


La section Utilitaires utilise principalement des icônes au fil du temps.


"TinkerKit Bloks" est la section des capteurs TinkerKit achetés. Bien sûr, nous n'avons pas un tel ensemble, mais cela ne signifie pas que les icônes ne fonctionneront pas pour d'autres ensembles, au contraire, il est très pratique pour les gars d'utiliser des icônes telles que l'allumage d'une LED ou d'un bouton . Ces signes sont utilisés dans presque tous les programmes. Mais ils ont une particularité - lorsqu'ils sont sélectionnés, il y a des icônes incorrectes indiquant les ports, ils doivent donc être supprimés et l'icône de la section «nombres / constantes» doit être remplacée, celle du haut de la liste.


"DF Robot" - cette section est utilisée si des capteurs y sont spécifiés, ils sont parfois trouvés. Et l'exemple d'aujourd'hui ne fait pas exception, nous avons un "Commutateur IR réglable" et un "Capteur de ligne". Le "capteur de ligne" est différent de celui de l'image, car il provient d'Amperka. Leurs actions sont identiques, mais le capteur d'Amperka est bien meilleur, puisqu'il dispose d'un régulateur de sensibilité.


Seeedstudio Grove - Je n'ai jamais utilisé les capteurs de cette section, bien qu'il n'y ait que des joysticks. Cette section a été étendue dans les nouvelles versions.


Et la dernière section est "Linker Kit". Les capteurs qui y sont présentés ne m'ont pas traversé l'esprit.

Je voudrais montrer un exemple de programme sur un robot se déplaçant le long de la bande. Le robot est très simple, à la fois dans l'assemblage et dans l'acquisition, mais avant tout. Commençons par son acquisition et son assemblage.

Voici l'ensemble des pièces lui-même, tout a été acheté sur le site Amperka.


  1. AMP-B001 Motor Shield (2 canaux, 2 A) 1 890 roubles
  2. AMP-B017 Bouclier Troyka RUB 1,690
  3. AMP-X053 Compartiment à piles 3×2 AA 1 60 RUB
  4. AMP-B018 Capteur de ligne numérique 2 580 RUB
  5. ROB0049 Plate-forme à deux roues miniQ 1 1890 RUB
  6. SEN0019 Capteur d'obstacle infrarouge 1 390 RUB
  7. FIT0032 Support pour capteur d'obstacle infrarouge 1 90 RUB
  8. A000066 Arduino Uno 1 1150 RUB


Pour commencer, nous allons assembler la plate-forme à roues et souder les fils aux moteurs.


Ensuite on installe les racks pour monter la planche Arduino UNO, qui ont été repris de l'ancien carte mère ou d'autres pièces jointes similaires.


Ensuite, nous attachons la carte Arduino UNO à ces racks, mais nous ne pouvons pas serrer un seul boulon - les connecteurs gênent. Vous pouvez, bien sûr, les souder, mais c'est à vous de décider.


Attacher ensuite Capteur infrarouge obstacles sur son support spécial. Veuillez noter que le contrôle de la sensibilité est sur le dessus, c'est pour faciliter le réglage.



Maintenant, nous installons des capteurs de ligne numériques, ici nous devons chercher quelques boulons et écrous 4. Nous installons deux écrous entre la plate-forme elle-même et le capteur de ligne, et fixons les capteurs avec le reste.


La prochaine installation de Motor Shield ou d'une autre manière, vous pouvez appeler le pilote du moteur. Dans notre cas, faites attention au cavalier. Nous n'utiliserons pas d'alimentation séparée pour les moteurs, il est donc installé dans cette position. La partie inférieure est scellée avec du ruban électrique, de sorte qu'il n'y ait pas de court-circuit accidentel du connecteur USB de l'Arduino UNO, juste au cas où.



Installez Troyka Shield sur le dessus du Motor Shield. Il est nécessaire pour la commodité de connecter des capteurs. Tous les capteurs que nous utilisons sont numériques, donc les capteurs de ligne sont connectés aux ports 8 et 9, car ils sont également appelés broches, et le capteur d'obstacle infrarouge est connecté au port 12. Assurez-vous de noter que vous ne pouvez pas utiliser les ports 4, 5, 6, 7 car ils sont utilisés par le Motor Shield pour contrôler les moteurs. J'ai même spécialement peint ces ports avec un marqueur rouge pour que les élèves puissent le comprendre.


Si vous l'avez déjà remarqué, j'ai ajouté un manchon noir, juste au cas où, pour que le compartiment à piles que nous avons installé ne s'envole pas. Et enfin, nous fixons toute la structure avec un élastique ordinaire.

Les connexions du compartiment batterie peuvent être de 2 types. Première connexion filaire à Troyka Shield. Il est également possible de souder la fiche d'alimentation et de la connecter à la Carte Arduino ONU.



Voici notre robot prêt. Avant de vous lancer dans la programmation, vous devrez apprendre comment tout fonctionne, à savoir :
- Moteurs :
Les ports 4 et 5 sont utilisés pour contrôler un moteur, et 6 et 7 l'autre ;
On ajuste la vitesse de rotation des moteurs avec PWM sur les ports 5 et 6 ;
Vers l'avant ou vers l'arrière en signalant les ports 4 et 7.
- Capteurs :
Nous sommes tous numériques, ils donnent donc des signaux logiques sous la forme de 1 ou 0 ;
Et pour les régler, ils ont des régulateurs spéciaux et à l'aide d'un tournevis approprié, ils peuvent être calibrés.

Les détails peuvent être trouvés à Amperka. Pourquoi ici? Parce qu'il y a beaucoup d'informations sur le travail avec Arduino.

Eh bien, nous avons peut-être tout regardé superficiellement, étudié et, bien sûr, assemblé le robot. Maintenant il faut le programmer, le voici - le programme tant attendu !


Et le programme converti en Arduino IDE :

Void setup() ( pinMode(8 , INPUT); pinMode(12 , INPUT); pinMode(9 , INPUT); pinMode(4 , OUTPUT); pinMode(7 , OUTPUT); pinMode(5, OUTPUT); pinMode(6 , SORTIE); ) void loop() ( if (digitalRead(12)) ( if (digitalRead(8)) ( if (digitalRead(9)) ( digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite( 6, 255); digitalWrite(7 , HIGH); ) else ( digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7 , LOW); ) ) else ( if (digitalRead (9)) ( digitalWrite(4 , LOW); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7 , HIGH); ) else ( digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7 , HIGH); ) ) ) else ( digitalWrite(4 , HIGH); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7 , HIGH); ) )

En conclusion, je tiens à dire que ce programme n'est qu'une aubaine pour l'éducation, même pour l'auto-apprentissage, il vous aidera à apprendre les commandes de l'IDE Arduino. Le point culminant le plus important est qu'avec plus de 50 icônes d'installation, cela commence à "échouer". Oui, en effet, c'est un point culminant, car la programmation constante uniquement sur ArduBlok ne vous apprendra pas à programmer dans l'IDE Arduino. Le soi-disant "glitch" permet de penser et d'essayer de se souvenir des commandes pour un débogage précis des programmes.

Te souhaite du succès.

28 09.2016

Avez-vous pensé à vous simplifier la vie ? Pour qu'il y ait des choses qui résoudraient les tâches quotidiennes et routinières pour vous. Un appareil intelligent qui fonction utile, par exemple, arrosait le jardin, nettoyait la pièce, portait la charge. Ces tâches peuvent être résolues. Mais l'acheter ne suffira pas. Tout contrôleur logique ou microcircuit industriel a besoin d'un «cerveau» pour effectuer une certaine séquence d'actions. Dans notre cas, le langage de programmation Arduino est adapté pour effectuer des opérations.

De cet article, vous apprendrez:

Salutations, amis! Pour ceux qui ne me connaissent pas, je m'appelle Semyon Gridin. Vous pouvez lire sur moi. L'article d'aujourd'hui sera consacré à deux programmes principaux, sans lesquels nous n'aurons pas de progrès et de compréhension mutuelle.

Description générale des langages de programmation

Comme je l'ai écrit ci-dessus, nous allons considérer deux environnements de développement populaires. Par analogie avec, peut être divisé en un éditeur graphique et un "bloc-notes intelligent". Ce sont les programmes Arduino IDE et FLprog.


La base de l'environnement de développement est Processing / Wiring - c'est le C ++ habituel, complété par des fonctions et diverses bibliothèques. Il existe plusieurs versions pour le fonctionnement systèmes de fenêtres, Mac OS et Linux.

Quelle est leur différence fondamentale ? L'IDE Arduino est un environnement de développement qui décrit le code du programme. Et FLprog est similaire à CFC CoDeSyS, qui vous permet de dessiner des diagrammes. Quel environnement est le meilleur ? Les deux sont bons et pratiques à leur manière, mais si vous voulez vous intéresser sérieusement aux contrôleurs, il est préférable d'apprendre des langages comme C. Leur principal avantage est la flexibilité et l'illimité de l'algorithme. J'aime beaucoup l'IDE Arduino.

Description de l'IDE Arduino

La distribution peut être téléchargée sur site officiel. Téléchargez l'archive, cela prend un peu plus de 100 Mo. L'installation est standard, comme toutes les applications pour Windows. Les pilotes pour tous les types de cartes doivent être installés dans le package. Et voici à quoi ressemble la fenêtre de travail du programme.

Mercredi Développement Arduino comprend :

  • éditeur de code ;
  • zones de messages ;
  • fenêtres de sortie de texte ;
  • barres d'outils avec des boutons pour les commandes fréquemment utilisées ;
  • plusieurs menus

Paramètres de l'IDE Arduino

Un programme écrit dans l'environnement de développement Arduino est appeléesquisser. L'esquisse est écrite dans un éditeur de texte qui met en surbrillance en couleur le code de programme généré. Un exemple d'un programme simple dans l'image ci-dessous.

Des fonctionnalités supplémentaires peuvent être ajoutées avecbibliothèques,qui est un code spécialement conçu. Fondamentalement, c'est dans l'accès fermé du développeur. L'environnement est généralement fourni avec un ensemble standard qui peut être complété au fil du temps. Ils sont dans le sous-répertoirebibliothèques Répertoire Arduino.

De nombreuses bibliothèques sont fournies avec des exemples situés dans le dossierExemple.La sélection d'une bibliothèque dans le menu ajoutera à la source lignes:

Arduino

#comprendre

#comprendre

Cette directive est une certaine instruction, un fichier d'en-tête avec une description des objets, des fonctions et des constantes de la bibliothèque. De nombreuses fonctions ont déjà été développées pour la plupart des tâches typiques. Croyez-moi, cela facilite la vie du programmeur.

Après nous avons connecté la carte électronique à l'ordinateur. Nous effectuons les réglages suivants - nous sélectionnons la carte Arduino et le port Com via lequel nous nous connecterons.

Arduino

void setup() ( // initialise la broche numérique 13 en tant que sortie. pinMode(13, OUTPUT); ) void loop() ( digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000 );

void setup()(

// initialise la broche numérique 13 en tant que sortie.

pinMode(13, SORTIE) ;

boucle vide ()()

digitalWrite (13 , ÉLEVÉ ) ;

retard(1000) ;

digitalWrite (13 , BAS ) ;

retard(1000) ;

Donc, au fait, il est pratique de vérifier les performances de la carte provenant du magasin. Rapide et facile.

Il y a une autre chose pratique. C'est appeléMoniteur série (Moniteur série). Affiche les données envoyées à la plateformeArduino.Je regarde généralement quels signaux me sont donnés par divers capteurs connectés à la carte.


Connecter les bibliothèques

Exister différentes façons pour ajouter des fonctionnalités personnalisées. Il existe trois façons d'inclure des bibliothèques :

  1. Utilisation du gestionnaire de bibliothèque
  2. En important sous forme de fichier .zip
  3. Installation manuelle.

1. Utilisation du gestionnaire de bibliothèque.Dans la fenêtre de travail du programme, sélectionnez l'onglet Esquisse. Cliquez ensuite sur le bouton Ajouter une bibliothèque. Le responsable de la bibliothèque ouvrira devant nous. La fenêtre affichera les fichiers déjà installés avec une signatureinstallée,et ceux qui peuvent être installés.

2. En important sous forme de fichier .zip.Souvent, sur Internet, vous pouvez trouver des fichiers de bibliothèque emballés dans des archives avec l'extension zip. Il contient un fichier d'en-tête .h et un fichier de code .cpp. Lors de l'installation, vous n'avez pas besoin de décompresser l'archive. Il suffit dans le menu Sketch - Connect Library - Add .ZIP library

3.Installation manuelle.Fermer d'abord Programme Arduino IDE. Nous déballons d'abord nos archives. Et nous transférons les fichiers avec l'extension .h et .cpp dans un dossier portant le même nom que l'archive. Nous déposons le dossier dans le répertoire racine.

Mes Documents\Arduino\bibliothèques

Description de FLPprog

FLprog est un projet tiers gratuit qui vous permet de travailler avec blocs fonctionnels, ou avec des schémas à contacts. Cet environnement est pratique pour les personnes - pas pour les programmeurs. Il vous permet de voir visuellement et visuellement l'algorithme à l'aide de diagrammes et de blocs fonctionnels. La distribution peut être téléchargée sur site officiel.


Je suis le projet depuis longtemps. Les gars se développent, ajoutent constamment de nouvelles fonctionnalités et changent l'ancienne. Je vois des perspectives dans cet environnement. Puisqu'il remplit deux fonctions importantes:simplicité et facilité d'utilisation.

Essayons de créer un projet simple avec vous. Nous commuterons la sortie 13 sur la LED.

Nous créons un nouveau projet. Dans la fenêtre du haut, ajoutez La bonne quantité entrées et sorties, définissez un nom et affectez une entrée ou une sortie physique de la carte.


Nous extrayons les éléments dont nous avons besoin de l'arborescence d'objets, les éléments dont nous avons besoin sur le canevas d'édition. Dans notre cas, nous pouvons utiliser une simple bascule RS pour allumer et éteindre.


Après avoir créé l'algorithme, cliquez sur le bouton de compilation, le programme donne un croquis prêt à l'emploi sur l'IDE.

Nous avons examiné les possibilités et la commodité des programmes pour développer des algorithmes sur le contrôleur de la série Arduino. Il existe également des programmes qui vous permettent de créer des diagrammes structurels et des images visuelles. Mais je recommande d'utiliser un éditeur de texte car ce sera plus facile pour vous plus tard. Dites-moi, quel environnement préférez-vous et pourquoi ?

Le 22 septembre, j'ai participé à un séminaire à Krasnodar "Contrôleurs à écran tactile ARIES SPK". Nous avons organisé une conférence dans le magnifique et branché hôtel Bristol. C'était très intéressant et cool.


Dans la première partie du séminaire, on nous a parlé des possibilités et des avantages des produits OWEN. Après il y a eu une pause café avec des beignets. J'ai eu un tas de tout, et des beignets, et des biscuits, et des bonbons, parce que j'avais très faim. =)

Dans la deuxième partie du séminaire, après le déjeuner, nous avons été présentés. Beaucoup de choses ont été dites sur le Web - la visualisation. Cette tendance commence à prendre de l'ampleur. Eh bien, bien sûr, contrôlez l'équipement via n'importe quel navigateur Internet. C'est vraiment cool. Soit dit en passant, l'équipement lui-même est dans une valise.


Je publierai prochainement une série d'articles sur CoDeSyS 3.5. Donc, si quelqu'un est intéressé, abonnez-vous ou venez simplement visiter. Je serai toujours heureux !

Au fait, j'allais oublier, le prochain article portera sur la carte électronique Arduino. Ce sera intéressant, ne le manquez pas.

Rendez-vous dans les prochains articles.

Cordialement, Gridin Semyon.

Donc, vous avez un processeur. Vous comprenez probablement que le processeur peut en quelque sorte être programmé pour faire ce que vous voulez. Pour qu'un travail utile soit effectué, il est nécessaire (a) d'écrire un programme utile et (b) de le donner au processeur pour exécution.

En général, peu importe le type de processeur que vous possédez : le dernier processeur Intel Pentium de votre ordinateur portable ou le microcontrôleur de la carte Arduino. Principes d'écriture du programme, c'est-à-dire programmation sont les mêmes dans les deux cas. La seule différence est la vitesse et l'étendue des possibilités de travailler avec d'autres appareils.

Qu'est-ce qu'un programme et où l'écrire

Le processeur, malgré la complexité de la production, est, par essence, une chose assez simple et directe. Il ne sait pas penser. Il ne peut qu'aveuglément, octet par octet, exécuter les instructions qui lui ont été glissées. Voici un exemple approximatif d'une séquence d'instructions :

Octet d'instructionsQu'est-ce que cela signifie pour le processeur
00001001 signifie : prendre l'octet suivant et le stocker dans la cellule numéro 1
00000110 ... c'est juste l'octet suivant dont on se souvient dans la cellule numéro 1 : le numéro 5
00011001 signifie : soustraire un de la valeur de la cellule 1 et y laisser le résultat mis à jour
00101001 signifie: comparer la valeur de la cellule numéro 1 avec zéro et si elle est nulle - sauter par-dessus autant d'octets qu'indiqué dans l'octet suivant
00000100 … si le résultat était zéro, nous voulons sauter 4 octets à l'avant-dernière instruction
10000011
01000001 ... la lettre "A" correspond juste à ce code
00101000 signifie que nous voulons revenir en arrière d'autant d'octets que l'octet suivant
00000110 ...nous allons sauter 6 octets en arrière, à l'instruction n°3
10000011 signifie que l'on veut afficher le caractère dont le code est écrit dans l'octet suivant
00100001 ... pancarte "!" correspond juste à ce code

À la suite de l'exécution d'une telle séquence d'instructions, la phrase de panique "AAAA!" s'affichera à l'écran.

Beaucoup de code pour un objectif aussi simple ! Il est clair que si tous les programmes étaient écrits ainsi, directement, le développement de produits complexes prendrait des siècles.

Pourquoi les langages de programmation sont nécessaires

Pour simplifier la tâche un million de fois, des langages de programmation ont été inventés. Il y en a beaucoup, et même de ceux qu'on entend constamment, on peut rapidement en rappeler une douzaine ou deux : Assembleur, C, C++, C#, Java, Python, Ruby, PHP, Scala, JavaScript.

Les programmes dans ces langues sont beaucoup plus proches du langage naturel humain. Et donc ils sont plus faciles, plus rapides et plus agréables à écrire, et surtout, ils sont beaucoup plus faciles lis: à vous immédiatement après avoir écrit, à vous dans un an ou à votre collègue.

Le problème est que ces langages ne sont pas compréhensibles pour le processeur, et avant de lui donner ce programme, il doit être compiler: traduire du langage naturel vers ces mêmes instructions sous la forme de zéros et de uns. Ceci est fait par des programmes appelés compilateurs. Chaque langage, à moins qu'il ne soit resté au niveau fantasy, a son propre compilateur. Pour les langues populaires, il y en a généralement plusieurs parmi lesquelles choisir, de différents fabricants et pour différentes plateformes. La plupart d'entre eux sont disponibles gratuitement sur Internet.

Ainsi, il existe des programmes dans un langage assez compréhensible pour une personne : on les appelle aussi "code source", simplement "code" ou "codes source". Ils sont écrits dans des fichiers texte en utilisant n'importe queléditeur de texte, même avec bloc-notes. Ensuite, ils sont transformés en ensembles de zéros et de uns compréhensibles pour le processeur à l'aide du compilateur : le compilateur reçoit le code source en entrée et crée exécutable binaire, celui compris par le processeur.

Les fichiers binaires ne sont pas lisibles et sont destinés, en général, uniquement à l'exécution par le processeur. Ils peuvent avoir type différent en fonction de la raison pour laquelle ils ont été reçus : .exe - ce sont des programmes pour Windows, .hex - des programmes à exécuter par un microcontrôleur tel qu'Arduino, etc.

Pourquoi y a-t-il autant de langages de programmation et quelle est la différence ?

    Pourquoi? Parce qu'il y a beaucoup de gens et d'entreprises sur Terre, et beaucoup pensaient qu'ils pouvaient le faire mieux que quiconque : plus pratique, plus clair, plus rapide, plus mince.

    Quelle est la différence : différentes langues présentent un équilibre différent entre la vitesse d'écriture, la lisibilité et la vitesse d'exécution.

Regardons le même programme qui affiche une chanson sur 99 bouteilles de bière à l'écran dans différents langages de programmation.

Par exemple, le langage Perl. Écrit rapidement; il est impossible de comprendre ce que voulait dire le programmeur; exécuté lentement :

sub b( $n = 99 - @_ - $_ || Non; "$n bouteille" . "s" x!!-- $n . " de bière" ) ​​; $w = "sur le mur" ; die map ( b. "$w, \n". b. ", \n Prenez-en un, faites-le circuler,\n ". b(0) . "$w. \n\n"} 0 .. 98

Langage Java. Il est écrit relativement long ; facile à lire; s'exécute assez rapidement, mais prend beaucoup de mémoire :

bouteilles de classe (public static void main( Chaîne de caractères arguments ) ( Chaîne de caractères s = "s" ; pour (int bières= 99 ; bières>- 1 ; ) ( Système.out .print (bières + " bouteille" + s + " de bière au mur, " ) ; Système.out .println (bières + " bouteille" + s + " de bière, " ) ; si (bières== 0 ) ( Système.out .print( "Allez au magasin, achetez-en d'autres",) ; Système.out .println ( "99 bouteilles de bière au mur.\n ") ; Système.exit(0) ; ) autre Système.out .print( "Prenez-en un, faites-le circuler") ; s = (-- bières == 1 ) ? "" : "s" ; Système.out .println(bières + "bouteille" + s + " de bière sur le mur.\n ") ; } } }

langage d'assemblage. C'est écrit depuis longtemps; difficile à lire; tourne très vite :

segment de code assume cs : code , ds : code org 100h start : ; Boucle principale mov cx , 99 ; bouteilles pour démarrer avec loopstart : appelez printcx ; imprimer le nombre mov dx , offset line1 ; imprimer le reste de la première ligne mov ah , 9 ; Routine de chaîne d'impression MS-DOS int 21h call printcx ; imprimer le nombre mov dx , offset line2_3 ; reste des 2e et 3e lignes mov ah , 9 int 21h déc cx ; décrochez un call printcx ; imprimer le nombre mov dx , offset line4 ; imprimer le reste de la quatrième ligne mov ah , 9 int 21h cmp cx , 0 ; En panne de bière ? jne loopstart ; sinon, continuer int 20h ; quitter pour MS-DOS ; sous-programme pour imprimer le registre CX en décimal printcx : mov di , offset numbufferend ; remplir le tampon à partir de la fin mov hache, cx ; mettre le nombre dans AX pour pouvoir le diviser printcxloop: mov dx , 0 ; mot de poids fort du numérateur - toujours 0 mov bx , 10 div bx ; diviser DX:AX par 10. AX=quotient, DX=reste ajouter dl , "0" ; convertir le reste en caractère ASCII mov [ds : di] , dl ; placez-le dans le tampon d'impression cmp ax , 0 ; Plus de chiffres à calculer ? je printcxend ; sinon, fin déc di ; mettre le chiffre suivant avant l'actuel jmp printcxloop ; boucle printcxend : mov dx , di ; imprimer, à partir de le dernier calcul numérique mov ah , 9 int 21h ret ; Ligne de données1 db "bouteilles de bière sur le mur,", 13 , 10 , "$" line2_3 db " bouteilles de bière," , 13 , 10 , "Prenez-en un, faites-le circuler", 13 , 10 , "$" line4 db "bouteilles de bière sur le mur.", 13 , 10 , 13 , 10 , "$" numbuffer db 0 , 0 , 0 , 0 , 0 numbufferend db 0 , "$" code se termine fin début

Comment est programmé Arduino ?

En parlant d'Arduino ou des microcontrôleurs d'Atmel, dans quel langage peut-on écrire des programmes pour eux ? La réponse théorique: sur tout. Mais en pratique, le choix se limite à Assembleur, C et C++. Cela est dû au fait que, par rapport à un ordinateur de bureau, ils disposent de ressources très limitées. Des kilo-octets de mémoire, pas des gigaoctets. Mégahertz sur le processeur, pas gigahertz. C'est un prix pour le bon marché et l'efficacité énergétique.

Vous avez donc besoin d'un langage capable de compiler et de s'exécuter efficacement. C'est-à-dire traduire de la manière la plus optimale possible les zéros et les uns des instructions, sans dépenser de précieuses instructions et de la mémoire vide. Ces langages sont tout aussi efficaces. En les utilisant, même dans les limites étroites des ressources du microcontrôleur, vous pouvez écrire des programmes riches en fonctionnalités qui s'exécutent rapidement.

L'assembleur, comme vous l'avez vu, n'est pas le plus simple et le plus élégant, et du coup, C/C++ est le langage phare d'Arduino.

De nombreuses sources disent que l'Arduino est programmé en Langage Arduino, Traitement, Câblage. Ce n'est pas une déclaration tout à fait correcte. Arduino est programmé en C / C ++, et ce qu'on appelle ces mots n'est qu'un "kit carrosserie" pratique qui vous permet de résoudre de nombreuses tâches typiques sans réinventer la roue à chaque fois.

Pourquoi C et C++ sont-ils mentionnés dans la même phrase ? C++ est un complément de C. Chaque programme C est un programme C++ valide, mais pas l'inverse. Vous pouvez utiliser les deux. Le plus souvent, vous ne penserez même pas à ce que vous utilisez pour résoudre le problème actuel.

Allez droit au but : le premier programme

Écrivons le premier programme Arduino et faisons-le exécuter par la carte. Vous devez créer un fichier texte avec le code source, le compiler et placer le fichier binaire résultant sur le microcontrôleur de la carte.

Allons dans l'ordre. Écrivons le code source. Vous pouvez l'écrire dans le bloc-notes ou tout autre éditeur. Cependant, afin de faciliter le travail, il existe des environnements dits de développement (IDE : Integrated Development Environment). Ils fournissent sous la forme d'un seul outil un éditeur de texte avec surlignage et astuces, un compilateur lancé par un bouton, et bien d'autres joies. Pour Arduino, cet environnement s'appelle l'IDE Arduino. Il est disponible gratuitement en téléchargement sur le site officiel.

Installez l'environnement et exécutez-le. Dans la fenêtre qui apparaît, vous verrez : la majeure partie de l'espace est donnée à l'éditeur de texte. C'est là que le code est écrit. Le code dans le monde Arduino est aussi appelé esquisser.

Alors écrivons un sketch qui ne fait rien. C'est-à-dire le plus petit programme C++ correct possible qui fait simplement perdre du temps.

void setup() ( ) void loop() ( )

Nous ne nous attarderons pas encore sur la signification du code écrit. Compilons-le. Pour ce faire, dans l'IDE Arduino, il y a un bouton "Vérifier" sur la barre d'outils. Cliquez dessus et en quelques secondes le fichier binaire sera prêt. Ceci sera annoncé par l'inscription "Compilation terminée" sous l'éditeur de texte.

En conséquence, nous avons un fichier binaire avec l'extension .hex, qui peut être exécuté par le microcontrôleur.

Maintenant, vous devez le glisser dans l'Arduino. Ce processus est appelé démarrage, clignotement ou clignotement. Pour effectuer un téléchargement dans l'IDE Arduino, il y a un bouton "Télécharger" sur la barre d'outils. Connectez l'Arduino à l'ordinateur via le câble USB, cliquez sur "Télécharger" et dans quelques instants, le programme sera téléchargé sur l'Arduino. Dans ce cas, le programme qui s'y trouvait auparavant sera effacé.

Le firmware réussi sera annoncé par l'inscription "Done Uploading".

Si vous rencontrez une erreur lors de la tentative de téléchargement, assurez-vous que :

    Dans le menu Outils → Carte, le port auquel l'Arduino est réellement connecté est sélectionné. Vous pouvez brancher et débrancher le câble USB pour voir quel port apparaît et disparaît : c'est l'Arduino.

    Vous avez installé les pilotes nécessaires pour l'Arduino. Ceci est requis pour Windows, non requis pour Linux, et uniquement requis pour les cartes plus anciennes avant l'Arduino Duemilanove sur MacOS.

Toutes nos félicitations! Vous êtes passé d'une table rase à un programme Arduino fonctionnel. Qu'elle ne fasse rien, mais c'est déjà un succès.