Publié le

Organisation différente d'un programme Arduino

Aujourd’hui je ne vous propose pas un nouveau montage, mais plutôt de regarder comment on peut améliorer la visibilité dans un programme Arduino.

Le programme de base :

Je vais reprendre le programme que j’avais fait pour le capteur température avec l’afficheur LED à segments.

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);



float temp;
int temp2;



int ledA = 13;
int ledB = 4;
int ledC = 8;
int ledD = 11;
int ledE = 12;
int ledF = 3;
int ledG = 5;
int Ana1 = 6;
int Ana2 = 7;
int Ana3 = 9;
int Ana4 = 10;

void setup() {
  Serial.begin(9600);
  pinMode(ledA, OUTPUT);
  pinMode(ledB, OUTPUT);
  pinMode(ledC, OUTPUT);
  pinMode(ledD, OUTPUT);
  pinMode(ledE, OUTPUT);
  pinMode(ledF, OUTPUT);
  pinMode(ledG, OUTPUT);
  pinMode(Ana1, OUTPUT);
  pinMode(Ana2, OUTPUT);
  pinMode(Ana3, OUTPUT);
  pinMode(Ana4, OUTPUT);
  sensors.begin();

}

void loop() {
   sensors.requestTemperatures();
  Serial.println(sensors.getTempCByIndex(0));
  temp2 = 10* sensors.getTempCByIndex(0);


for (int i=0; i<1000; i++)
    {

     int tab[3];
     tab[0] = temp2 % 10;
     tab[1] = (temp2 /10) % 10 ;
     tab[2] = temp2 /100 ;
     digitalWrite(Ana1,HIGH);
     digitalWrite(Ana2,LOW);
     digitalWrite(Ana3,LOW);
     digitalWrite(Ana4,LOW);
     affichenombre(tab[2]);
     delay(5);
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,HIGH);
     digitalWrite(Ana3,LOW);
     digitalWrite(Ana4,LOW);
     affichenombre(tab[1]);
     delay(5);
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,LOW);
     digitalWrite(Ana3,HIGH);
     digitalWrite(Ana4,LOW);
     digitalWrite(ledA,LOW);
     digitalWrite(ledB,LOW);
     digitalWrite(ledG,LOW);
     digitalWrite(ledF,LOW);
     digitalWrite(ledC,HIGH);
     digitalWrite(ledD,HIGH);
     digitalWrite(ledE,HIGH);
     delay(5);
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,LOW);
     digitalWrite(Ana3,LOW);
     digitalWrite(Ana4,HIGH);
     affichenombre(tab[0]);
     delay(5);

    }
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,LOW);

}

void affichenombre(int nombre)

{
  if (nombre != 1 && nombre !=4)
  digitalWrite(ledA,LOW);
  else digitalWrite(ledA,HIGH);

  if (nombre != 5 && nombre !=6)
  digitalWrite(ledB,LOW);
  else digitalWrite(ledB,HIGH);

  if (nombre != 2)
  digitalWrite(ledC,LOW);
  else digitalWrite(ledC,HIGH);

  if (nombre != 1 && nombre !=4 && nombre != 7)
  digitalWrite(ledD,LOW);
  else digitalWrite(ledD,HIGH);

  if (nombre != 1 && nombre != 3 && nombre != 4 && nombre != 5 && nombre != 7 && nombre !=9)
  digitalWrite(ledE,LOW);
  else digitalWrite(ledE,HIGH);

  if (nombre != 1 && nombre != 2 && nombre != 3 && nombre !=7)
  digitalWrite(ledF,LOW);
  else digitalWrite(ledF,HIGH);

  if (nombre != 0 && nombre != 1 && nombre !=7)
  digitalWrite(ledG,LOW);
  else digitalWrite(ledG,HIGH);

}

Personnellement, je le trouve très long à cause des fonctions. Comme j’aime bien avec des programmes propres, je vais mettre mes fonctions dans un autre fichier .ino !

Ajouter un fichier lié :

Capture1

On clique sur la petite flèche et sur « nouvel onglet » :

Capture2

On donne le nom de notre fonction, ici ça sera « affichenombre » (on ne met pas l’extension juste le nom de la fonction) et on y colle le code de notre fonction :

Capture3

Utilité :

Dans la plus part des programmes que j’écris et qui ont été présentés ici pour le moment, il n’y a aucune utilité à mettre les fonction dans un autre fichier, à part une meilleure visibilité dans le programme.

Cependant, quand on a besoin de récupérer une fonction en particulier dans un programme, on sait directement ou la trouver.

 

Publié le

Cannelés chorizo comté

Coucou ! Je teste aujourd’hui les cannelés chorizo comté !

 

Recette :

– 2 œufs

– 250ml de lait

– 50g de farine

– 50g de chorizo

– 50g de comté

– 30g d’huile de tournesol

– sel et poivre.

 

Alors on préchauffe le four à 200 chaleur tournante.

on mélange les œufs et la farine dans un saladier et on ajoute l’huile, le chorizo coupé en dés très petits et le comté.

