Afficheur rotatif - Arduino | Le site de Quentin
Liste des realisations | Le site de Quentin
        Le site de quentin

Accueil     -      Inscription    -    Connexion  -    Realisations 





Afficheur rotatif - Arduino

                           

Voici un afficheur très particulier car il ne nécessite que 9 leds. Chaque LED clignote d'une certaine fâcon pour que si on fait tourner la plaque, des choses s'affichent. Il y a plusieurs mode: un chronomètre, un thermomètre, un petit jeu où il faut deviner le nombre auquel l'arduino pense et une petite déco :).

Matériel nécessaire:

Le cablage:

Programme:

aff_rot.ccp
#include <Wire.h>
#include <Adafruit_BMP085.h>

#include "caractere.h"
#include <IRremote.h>

Adafruit_BMP085 bmp;

Fanled fanled;

long nombre = 0;

long tmp = 0;

int RECV_PIN = 11;

int x_pers = 30;
int y_pers = 1;

long chrono_total = 0;
long chrono_pause = 0;

long tmp_chrono = 0;

bool chrono_go = 0;

int led_animation = 1;

int mode = 0;

bool init_jeux = 0;
String nombre_jeux = "";
int nb_aleat = 0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  Serial.begin(9600);

  for(int i = 2; i <= 10 ;i++){
    pinMode(i,OUTPUT);
    digitalWrite(i,1);
    Serial.println(i);
  }

  pinMode(12,INPUT);
  digitalWrite(12,1);

  irrecv.enableIRIn(); 

  if (!bmp.begin()) {
    Serial.println("Erreur BMP085");
  }

  for(int i = 2; i <= 10;i++){
    digitalWrite(i,0);
    
  }
  randomSeed(analogRead(A0));

}

void loop() {
  if(mode == 1){
    chrono();
  }
  if(mode == 2){
    thermometre();
  }
  if(mode == 3){
    deco();
  }
  if(mode == 4){
    if(init_jeux == 0){
      nombre_jeux = "";
      nb_aleat = random(0,100);
      init_jeux = 1;
    }
    jeux_nombre();
  }
  
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    if(results.value == 16738455){
      mode = 1;
    }
    if(results.value == 16750695){
      mode = 2;
    }
    if(results.value == 16756815){
      mode = 3;
    }
    if(results.value == 16724175){
      mode = 4;
    }

    irrecv.resume();
  }
}

void chrono(){
  tmp_chrono = millis();
  
  String text = "";
  int minute = chrono_total / 60000;
  int seconde = (((chrono_total) - minute * 60000)/1000);
  
  text.concat(minute);
  text.concat(":");
  if(seconde < 10)text.concat("0");
  text.concat(seconde);
  fanled.print(text);

  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    if(results.value == 16712445){
      chrono_go = !chrono_go;
    }
    if(results.value == 16736925 && chrono_go == 0){
      chrono_total = 0;
    }

    if(results.value == 16750695){
      mode = 2;
    }

    irrecv.resume(); 
  }
  if(chrono_go == 1){
    chrono_total += (millis() - tmp_chrono);
  }

  
}

void thermometre(){
  String thermo = "";
  thermo.concat(int(bmp.readTemperature()));
  thermo.concat("C");

  fanled.print(thermo);
}

void deco(){
  while(digitalRead(12) == 1){
    if (irrecv.decode(&results)) {
      if(results.value == 16738455){
        mode = 1;
        return;
      }
      if(results.value == 16750695){
        mode = 2;
        return;
      }

      irrecv.resume();
    }  
  }
  for(int j = 0; j < 8;j++){
    for(int i = 2; i <= 10;i++){

      digitalWrite(i,1);
      delayMicroseconds(2000);
      digitalWrite(i,0);
      if (irrecv.decode(&results)) {
        if(results.value == 16738455){
          mode = 1;
          return;
        }
        if(results.value == 16750695){
          mode = 2;
          return;
        }

        irrecv.resume();
      }
    }
  }

}

