Un petit afficheur de texte en POV

Parlez nous de vos projets et de vos idées, imaginez des applications

Un petit afficheur de texte en POV

Message non lude phil » Ven 9 Sep 2011 09:46

Bonjour,

Juste quelques mots pour présenter un petit projet « rigolo ».
C’est un afficheur de texte qui utilise la persistance rétinienne (POV in english). Comme on dit dans Full Metal Jacket : « There are many like it but this one is mine.». En effet, un petit coup de google et vous trouverez des tas de projet de ce type.
Celui-ci à la particularité d’utiliser un capteur de basculement pour déclencher l’écriture du texte. Ce capteur est celui proposé par snootlab dans son starter kit ou seul ici.

Voici un petit schéma de montage
Image

Voici un petit détail pour l’utilisation du capteur de basculement
Image

Le montage final (magnifique non !!!)
Image

Image Image

Image Image

Image Image

Le résultat final…




Enfin Le code (télécharger le code)

==> Attention UPDATE ICI http://forum.snootlab.com/viewtopic.php?f=32&t=142&p=3877#p3877


Code: Tout sélectionner
//simple POV display with 7 leds and 1 tilt sensor
//by phil (www.telalab.org)
//7x5 ascii font from TVout Lib
byte charbook[672] = {
   //32 Space
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   //33 Exclamation !
   0b01000000,
   0b01000000,
   0b01000000,
   0b01000000,
   0b01000000,
   0b00000000,
   0b01000000,
   //34 Quotes "
   0b01010000,
   0b01010000,
   0b01010000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   //35 Number #
   0b00000000,
   0b00000000,
   0b01010000,
   0b11111000,
   0b01010000,
   0b11111000,
   0b01010000,
   //36 Dollars $
   0b00100000,
   0b01110000,
   0b10100000,
   0b01110000,
   0b00101000,
   0b01110000,
   0b00100000,
   //37 Percent %
   0b01000000,
   0b10101000,
   0b01010000,
   0b00100000,
   0b01010000,
   0b10101000,
   0b00010000,
   //38 Ampersand &
   0b00100000,
   0b01010000,
   0b10100000,
   0b01000000,
   0b10101000,
   0b10010000,
   0b01101000,
   //39 Single Quote '
   0b01000000,
   0b01000000,
   0b01000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   //40 Left Parenthesis (
   0b00010000,
   0b00100000,
   0b01000000,   
   0b01000000,
   0b01000000,
   0b00100000,
   0b00010000,
   //41 Right Parenthesis )
   0b01000000,
   0b00100000,
   0b00010000,
   0b00010000,
   0b00010000,
   0b00100000,
   0b01000000,
   //42 Star *
   0b00010000,
   0b00111000,
   0b00010000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   //43 Plus +
   0b00000000,
   0b00100000,
   0b00100000,
   0b11111000,
   0b00100000,
   0b00100000,
   0b00000000,
   //44 Comma ,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00010000,
   0b00010000,
   //45 Minus -
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b11111000,
   0b00000000,
   0b00000000,
   //46 Period .
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00010000,
   // 47 Backslash /
   0b00000000,
   0b00001000,
   0b00010000,
   0b00100000,
   0b01000000,
   0b10000000,
   0b00000000,
   // 48 Zero
   0b01110000,
   0b10001000,
   0b10101000,
   0b10101000,
   0b10001000,
   0b01110000,
   0b00000000,
   //49 One
   0b00100000,
   0b01100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b01110000,
   0b00000000, 
   //50 two
   0b01110000,
   0b10001000,
   0b00010000,
   0b00100000,
   0b01000000,
   0b11111000,
   0b00000000,
    //51 Three
   0b11111000,
   0b00010000,
   0b00100000,
   0b00010000,
   0b10001000,
   0b01110000,
   0b00000000,
   //52 Four
   0b10010000,
   0b10010000,
   0b10010000,
   0b11111000,
   0b00010000,
   0b00010000,
   0b00000000,
   //53 Five
   0b11111000,
   0b10000000,
   0b11110000,
   0b00001000,
   0b10001000,
   0b01110000,
   0b00000000,
   //54 Six
   0b01110000,
   0b10000000,
   0b11110000,
   0b10001000,
   0b10001000,
   0b01110000,
   0b00000000,
   //55 Seven
   0b11111000,
   0b00001000,
   0b00010000,
   0b00100000,
   0b01000000,
   0b10000000,
   0b00000000,
   //56 Eight
   0b01110000,
   0b10001000,
   0b01110000,
   0b10001000,
   0b10001000,
   0b01110000,
   0b00000000,
   //57 Nine
   0b01110000,
   0b10001000,
   0b10001000,
   0b01111000,
   0b00001000,
   0b01110000,
   0b00000000,
   //58 :
   0b00000000,
   0b00000000,
   0b00100000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00100000,
   //59 ;
   0b00000000,
   0b00000000,
   0b00100000,
   0b00000000,
   0b00100000,
   0b00100000,
   0b01000000,
   //60 <
   0b00000000,
   0b00011000,
   0b01100000,
   0b10000000,
   0b01100000,
   0b00011000,
   0b00000000,
   //61 =
   0b00000000,
   0b00000000,
   0b01111000,
   0b00000000,
   0b01111000,
   0b00000000,
   0b00000000,
   //62 >
   0b00000000,
   0b11000000,
   0b00110000,
   0b00001000,
   0b00110000,
   0b11000000,
   0b00000000,
   //63 ?
   0b01100000,
   0b10010000,
   0b00100000,
   0b00100000,
   0b00000000,
   0b00100000,
   0b00000000,
   //64 @
   0b01110000,
   0b10001000,
   0b10011000,
   0b10101000,
   0b10010000,
   0b10001000,
   0b01110000,
   //65 A
   0b00100000,
   0b01010000,
   0b10001000,
   0b11111000,
   0b10001000,
   0b10001000,
   0b00000000,
   //B
   0b11110000,
   0b10001000,
   0b1111000,
   0b10001000,
   0b10001000,
   0b11110000,
   0b00000000,
   //C
   0b01110000,
   0b10001000,
   0b10000000,
   0b10000000,
   0b10001000,
   0b01110000,
   0b00000000,
   //D
   0b11110000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b11110000,
   0b00000000,
   //E
   0b11111000,
   0b10000000,
   0b11111000,
   0b10000000,
   0b10000000,
   0b11111000,
   0b00000000,
   //F
   0b11111000,
   0b10000000,
   0b11110000,
   0b10000000,
   0b10000000,
   0b10000000,
   0b00000000,
   //G
   0b01110000,
   0b10001000,
   0b10000000,
   0b10011000,
   0b10001000,
   0b01110000,
   0b00000000,
   //H
   0b10001000,
   0b10001000,
   0b11111000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b00000000,
   //I
   0b01110000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b01110000,
   0b00000000,
   //J
   0b00111000,
   0b00010000,
   0b00010000,
   0b00010000,
   0b10010000,
   0b01100000,
   0b00000000,
   //K
   0b10001000,
   0b10010000,
   0b11100000,
   0b10100000,
   0b10010000,
   0b10001000,
   0b00000000,
   //L
   0b10000000,
   0b10000000,
   0b10000000,
   0b10000000,
   0b10000000,
   0b11111000,
   0b00000000,
   //M
   0b10001000,
   0b11011000,
   0b10101000,
   0b10101000,
   0b10001000,
   0b10001000,
   0b00000000,
   //N
   0b10001000,
   0b10001000,
   0b11001000,
   0b10101000,
   0b10011000,
   0b10001000,
   0b00000000,
   //O
   0b01110000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b01110000,
   0b00000000,
   //P
   0b11110000,
   0b10001000,
   0b11110000,
   0b10000000,
   0b10000000,
   0b10000000,
   0b00000000,
   //Q
   0b01110000,
   0b10001000,
   0b10001000,
   0b10101000,
   0b10010000,
   0b01101000,
   0b00000000,
   //R
   0b11110000,
   0b10001000,
   0b11110000,
   0b10100000,
   0b10010000,
   0b10001000,
   0b00000000,
   //S
   0b01111000,
   0b10000000,
   0b01110000,
   0b00001000,
   0b00001000,
   0b11110000,
   0b00000000,
   //T
   0b11111000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00000000,
   //U
   0b10001000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b01110000,
   0b00000000,
   //V
   0b10001000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b01010000,
   0b00100000,
   0b00000000,
   //W
   0b10001000,
   0b10001000,
   0b10101000,
   0b10101000,
   0b10101000,
   0b01010000,
   0b00000000,
   //X
   0b10001000,
   0b01010000,
   0b00100000,
   0b01010000,
   0b10001000,
   0b10001000,
   0b00000000,
   //Y
   0b10001000,
   0b10001000,
   0b01010000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00000000,
   //Z
   0b11111000,
   0b00001000,
   0b00010000,
   0b00100000,
   0b01000000,
   0b11111000,
   0b00000000,
   //91 [
   0b11100000,
   0b10000000,
   0b10000000,
   0b10000000,
   0b10000000,
   0b11100000,
   0b00000000,
   //92 (backslash)
   0b00000000,
   0b10000000,
   0b01000000,
   0b00100000,
   0b00010000,
   0b00001000,
   0b00000000,
   //93 ]
   0b00111000,
   0b00001000,
   0b00001000,
   0b00001000,
   0b00001000,
   0b00111000,
   0b00000000,
   //94 ^
   0b00100000,
   0b01010000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   //95 _
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b11111000,
   //96 `
   0b10000000,
   0b01000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   //97 a
   0b00000000,
   0b01100000,
   0b00010000,
   0b01110000,
   0b10010000,
   0b01100000,
   0b00000000,
   //98 b
   0b10000000,
   0b10000000,
   0b11100000,
   0b10010000,
   0b10010000,
   0b11100000,
   0b00000000,
   //99 c
   0b00000000,
   0b00000000,
   0b01110000,
   0b10000000,
   0b10000000,
   0b01110000,
   0b00000000,
   // 100 d
   0b00010000,
   0b00010000,
   0b01110000,
   0b10010000,
   0b10010000,
   0b01110000,
   0b00000000,
   //101 e
   0b00000000,
   0b01100000,
   0b10010000,
   0b11110000,
   0b10000000,
   0b01110000,
   0b00000000,
   //102 f
   0b00110000,
   0b01000000,
   0b11100000,
   0b01000000,
   0b01000000,
   0b01000000,
   0b00000000,
   //103 g
   0b00000000,
   0b01100000,
   0b10010000,
   0b01110000,
   0b00010000,
   0b00010000,
   0b01100000,
   //104 h
   0b10000000,
   0b10000000,
   0b11100000,
   0b10010000,
   0b10010000,
   0b10010000,
   0b00000000,
   //105 i
   0b00100000,
   0b00000000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b01110000,
   0b00000000,
   //106 j
   0b00010000,
   0b00000000,
   0b00110000,
   0b00010000,
   0b00010000,
   0b00010000,
   0b01100000,
   //107 k
   0b10000000,
   0b10010000,
   0b10100000,
   0b11000000,
   0b10100000,
   0b10010000,
   0b00000000,
   //108 l
   0b01100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b01110000,
   0b00000000,
   //109 m
   0b00000000,
   0b00000000,
   0b01010000,
   0b10101000,
   0b10101000,
   0b10101000,
   0b00000000,
   //110 n
   0b00000000,
   0b00000000,
   0b11110000,
   0b10001000,
   0b10001000,
   0b10001000,
   0b00000000,
   //111 o
   0b00000000,
   0b00000000,
   0b01100000,
   0b10010000,
   0b10010000,
   0b01100000,
   0b00000000,
   //112 p
   0b00000000,
   0b00000000,
   0b01100000,
   0b10010000,
   0b11110000,
   0b10000000,
   0b10000000,
   //113 q
   0b00000000,
   0b00000000,
   0b01100000,
   0b10010000,
   0b11110000,
   0b00010000,
   0b00010000,
   //114 r
   0b00000000,
   0b00000000,
   0b10110000,
   0b01001000,
   0b01000000,
   0b01000000,
   0b00000000,
   //115 s
   0b00000000,
   0b00110000,
   0b01000000,
   0b00100000,
   0b00010000,
   0b01100000,
   0b00000000,
   //116 t
   0b01000000,
   0b01000000,
   0b11100000,
   0b01000000,
   0b01000000,
   0b01000000,
   0b00000000,
   // 117u
   0b00000000,
   0b00000000,
   0b10010000,
   0b10010000,
   0b10010000,
   0b01100000,
   0b00000000,
   //118 v
   0b00000000,
   0b00000000,
   0b10001000,
   0b10001000,
   0b01010000,
   0b00100000,
   0b00000000,
   //119 w
   0b00000000,
   0b00000000,
   0b00000000,
   0b10101000,
   0b10101000,
   0b01010000,
   0b00000000,
   //120 x
   0b00000000,
   0b10001000,
   0b01010000,
   0b00100000,
   0b01010000,
   0b10001000,
   0b00000000,
   //121 y
   0b00000000,
   0b00000000,
   0b10010000,
   0b10010000,
   0b01100000,
   0b01000000,
   0b10000000,
   //122 z
   0b00000000,
   0b00000000,
   0b11110000,
   0b00100000,
   0b01000000,
   0b11110000,
   0b00000000,
   //123 {
   0b00100000,
   0b01000000,
   0b01000000,
   0b10000000,
   0b01000000,
   0b01000000,
   0b00100000,
   //124 |
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   0b00100000,
   //125 }
   0b00100000,
   0b00010000,
   0b00010000,
   0b00001000,
   0b00010000,   
   0b00010000,
   0b00100000,
   //126 ~
   0b00000000,
   0b00000000,
   0b01000000,
   0b10101000,
   0b00010000,
   0b00000000,
   0b00000000,
   //127 DEL
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000

};