imageimage

 

Il ne reste plus qu’à ajouter le lait et mettre dans les mini moules (en gros une cuillère à soupe on remplit les moules au 3/4).

image

 

Et finalement on met au four !

 

20 minutes après on obtient : image

 

tadam !!!!!!!

 

IMG_1956

Publié le

Capteur température avec afficheur 7 segments 4 digits

C’est mon premier article donc ça risque d’être un peu approximatif et je m’en excuse.

J’ai récupéré sur un vieux démodulateur, deux afficheurs 7 segments 2 digits qui étaient couplés sur un CI les afficheurs sont des LA4022 (à anode commune donc) voici les extraits du datasheet :
LA4022

LA4022-2

Voilà a quoi ressemble le module qui était monté sur mon vieux démodulateur :

IMG_1901

En faisant des recherches j’ai vu qu’il fallait ajouter des résistances de 330Ω sur les cathodes (les broches A, B, C, D, E, F et G). Donc sur un premier PCB j’ai monté des headers femelles et mes résistances :

pcb1

Pour la connexion à l’Arduino nano, j’ai monté un second PCB auquel j’ai rajouté une sonde DS18b20 (avec sa résistance de 4.7kΩ) :

Capture

Pour les librairies je les ai téléchargées ici :

https://arduino-info.wikispaces.com/Brick-Temperature-DS18B20

Le code complet :

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);



float temp;
int temp2;



int ledA = 13;
int ledB = 4;
int ledC = 8;
int ledD = 11;
int ledE = 12;
int ledF = 3;
int ledG = 5;
int Ana1 = 6;
int Ana2 = 7;
int Ana3 = 9;
int Ana4 = 10;

void setup() {
  Serial.begin(9600);
  pinMode(ledA, OUTPUT);
  pinMode(ledB, OUTPUT);
  pinMode(ledC, OUTPUT);
  pinMode(ledD, OUTPUT);
  pinMode(ledE, OUTPUT);
  pinMode(ledF, OUTPUT);
  pinMode(ledG, OUTPUT);
  pinMode(Ana1, OUTPUT);
  pinMode(Ana2, OUTPUT);
  pinMode(Ana3, OUTPUT);
  pinMode(Ana4, OUTPUT);
  sensors.begin();

}

void loop() {
   sensors.requestTemperatures();
  Serial.println(sensors.getTempCByIndex(0));
  temp2 = 10* sensors.getTempCByIndex(0);


for (int i=0; i<1000; i++)
    {

     int tab[3];
     tab[0] = temp2 % 10;
     tab[1] = (temp2 /10) % 10 ;
     tab[2] = temp2 /100 ;
     digitalWrite(Ana1,HIGH);
     digitalWrite(Ana2,LOW);
     digitalWrite(Ana3,LOW);
     digitalWrite(Ana4,LOW);
     affichenombre(tab[2]);
     delay(5);
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,HIGH);
     digitalWrite(Ana3,LOW);
     digitalWrite(Ana4,LOW);
     affichenombre(tab[1]);
     delay(5);
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,LOW);
     digitalWrite(Ana3,HIGH);
     digitalWrite(Ana4,LOW);
     digitalWrite(ledA,LOW);
     digitalWrite(ledB,LOW);
     digitalWrite(ledG,LOW);
     digitalWrite(ledF,LOW);
     digitalWrite(ledC,HIGH);
     digitalWrite(ledD,HIGH);
     digitalWrite(ledE,HIGH);
     delay(5);
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,LOW);
     digitalWrite(Ana3,LOW);
     digitalWrite(Ana4,HIGH);
     affichenombre(tab[0]);
     delay(5);

    }
     digitalWrite(Ana1,LOW);
     digitalWrite(Ana2,LOW);

}

void affichenombre(int nombre)

{
  if (nombre != 1 && nombre !=4)
  digitalWrite(ledA,LOW);
  else digitalWrite(ledA,HIGH);

  if (nombre != 5 && nombre !=6)
  digitalWrite(ledB,LOW);
  else digitalWrite(ledB,HIGH);

  if (nombre != 2)
  digitalWrite(ledC,LOW);
  else digitalWrite(ledC,HIGH);

  if (nombre != 1 && nombre !=4 && nombre != 7)
  digitalWrite(ledD,LOW);
  else digitalWrite(ledD,HIGH);

  if (nombre != 1 && nombre != 3 && nombre != 4 && nombre != 5 && nombre != 7 && nombre !=9)
  digitalWrite(ledE,LOW);
  else digitalWrite(ledE,HIGH);

  if (nombre != 1 && nombre != 2 && nombre != 3 && nombre !=7)
  digitalWrite(ledF,LOW);
  else digitalWrite(ledF,HIGH);

  if (nombre != 0 && nombre != 1 && nombre !=7)
  digitalWrite(ledG,LOW);
  else digitalWrite(ledG,HIGH);

}

 

Et voici le résultat :

CKWKrTAWwAARykD