void jeux_nombre(){
  fanled.print(nombre_jeux); 

  if (irrecv.decode(&results)) {
    if(results.value == 16712445){
      int nb = nombre_jeux.toInt();
      if(nb > nb_aleat){
       for(int i = 0; i < 7;i++){
         while(digitalRead(12) == 1);
           delay(2);
           digitalWrite(5,1);
           delayMicroseconds(5000);
           digitalWrite(5,0);
        }
      }
      if(nb < nb_aleat){
        for(int i = 0; i < 7;i++){
          while(digitalRead(12) == 1);
            delay(100);
            delayMicroseconds(20000);
            digitalWrite(5,1);
            delayMicroseconds(5000);
            digitalWrite(5,0);
          }
       }
       if(nb == nb_aleat){
          for(int i = 0; i < 7;i++){
              digitalWrite(5,1);
              delay(500);
          }
          digitalWrite(5,0);
          mode = 0;
          init_jeux = 0;
       }
       
       nombre_jeux = "";
    }
    switch(results.value){
      
      case 16738455:
        nombre_jeux.concat("1");
        break;
      case 16750695:
        nombre_jeux.concat("2");
        break;
      case 16756815:
        nombre_jeux.concat("3");
        break;
      case 16724175:
        nombre_jeux.concat("4");
        break;
      case 16718055:
        nombre_jeux.concat("5");
        break;
      case 16743045:
        nombre_jeux.concat("6");
        break;
      case 16716015:
        nombre_jeux.concat("7");
        break;
      case 16726215:
        nombre_jeux.concat("8");
        break;
      case 16734885:
        nombre_jeux.concat("9");
        break;
      case 16730805:
        nombre_jeux.concat("0");
        break;
    }
    
    irrecv.resume();
  }
}

caractere.h
bool lettre[108][10] = {
  {0,0,1,1,1,1,1,1,0,0},
  {0,1,1,1,1,1,1,1,1,0},
  {0,1,0,0,0,0,0,1,1,0},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {0,1,1,0,0,0,0,1,1,0},
  {0,1,1,1,1,1,1,1,1,0},
  {0,0,0,1,1,1,0,0,0,0},
  {0,1,1,1,1,1,0,0,0,0},
  {0,1,1,1,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,0,0},
  {1,1,0,0,0,0,0,0,0,0},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {0,1,1,1,1,1,1,1,1,1},
  {0,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,0,0},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,0,0},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,0,1,1,1,0},
  {0,0,0,0,0,1,1,1,0,0},
  {0,0,0,0,1,1,1,0,0,0},
  {0,0,0,1,1,1,0,0,0,0},
  {0,0,1,1,1,0,0,0,0,0},
  {0,1,1,1,0,0,0,0,0,0},
  {0,1,1,0,0,0,0,0,0,0},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {0,0,0,0,0,0,0,0,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,1,1,1,1,1,1,1},
  {1,1,1,0,1,1,1,1,1,1},
  {1,1,1,0,1,1,1,1,1,1},
  {1,1,1,0,1,1,0,0,0,0},
  {0,0,0,1,1,0,0,0,0,0},
  {0,0,0,1,1,0,0,0,0,0},
  {0,0,0,1,1,0,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,0,1,1,1,1,1},
  {0,0,0,0,0,1,1,1,1,1},
  {0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,1,1,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0}

};




String index_lettre = "0123456789C:+-";


class Fanled{
  public:
    void print(String mot){
      while(digitalRead(12) == 1);
      for(int i = mot.length() - 1; i >= 0;i--){
        char c = mot.charAt(i);

        int index = index_lettre.indexOf(c) * 9;
        
        Serial.println(index);
        for(int x = 9; x >= 0 ;x--){
          for(int y = index; y < index + 9; y++){
            digitalWrite(y - index + 2,lettre[y][x]);
          }
        delayMicroseconds(700); 

        }
        
        for(int i = 2; i <= 10;i++){
          digitalWrite(i,0);
        }

        delayMicroseconds(1200);
 
      }
      for(int i = 2; i <= 10;i++){
        digitalWrite(i,0);
      }
    }
};



Vous aimez cette réalisations? Faites un don, cela ne coute que le prix d'un café(2euros) et ne prend que quelques minutes. Payement très sécurisé grâce au service star pass: c'est un service de payement en ligne simple qui permet de payer en envoyant un sms. Si vous faites ce don, je pourrais investir dans du matériel et vous proposer d'avantage de réalisations. Merci!!!
Faire un don

Pt'it Forum!

Quentin Lacombe