#define delinterchar 700 //delay between 2 char
#define delinterpoint 340 //delay between 2 points of a char
#define led1 6
#define led2 7
#define led3 8
#define led4 9
#define led5 10
#define led6 11
#define led7 12
#define sensorPin 2
int boucle = 0;
#define repet 10 //number of repetition before changing message
char texte[]  = "SNOOTLAB"; // data to write on startup
char texte2[] = "RULEZ"; // data to write after "repet" writing of the first message

int a = 0;
int leds[7] = {led1,led2,led3,led4,led5,led6,led7};

void setup()   
{               
  pinMode(led1, OUTPUT);     
  pinMode(led2, OUTPUT);     
  pinMode(led3, OUTPUT);     
  pinMode(led4, OUTPUT);     
  pinMode(led5, OUTPUT);     
  pinMode(led6, OUTPUT);     
  pinMode(led7, OUTPUT); 
  pinMode(sensorPin, INPUT); 
}



void alloff()
{
  digitalWrite(leds[0], LOW);
  digitalWrite(leds[1], LOW);
  digitalWrite(leds[2], LOW);
  digitalWrite(leds[3], LOW);
  digitalWrite(leds[4], LOW);
  digitalWrite(leds[5], LOW);
  digitalWrite(leds[6], LOW);
}

 
void loop()                     
{
 
  if (digitalRead(2)==LOW)
  {
    delay(50);
 
 
    if (boucle< (repet + 1))
    {
      for (a=0;a<sizeof(texte);a++)
      {
        displayChar(texte[a]);
        alloff();
        delayMicroseconds(delinterchar);
      }
    }
   
    if (boucle>repet)
    {
      for (a=0;a<sizeof(texte2);a++)
      {
        displayChar(texte2[a]);
        alloff();
        delayMicroseconds(delinterchar);
      }
    }
    boucle++;
    if (boucle> ((repet*2)+1)) boucle = 0;
  }
}


