Arduino typedef
s = * ptr ; // s est maintenant aussi 24 (lu dans & b)Cela ne semble rien de compliqué : j’ai créé un pointeur de ptr en byte, c’est-à-dire byte * ptr et j’y ai écrit l’adresse de la variable b : ptr = & b… Maintenant nous avons accès sur la variable b, à travers le pointeur de ptr, nous pouvons changer sa valeur de cette façon : * ptr = valeur;Essayons de passer une adresse à une fonction et de changer la valeur d’une variable par son adresse à l’intérieur de la fonction. Prenons une fonction qui prend l’adresse d’une variable de type int et élève cette variable au carré. void square(int* val) {
// ici la valeur est déjà == 49Pourquoi cette approche est-elle bonne ? Nous ne créons pas une copie de la variable, comme nous l’avons fait dans la leçon sur les fonctions, nous passons l’adresse et changeons les valeurs directement. Voici ce dont je parle : void setup () {
Ici, nous créons une copie de la variable en RAM, nous interagissons avec cette copie, puis nous la renvoyons et l’assignons.Ce code s’exécute beaucoup plus lentement ! Les pointeurs de tableaux en Arduino.Nous avons eu une leçon séparée sur les tableaux, et là, je ne vous ai pas accablé en vous disant “d’où viennent les tableaux”, parce que les tableaux sont en fait un pointeur et ses amis.Qu’est-ce qu’un tableau en général, et comment fonctionne-t-il ? Le nom du tableau est un pointeur vers le premier élément de ce tableau (nous définissons le type d’élément lors de la déclaration du tableau), c’est-à-dire : montableau [ 0 ] == * montableau, ou comme ceci : montableau == & montableau [ 0 ]… Pour faciliter l’écriture et la lecture du code, des crochets sont introduits, mais en fait cela fonctionne comme ceci : a [ b ] == * ( a + b ) ! Un tableau est une zone de la mémoire remplie de “variables” du type spécifié, et nous pouvons nous y référer. Voici quelques exemples de la façon de travailler avec un tableau sans utiliser de crochets:void setup() {
Fonctions de l’Arduino
En continuant avec les possibilités du langage C, nous avions laissé de côté une instruction importante comme les structures, qui sont de la plus haute importance au fur et à mesure que nos programmes deviennent de plus en plus complexes.
L’objectif de cette session est de corriger cette omission flagrante, d’abord en raison de son importance intrinsèque et ensuite parce qu’avec cette session nous allons fermer le cycle des instructions qui viennent du C afin de pouvoir passer au C++ et à la programmation orientée objet (POO) dans les sessions futures.
Comme nous le verrons, le C++ est un surensemble du C qui a été développé avec l’idée en tête d’incorporer la POO dans l’un des langages les plus réussis de l’histoire, et avec l’intention expresse de préserver autant que possible la syntaxe C originale.
Dans ce sens, les syntaxes des classes et méthodes C++ pour la POO, descendent et augmentent beaucoup de propriétés des structs C, donc leur description est de la plus haute importance pour pouvoir aborder la programmation orientée objet en C++.
Variables Arduino
En ce qui concerne le format, nous pouvons trouver 4 types, SD ou SDSC (Standard Capacity), SDHC (High Capacity), SDXC (Extended Capacity) et les cartes SDIO (Input/Output), permettant à Arduino de travailler avec les deux premiers types.
La communication de la mémoire se fait par SPI mais elle fonctionne avec 3.3V, pour l’utiliser avec Arduino nous avons besoin de modules externes qui en plus d’avoir le socket apportent les composants nécessaires pour adapter les tensions à TTL et pour pouvoir la connecter de manière simple à notre Arduino.
Arduino dispose d’une bibliothèque pour utiliser ces mémoires, qui fonctionne avec tous les modules mentionnés ci-dessus. La bibliothèque est fournie avec l’IDE Arduino, nous n’avons donc pas besoin d’installer ou de télécharger quoi que ce soit.
Elle initialise la bibliothèque SD et la carte, comme paramètre on lui donne la broche CS à laquelle le module est connecté, si cspin n’est pas spécifié, la valeur par défaut de la CS matérielle est utilisée. Les autres broches doivent être connectées au SPI matériel de l’Arduino.
Crée le répertoire spécifié, si les sous-répertoires n’existent pas, ils seront également créés. Par exemple : SD.mkdir(“Arduino/project1/files), crée le dossier “files” et si les dossiers Arduino et project1 n’existent pas, alors ils seront également créés. La fonction renvoie true si la création du répertoire a réussi, sinon elle renvoie false.
Structure de l’arduino one
Lorsque nous définissons une variable, le compilateur lui attribue une position dans la mémoire RAM. Si la variable est de type char ou byte, un octet de mémoire est attribué, si elle est de type int, deux emplacements de mémoire sont attribués et si elle est de type long, quatre emplacements de mémoire sont attribués.
Déclarer et définir une variable sont deux opérations différentes. Au moyen de la déclaration, nous attribuons un nom à la variable et au moyen de la définition, nous attribuons une valeur à cette variable. Nous manipulons donc deux concepts différents, donc le compilateur, dans cette situation, crée un espace mémoire où il écrit le nom de la variable et d’autre part assigne physiquement une ou plusieurs adresses mémoire pour contenir la valeur de cette variable.
Cela nous donne une idée de ce qui peut arriver si nous écrivons une valeur longue dans une adresse mémoire qui correspond à un int. Comme le type long occupe 4 bytes, lorsque nous essayons de les mettre dans une adresse qui a été assignée à 2 bytes, il va occuper le contenu des emplacements mémoire suivants, qui peuvent être utilisés par d’autres satos. Essayez ça :