void displayChar(char c)
{
  c = c - 32;
  for (int i = 7;i>2;i--)
  {
    for (int j = 0;j<7;j++)
    {
     if (bitRead(charbook[(7*c+j)],i) == 1)  digitalWrite(leds[j], HIGH);
     else digitalWrite(leds[j], LOW);
    }
  delayMicroseconds(delinterpoint);
  }
}

void displayCharR(char c)
{
  c = c - 32;
  for (int i = 3;i<8;i++)
  {
    for (int j = 0;j<7;j++)
    {
     if (bitRead(charbook[(7*c+j)],i) == 1)  digitalWrite(leds[j], HIGH);
     else digitalWrite(leds[j], LOW);
    }
  delayMicroseconds(delinterpoint);
  }
}



Si vous voulez faire un affichage avec plus de caractères, vous pouvez diminuer ces deux paramètres
Code: Tout sélectionner
#define delinterchar 700 //delay between 2 char
#define delinterpoint 340 //delay between 2 points of a char


Vous pouvez également changer les pins des leds et du capteur avec ces parametres
Code: Tout sélectionner
#define led1 6
#define led2 7
#define led3 8
#define led4 9
#define led5 10
#define led6 11
#define led7 12
#define sensorPin 2


Actuellement le code ci-dessus affiche deux messages "SNOOTLAB" et "RULEZ"
Ces deux messages sont definis là
Code: Tout sélectionner
char texte[] = "SNOOTLAB"; // data to write on startup
char texte2[] = "RULEZ"; // data to write after "repet" writing of the first message


Le message change au bout de 10 affichages le paramètre est celui là
Code: Tout sélectionner
#define repet 10 //number of repetition before changing message


Si vous souhaitez modifier le code avec des interruptions, gérer l’affichage du message dans les deux sens (cf fonction displayCharR(char c)), ça m’intéresse… Postez donc une réponse sur ce forum.
Dernière édition par phil le Ven 8 Fév 2013 23:38, édité 8 fois.
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 183
Inscription: Mer 7 Sep 2011 11:19

Re: Un petit afficheur de texte en POV

Message non lude Lionel » Ven 9 Sep 2011 10:11

Aaaaaaaarf !!!

Excellent Phil, t'as même personnalisé le texte pour une spéciale dédicace !!! :D

Bon, et bien un grand merci !!

C'est très bien les projets simples et efficaces , ça peut inspirer/tenter/former du monde 8-)

A bientôt !!

(On ajoute un accéléro sur la version 2 ?? ;) )
Image - Distributeur officiel Arduino - Conception de shields
Avatar de l’utilisateur
Lionel
 
Messages: 734
Inscription: Mar 21 Déc 2010 09:52
Localisation: Toulouse

Re: Un petit afficheur de texte en POV

Message non lude phil » Lun 5 Mar 2012 10:03

Un petit update pour ce code...

Maintenant, il n'y a plus besoin de définir les durées, elles sont automatiquement calculées.
Il est donc inutile de modifier ces variables en fonction de la taille du message
Code: Tout sélectionner
#define delinterchar 700 //delay between 2 char
#define delinterpoint 340 //delay between 2 points of a char

En pratique, il suffit juste de faire un mouvement régulier pour que ça marche 8-) 8-) 8-)

Le code : ( télécharger le code)

Code: Tout sélectionner
//simple POV display with 7 leds and 1 tilt sensor
//by phil (www.telalab.org)
//7x5 ascii font from TVout Lib
byte charbook[672] = {
  //32 Space
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  //33 Exclamation !
  0b01000000,
  0b01000000,
  0b01000000,
  0b01000000,
  0b01000000,
  0b00000000,
  0b01000000,
  //34 Quotes "
  0b01010000,
  0b01010000,
  0b01010000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  //35 Number #
  0b00000000,
  0b00000000,
  0b01010000,
  0b11111000,
  0b01010000,
  0b11111000,
  0b01010000,
  //36 Dollars $
  0b00100000,
  0b01110000,
  0b10100000,
  0b01110000,
  0b00101000,
  0b01110000,
  0b00100000,
  //37 Percent %
  0b01000000,
  0b10101000,
  0b01010000,
  0b00100000,
  0b01010000,
  0b10101000,
  0b00010000,
  //38 Ampersand &
  0b00100000,
  0b01010000,
  0b10100000,
  0b01000000,
  0b10101000,
  0b10010000,
  0b01101000,
  //39 Single Quote '
  0b01000000,
  0b01000000,
  0b01000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  //40 Left Parenthesis (
  0b00010000,
  0b00100000,
  0b01000000,   
  0b01000000,
  0b01000000,
  0b00100000,
  0b00010000,
  //41 Right Parenthesis )
  0b01000000,
  0b00100000,
  0b00010000,
  0b00010000,
  0b00010000,
  0b00100000,
  0b01000000,
  //42 Star *
  0b00010000,
  0b00111000,
  0b00010000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  //43 Plus +
  0b00000000,
  0b00100000,
  0b00100000,
  0b11111000,
  0b00100000,
  0b00100000,
  0b00000000,
  //44 Comma ,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00010000,
  0b00010000,
  //45 Minus -
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b11111000,
  0b00000000,
  0b00000000,
  //46 Period .
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00010000,
  // 47 Backslash /
  0b00000000,
  0b00001000,
  0b00010000,
  0b00100000,
  0b01000000,
  0b10000000,
  0b00000000,
  // 48 Zero
  0b01110000,
  0b10001000,
  0b10101000,
  0b10101000,
  0b10001000,
  0b01110000,
  0b00000000,
  //49 One
  0b00100000,
  0b01100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b01110000,
  0b00000000, 
  //50 two
  0b01110000,
  0b10001000,
  0b00010000,
  0b00100000,
  0b01000000,
  0b11111000,
  0b00000000,
  //51 Three
  0b11111000,
  0b00010000,
  0b00100000,
  0b00010000,
  0b10001000,
  0b01110000,
  0b00000000,
  //52 Four
  0b10010000,
  0b10010000,
  0b10010000,
  0b11111000,
  0b00010000,
  0b00010000,
  0b00000000,
  //53 Five
  0b11111000,
  0b10000000,
  0b11110000,
  0b00001000,
  0b10001000,
  0b01110000,
  0b00000000,
  //54 Six
  0b01110000,
  0b10000000,
  0b11110000,
  0b10001000,
  0b10001000,
  0b01110000,
  0b00000000,
  //55 Seven
  0b11111000,
  0b00001000,
  0b00010000,
  0b00100000,
  0b01000000,
  0b10000000,
  0b00000000,
  //56 Eight
  0b01110000,
  0b10001000,
  0b01110000,
  0b10001000,
  0b10001000,
  0b01110000,
  0b00000000,
  //57 Nine
  0b01110000,
  0b10001000,
  0b10001000,
  0b01111000,
  0b00001000,
  0b01110000,
  0b00000000,
  //58 :
  0b00000000,
  0b00000000,
  0b00100000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00100000,
  //59 ;
  0b00000000,
  0b00000000,
  0b00100000,
  0b00000000,
  0b00100000,
  0b00100000,
  0b01000000,
  //60 <
  0b00000000,
  0b00011000,
  0b01100000,
  0b10000000,
  0b01100000,
  0b00011000,
  0b00000000,
  //61 =
  0b00000000,
  0b00000000,
  0b01111000,
  0b00000000,
  0b01111000,
  0b00000000,
  0b00000000,
  //62 >
  0b00000000,
  0b11000000,
  0b00110000,
  0b00001000,
  0b00110000,
  0b11000000,
  0b00000000,
  //63 ?
  0b01100000,
  0b10010000,
  0b00100000,
  0b00100000,
  0b00000000,
  0b00100000,
  0b00000000,
  //64 @
  0b01110000,
  0b10001000,
  0b10011000,
  0b10101000,
  0b10010000,
  0b10001000,
  0b01110000,
  //65 A
  0b00100000,
  0b01010000,
  0b10001000,
  0b11111000,
  0b10001000,
  0b10001000,
  0b00000000,
  //B
  0b11110000,
  0b10001000,
  0b1111000,
  0b10001000,
  0b10001000,
  0b11110000,
  0b00000000,
  //C
  0b01110000,
  0b10001000,
  0b10000000,
  0b10000000,
  0b10001000,
  0b01110000,
  0b00000000,
  //D
  0b11110000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b11110000,
  0b00000000,
  //E
  0b11111000,
  0b10000000,
  0b11111000,
  0b10000000,
  0b10000000,
  0b11111000,
  0b00000000,
  //F
  0b11111000,
  0b10000000,
  0b11110000,
  0b10000000,
  0b10000000,
  0b10000000,
  0b00000000,
  //G
  0b01110000,
  0b10001000,
  0b10000000,
  0b10011000,
  0b10001000,
  0b01110000,
  0b00000000,
  //H
  0b10001000,
  0b10001000,
  0b11111000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b00000000,
  //I
  0b01110000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b01110000,
  0b00000000,
  //J
  0b00111000,
  0b00010000,
  0b00010000,
  0b00010000,
  0b10010000,
  0b01100000,
  0b00000000,
  //K
  0b10001000,
  0b10010000,
  0b11100000,
  0b10100000,
  0b10010000,
  0b10001000,
  0b00000000,
  //L
  0b10000000,
  0b10000000,
  0b10000000,
  0b10000000,
  0b10000000,
  0b11111000,
  0b00000000,
  //M
  0b10001000,
  0b11011000,
  0b10101000,
  0b10101000,
  0b10001000,
  0b10001000,
  0b00000000,
  //N
  0b10001000,
  0b10001000,
  0b11001000,
  0b10101000,
  0b10011000,
  0b10001000,
  0b00000000,
  //O
  0b01110000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b01110000,
  0b00000000,
  //P
  0b11110000,
  0b10001000,
  0b11110000,
  0b10000000,
  0b10000000,
  0b10000000,
  0b00000000,
  //Q
  0b01110000,
  0b10001000,
  0b10001000,
  0b10101000,
  0b10010000,
  0b01101000,
  0b00000000,
  //R
  0b11110000,
  0b10001000,
  0b11110000,
  0b10100000,
  0b10010000,
  0b10001000,
  0b00000000,
  //S
  0b01111000,
  0b10000000,
  0b01110000,
  0b00001000,
  0b00001000,
  0b11110000,
  0b00000000,
  //T
  0b11111000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00000000,
  //U
  0b10001000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b01110000,
  0b00000000,
  //V
  0b10001000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b01010000,
  0b00100000,
  0b00000000,
  //W
  0b10001000,
  0b10001000,
  0b10101000,
  0b10101000,
  0b10101000,
  0b01010000,
  0b00000000,
  //X
  0b10001000,
  0b01010000,
  0b00100000,
  0b01010000,
  0b10001000,
  0b10001000,
  0b00000000,
  //Y
  0b10001000,
  0b10001000,
  0b01010000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00000000,
  //Z
  0b11111000,
  0b00001000,
  0b00010000,
  0b00100000,
  0b01000000,
  0b11111000,
  0b00000000,
  //91 [
  0b11100000,
  0b10000000,
  0b10000000,
  0b10000000,
  0b10000000,
  0b11100000,
  0b00000000,
  //92 (backslash)
  0b00000000,
  0b10000000,
  0b01000000,
  0b00100000,
  0b00010000,
  0b00001000,
  0b00000000,
  //93 ]
  0b00111000,
  0b00001000,
  0b00001000,
  0b00001000,
  0b00001000,
  0b00111000,
  0b00000000,
  //94 ^
  0b00100000,
  0b01010000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  //95 _
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b11111000,
  //96 `
  0b10000000,
  0b01000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  //97 a
  0b00000000,
  0b01100000,
  0b00010000,
  0b01110000,
  0b10010000,
  0b01100000,
  0b00000000,
  //98 b
  0b10000000,
  0b10000000,
  0b11100000,
  0b10010000,
  0b10010000,
  0b11100000,
  0b00000000,
  //99 c
  0b00000000,
  0b00000000,
  0b01110000,
  0b10000000,
  0b10000000,
  0b01110000,
  0b00000000,
  // 100 d
  0b00010000,
  0b00010000,
  0b01110000,
  0b10010000,
  0b10010000,
  0b01110000,
  0b00000000,
  //101 e
  0b00000000,
  0b01100000,
  0b10010000,
  0b11110000,
  0b10000000,
  0b01110000,
  0b00000000,
  //102 f
  0b00110000,
  0b01000000,
  0b11100000,
  0b01000000,
  0b01000000,
  0b01000000,
  0b00000000,
  //103 g
  0b00000000,
  0b01100000,
  0b10010000,
  0b01110000,
  0b00010000,
  0b00010000,
  0b01100000,
  //104 h
  0b10000000,
  0b10000000,
  0b11100000,
  0b10010000,
  0b10010000,
  0b10010000,
  0b00000000,
  //105 i
  0b00100000,
  0b00000000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b01110000,
  0b00000000,
  //106 j
  0b00010000,
  0b00000000,
  0b00110000,
  0b00010000,
  0b00010000,
  0b00010000,
  0b01100000,
  //107 k
  0b10000000,
  0b10010000,
  0b10100000,
  0b11000000,
  0b10100000,
  0b10010000,
  0b00000000,
  //108 l
  0b01100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b01110000,
  0b00000000,
  //109 m
  0b00000000,
  0b00000000,
  0b01010000,
  0b10101000,
  0b10101000,
  0b10101000,
  0b00000000,
  //110 n
  0b00000000,
  0b00000000,
  0b11110000,
  0b10001000,
  0b10001000,
  0b10001000,
  0b00000000,
  //111 o
  0b00000000,
  0b00000000,
  0b01100000,
  0b10010000,
  0b10010000,
  0b01100000,
  0b00000000,
  //112 p
  0b00000000,
  0b00000000,
  0b01100000,
  0b10010000,
  0b11110000,
  0b10000000,
  0b10000000,
  //113 q
  0b00000000,
  0b00000000,
  0b01100000,
  0b10010000,
  0b11110000,
  0b00010000,
  0b00010000,
  //114 r
  0b00000000,
  0b00000000,
  0b10110000,
  0b01001000,
  0b01000000,
  0b01000000,
  0b00000000,
  //115 s
  0b00000000,
  0b00110000,
  0b01000000,
  0b00100000,
  0b00010000,
  0b01100000,
  0b00000000,
  //116 t
  0b01000000,
  0b01000000,
  0b11100000,
  0b01000000,
  0b01000000,
  0b01000000,
  0b00000000,
  // 117u
  0b00000000,
  0b00000000,
  0b10010000,
  0b10010000,
  0b10010000,
  0b01100000,
  0b00000000,
  //118 v
  0b00000000,
  0b00000000,
  0b10001000,
  0b10001000,
  0b01010000,
  0b00100000,
  0b00000000,
  //119 w
  0b00000000,
  0b00000000,
  0b00000000,
  0b10101000,
  0b10101000,
  0b01010000,
  0b00000000,
  //120 x
  0b00000000,
  0b10001000,
  0b01010000,
  0b00100000,
  0b01010000,
  0b10001000,
  0b00000000,
  //121 y
  0b00000000,
  0b00000000,
  0b10010000,
  0b10010000,
  0b01100000,
  0b01000000,
  0b10000000,
  //122 z
  0b00000000,
  0b00000000,
  0b11110000,
  0b00100000,
  0b01000000,
  0b11110000,
  0b00000000,
  //123 {
  0b00100000,
  0b01000000,
  0b01000000,
  0b10000000,
  0b01000000,
  0b01000000,
  0b00100000,
  //124 |
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  0b00100000,
  //125 }
  0b00100000,
  0b00010000,
  0b00010000,
  0b00001000,
  0b00010000,   
  0b00010000,
  0b00100000,
  //126 ~
  0b00000000,
  0b00000000,
  0b01000000,
  0b10101000,
  0b00010000,
  0b00000000,
  0b00000000,
  //127 DEL
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000,
  0b00000000

};



int delinterchar = 800 ;//delay between 2 char
int delinterpoint = 400; //delay between 2 points of a char
#define led1 6
#define led2 7
#define led3 8
#define led4 9
#define led5 10
#define led6 11
#define led7 12
#define sensorPin 2
#define policex 5
int boucle = 0;
#define repet 10 //number of repetition before changing message
char texte[]  = "SNOOTLAB"; // data to write on startup
char texte2[] = "RULEZ"; // data to write after "repet" writing of the first message
unsigned long lasttimeloop;
unsigned long timeloop;



int a = 0;
int leds[7] = {
  led1,led2,led3,led4,led5,led6,led7};

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

  pinMode(led1, OUTPUT);     
  pinMode(led2, OUTPUT);     
  pinMode(led3, OUTPUT);     
  pinMode(led4, OUTPUT);     
  pinMode(led5, OUTPUT);     
  pinMode(led6, OUTPUT);     
  pinMode(led7, OUTPUT); 
  pinMode(sensorPin, INPUT); 
  lasttimeloop = micros();

}



void alloff()
{
  digitalWrite(leds[0], LOW);
  digitalWrite(leds[1], LOW);
  digitalWrite(leds[2], LOW);
  digitalWrite(leds[3], LOW);
  digitalWrite(leds[4], LOW);
  digitalWrite(leds[5], LOW);
  digitalWrite(leds[6], LOW);

}


void loop()                     
{

  if (digitalRead(2)==LOW)
  {
    timeloop = micros() - lasttimeloop;
    lasttimeloop = micros();
    if (timeloop>5000000) timeloop = 1000000;
   
   
//    Serial.print("timeloop");
//    Serial.println(timeloop);
    delay(50);
   
   
   
    if (boucle< (repet + 1))
    {
    delinterchar = timeloop/(sizeof(texte)*policex*policex);
    delinterpoint = delinterchar/2;

      for (a=0;a<sizeof(texte);a++)
      {
        displayChar(texte[a]);
        alloff();
        delayMicroseconds(delinterchar);
      }
    }

    if (boucle>repet)
    {
    delinterchar = timeloop/(sizeof(texte2)*policex*policex);
    delinterpoint = delinterchar/2;


      for (a=0;a<sizeof(texte2);a++)
      {
        displayChar(texte2[a]);
        alloff();
        delayMicroseconds(delinterchar);
      }
    }
    boucle++;
    if (boucle> ((repet*2)+1)) boucle = 0;
  }
}


void displayChar(char c)
{
  c = c - 32;
  for (int i = 7;i>2;i--)
  {
    for (int j = 0;j<7;j++)
    {
      if (bitRead(charbook[(7*c+j)],i) == 1)  digitalWrite(leds[j], HIGH);
      else digitalWrite(leds[j], LOW);
    }
    delayMicroseconds(delinterpoint);
  }
}

void displayCharR(char c)
{
  c = c - 32;
  for (int i = 3;i<8;i++)
  {
    for (int j = 0;j<7;j++)
    {
      if (bitRead(charbook[(7*c+j)],i) == 1)  digitalWrite(leds[j], HIGH);
      else digitalWrite(leds[j], LOW);
    }
  }
}


J'ai tenté de faire la même chose avec des interruptions mais sans succès :(
Si quelqu'un se sent de me filer un coup de main :)

Sinon la prochaine étape c'est de faire la même chose avec un ATTINY85... Des résultats peut être Jeudi !!!
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 183
Inscription: Mer 7 Sep 2011 11:19

Re: Un petit afficheur de texte en POV

Message non lude Bemolu » Mar 3 Avr 2012 20:38

Bonsoir

Je conseille le montage/code proposé (merci Phil) à tous les heureux possesseurs d'un starter kit, il y a vraiment tout ce qu'il faut (à condition d'accepter d'avoir un message bicolore):
DSC_6163.JPG
Je sais, mes résistances ne sont pas câblées proprement
DSC_6163.JPG (72.19 Kio) Vu 1566 fois
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Un petit afficheur de texte en POV

Message non lude dzimboum » Mer 4 Avr 2012 22:22

Bouh, j'y arrive pas :(
Le capteur de basculement fonctionne bien, il fait allumer/éteindre les LED, mais je n'arrive pas à voir le message.
Est-ce qu'il y a une façon particulière de secouer le cocotier ? Est-ce qu'il vaut mieux des LED de la même couleur ? J'ai mis des vertes/orange/rouge.
En tout cas, la vidéo est sympa, merci beaucoup de l'idée.
dzimboum
 
Messages: 11
Inscription: Dim 1 Avr 2012 20:22
Localisation: Toulouse

Re: Un petit afficheur de texte en POV

Message non lude phil » Jeu 5 Avr 2012 11:10

Oui, il y a une manière particulière.

Il faut que ton capteur de basculement se "déplace" horizontalement
Image
Sur l'image ci-dessus, le position de départ (le début du message) est à gauche et la position finale (fin du message) est a droite

Regarde au début de la vidéo, en poussant un peu la luminosité, tu devrais voir la bonne position

Tu devrai entendre un tac tac tac si tu le fais correctement (c'est le bruit de la bille dans le capteur de basculement) (dans la vidéo également...)
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 183
Inscription: Mer 7 Sep 2011 11:19

Re: Un petit afficheur de texte en POV

Message non lude dzimboum » Jeu 5 Avr 2012 21:03

Alors, je vais réessayer ce soir. Histoire de clarifier les choses, voici le montage que je prévois de (re)faire.
Image

Est-ce que j'ai fait une boulette ? Fritzing, c'est une vraie tuerie, je n'y connais absolument rien et ai réussi facilement à sortir cette image. Pour les résistances, j'ai mis des 150 ohms, vu que dans le starter kit il n'y a pas de 500 ohms.
dzimboum
 
Messages: 11
Inscription: Dim 1 Avr 2012 20:22
Localisation: Toulouse

Re: Un petit afficheur de texte en POV

Message non lude dzimboum » Jeu 5 Avr 2012 23:09

Génial, ça a marché, merci phil, c'est vraiment top. Le schéma avec Fritzing doit être bon, je l'ai suivi.

Donc la couleur ne perturbe pas la persistance, c'est la façon de secouer qui importe, il faut trouver le bon rythme, et tester aussi d'allonger plus ou moins l'amplitude. L'alignement des diodes est aussi très important. Et comme on peut le voir sur la photo (désolé pour la qualité pourrie)
Image
après quelques secousses, les diodes ont le mal de mer sur la mini-breadboard (et j'en ai deux qui se sont faits la malle et que je n'ai pas encore retrouvées). Qu'est-ce que vous me conseilleriez pour caler les diodes ?
dzimboum
 
Messages: 11
Inscription: Dim 1 Avr 2012 20:22
Localisation: Toulouse

Re: Un petit afficheur de texte en POV

Message non lude phil » Ven 6 Avr 2012 09:34

Génial, ça a marché, merci phil, c'est vraiment top. Le schéma avec Fritzing doit être bon, je l'ai suivi.

Je suis ravi que cela te plaise. Et merci à toi pour le schéma frizzing. Si tu peux éventuellement me faire passer le fichier source pour que je puisse l’intégrer dans le post en haut de cette page...
Donc la couleur ne perturbe pas la persistance, c'est la façon de secouer qui importe, il faut trouver le bon rythme, et tester aussi d'allonger plus ou moins l'amplitude.

Est ce que tu as utilisé ce sketch ? ==>pov04.pde
ou bien celui qu'il y a au début de ce post (pov03.pde)?
Je te pose la question car dans la version 4, le temps pour l'affichage se calcule automatiquement, il suffit d'avoir un mouvement grosso modo régulier. Ainsi plus de problème de rythme...
après quelques secousses, les diodes ont le mal de mer sur la mini-breadboard (et j'en ai deux qui se sont faits la malle et que je n'ai pas encore retrouvées). Qu'est-ce que vous me conseilleriez pour caler les diodes ?

L’idéal pour ce genre de montage qui bouge, c'est de faire une plaque avec un peu de soudure.
Sinon, tu peux éventuellement essayer d’épaissir les pattes de tes diodes avec un peu de soudure... C'est pas très propre mais cela peut aider.
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 183
Inscription: Mer 7 Sep 2011 11:19

Re: Un petit afficheur de texte en POV

Message non lude dzimboum » Ven 6 Avr 2012 18:35

phil a écrit:
Génial, ça a marché, merci phil, c'est vraiment top. Le schéma avec Fritzing doit être bon, je l'ai suivi.

Je suis ravi que cela te plaise. Et merci à toi pour le schéma frizzing. Si tu peux éventuellement me faire passer le fichier source pour que je puisse l’intégrer dans le post en haut de cette page...


Bien sûr, je te l'ai envoyé.

J'ai pris la version 4 du script, mais comme j'ai du mal à caler les LED, c'est dur d'avoir le rythme. Enfin c'est pas bien grave. Pour les suggestions, j'ai oublié de préciser que je n'ai pas encore de fer à souder, je vais garder cette idée sous le coude.
dzimboum
 
Messages: 11
Inscription: Dim 1 Avr 2012 20:22
Localisation: Toulouse

Re: Un petit afficheur de texte en POV

Message non lude subreptice » Sam 7 Avr 2012 00:12

Bonsoir.

Pour les suggestions, j'ai oublié de préciser que je n'ai pas encore de fer à souder, je vais garder cette idée sous le coude.


Si tu as une barrette de dominos électrique d'une longueur qui correspond à la distance entre deux trous de fixations de l'Arduino, je pense que tu peut monter sur ta Uno, ce que je nommerais pompeusement le screw protofly shield du dimanche...

Je vais essayer de faire une photo :mrgreen: .

( Merci pour votre retour sur les trophées, ça fait vraiment plaisir, un feedback positif ! )
subreptice
 
Messages: 58
Inscription: Mar 19 Juil 2011 18:04

Re: Un petit afficheur de texte en POV

Message non lude subreptice » Lun 9 Avr 2012 03:24

Donc en gros, avec une barrette de 12 dominos et deux trombones ça donne ça ; avec moins de matos, ça deviens compliqué !
Ces résistances ont des pattes trop épaisses, difficiles à dompter ... Il doit être possible de faire mieux avec celles du starter kit, plus fines.
Finalement, j'aurais du faire arriver tous les composants par le haut des dominos, c'est sans doute plus facile à gérer et l'ensemble serait plus compact.

http://imagebin.org/207272
http://imagebin.org/207271
subreptice
 
Messages: 58
Inscription: Mar 19 Juil 2011 18:04

Re: Un petit afficheur de texte en POV

Message non lude phil » Jeu 17 Jan 2013 14:26

encore un petit update

Apres quelques remarques, j'ai effectué 4 modifications dans le sketch du montage POV

1 Correction des boucles for qui, à cause d'une erreur, affichait a la fin des message un point ou un caractère bizarre !!! (cf photo ci dessous)

Image

2 Utilisation de Progmem http://arduino.cc/en/Reference/PROGMEM afin d'économiser de la RAM et de faciliter un futur portage sur ATTINY85.... à suivre !!
3 Utilisation d'un fichier font7x5.h pour facilité la lecture du code (et en plus le détail de la police une fois que c'est bon, on s'en fout un peu....)
4 Utilisation de for pour les init et alloff histoire de faire un peu plus small...

Voici la nouvelle version Pov05.zip
En bonus le code est passé de 4120 bytes à 2838 bytes. Voila qui va aider pour le futur portage sur ATTINY !!!

Voila... A plus
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 183
Inscription: Mer 7 Sep 2011 11:19


Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 2 invités