Étape 3: Code
Code#include < PinChangeInt.h >
#include < PinChangeIntConfig.h >
int PIN = 10 ; broche à laquelle interruption doit être générée (broche reliée à l’interrupteur qui, une fois pressé la volonté montrer temp sur oscilloscope)
int thermistorpin = A0 ; quelle broche analogique se connecter
int thermistornominal = 150 ; résistance à 25 degrés C
int temperaturenominal = 25 ; Temp. pour la résistance nominale (presque toujours 25 C)
int numsamples = 100 ; Combien d’échantillons à prendre et en moyenne, plus dure plus longtemps
mais il est plus « lisse »
int bcoefficient = 3950 ; Le coefficient bêta de la thermistance (généralement 3000-4000)
int seriesresistor = 10000 ; la valeur de la résistance de « l’autre »
int k ;
int t1, t2 ; 2 chiffres de temp
int échantillons [100] ; aucun. d’échantillons à prélever par A0
int dacx [] = {}
9,8,7,6,5,4,3,2}; //pins où 1re dac est connecté
int [] dacy = {}
19,18,17,16,15,13,12,11} ; broches où 2ème dac est connecté
int sec = 90 ; contrôle de seconde main (90 est angle à 12:00)
int menthe = 90 ; les contrôles min main
int h = 120 ; aiguille des heures des contrôles
float mincos = 0 ; génère la valeur de sinus et cos pour le point final du min main
float minsin = 1 ;
float hourcos =-0,866 ; génère la valeur de sinus et cos pour l’extrémité de l’aiguille des heures
float 24Construit = 0,5 ;
se (valeurs de bit) pour les ondes sinusoïdales et cos
unsigned char sinx [] =
{
127,130,133,136,139,142,145,148,151,154,157,160,164,166,169,172,175,178,181,184,187,189,192,195, 197,200,202,205,207,210,212,214,217,219,221,223,225,227,229,231,232,234,236,237,239,240,242,
243,244,245,246,247,248,249, 250,251,251,252,252,253,253,253,253,253,254,253,253,253,253,252,252,251, 251,250,249,249,248,247,246,245,243,242,241,239,238,236,235,233,231,230, 228,226,224,222,
220 218, 215,213,211,209,206,204,201,199,196,193,191,188,185,182,180,177,174,171,168,165,162,159,156,153, 150,147,144,141,137,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,
79,76, 73,71,68,65,62,60,57,54,52,49,47,44,42,40,38,35,33,31,29,27,25,23,22,20,18,17,15,14, 12,11,10,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,22,
24, 26,28,30,32,34,36,39,41,43,46,48,51,53,56,58,61,64,66,69,72,75,78,81,84,87,89,93,96, 99,102,105,108,111,114,117,120,123,127
};
unsigned char cosx [] =
{
254,253,253,253,253,252,252,251, 251,250,249,249,248,247,246,245,243,242,241,239,238,236,235,233,231,230, 228,226,224,222,220,218, 215,213,211,209,206,204,201,199,196,193,191,188,185,182,180,
177,174,171,168,165,162,159,156,153, 150,147,144,141,137,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76, 73,71,68,65,62,60,57,54,52,49,47,44,42,40,38,35,33,31,29,27,
25,23,22,20,18,17,15,14, 12,11,10,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,22,24, 26,28,30,32,34,36,39,41,43,46,48,51,53,56,58,61,64,66,69,72,75,
78,81,84,87,89,93,96, 99,102,105,108,111,114,117,120,123,127,130,133,136,139,142,145,148,151,154,157,160,164,166,169,172,175,178,181,184,187,189,192,195, 197,200,202,205,207,210,212,214,217,
219,221,223,225,227,229,231,232,234,236,237,239,240,242,243, 244,245,246,247,248,249, 250,251,251,252,252,253,253,253,253,253,254
};
valeur de sinus et cosinus de l’angle à laquelle 12 coups de l’horloge
float [] strokeSin =
{
.0000,.5000,.8666,1.000,.8666,.5000,.0000,-.5000,-.8666,-1.000,-.8666,-.5000
};
float [] strokeCos =
{
1.000,.8666,.5000,.0000,-.5000,-.8666,-1.000,-.8666,-.5000,.0000,.5000,.8666
};
unsigned long changeTime; / / store programme durée
void setup()
{
pinMode (entrée, PIN) ; la broche 10 à l’entrée de la valeur
digitalWrite (PIN, élevé) ; utiliser la résistance pullup interne
PCintPort::attachInterrupt (tige, swapMode, chute) ;
pour (int i = 0; i < = 7; i ++)
{
pinMode(dacx[i],OUTPUT) ; déclarer du CAD en sortie
pinMode(dacy[i],OUTPUT) ;
}
changeTime=millis() ;
displayclock() ; retour « CLOCK BY »
displayName() ;
}
void loop()
{
minLine(127,127) ; fonction pour afficher l’aiguille des minutes
hourLine(127,127) ; fonction pour afficher l’aiguille des heures
Circle() ; fonction pour faire un cercle
Strokes() ; fonction pour ajouter 12 lignes de course, soit 12 heures de l’horloge
secLine(127,127,sec) ;
if((Millis()-changeTime) > 114)
{
s--;
if(sec==0) s = 360 ; 0 ou 360 est angle au numéro trois sur horloge
if(sec==90) updateMin() ; Lorsque 60sec sont terminées min bouge de 1 place
changeTime=millis() ;
}
}
fonction pour calculer et afficher le temp.
est appelée lorsque l’interruption est générée
Sub swapMode()
{
uint8_t i ;
flotteur en moyenne ;
prélever des échantillons de N dans une rangée, avec un léger retard
pour (i = 0; i < numsamples; i ++) {}
les échantillons [i] = analogRead(thermistorpin) ;
Delay(10) ;
}
moyenne de tous les échantillons
moyenne = 0 ;
pour (i = 0; i < numsamples; i ++) {}
échantillons de moyenne += [i] ;
}
moyenne / = numsamples ;
convertir la valeur de résistance
moyenne = 1023 / moyenne - 1 ;
moyenne = seriesresistor / moyenne ;
flotteur steinhart ;
Steinhart = moyenne / thermistornominal ; (R/Ro)
Steinhart = log(steinhart) ; ln(R/RO)
Steinhart / = bcoefficient ; 1/B * ln(R/Ro)
Steinhart += 1.0 / (temperaturenominal + 273,15) ; + (1/to)
Steinhart = 1,0 / steinhart ; Inverti
Steinhart-= 273.15 ; convertir en C
Steinhart=Round(Steinhart) ; nous donne un nombre entier
T1 = steinhart/10 ; génère le nombre à plusieurs dizaines placer
T2 = (int) steinhart % 10 ; génère le nombre à ceux endroit
pour (int m = 0; m < = 100; m ++)
{
afficher la température en ce qui concerne par exemple "35 * C"
font(T1,50) ;
font(T2,100) ;
degree(145) ;
Celcius(160) ;
}
s-= 19 ;
}
Sub updateMin()
{
monnaie = menthe-6 ;
if(Mint==0) menthe = 360 ;
mincos=cos(pi*Mint/180) ;
minsin=Sin(pi*Mint/180) ;
if(Mint==90) updateHour ; Quand 60 min sont terminés aiguille des heures est proposé par 1 place
}
Sub updateHour()
{
heure = heure-30 ;
if(Hour==0) heure = 360 ;
hourcos=cos(pi*Hour/180) ;
hoursin=Sin(pi*Hour/180) ;
}
//plot Sub point (int x, int y) un point sur le plan xy d’oscilloscope
{
pour (int j = 0; j < = 7; j ++)
{
digitalWrite (dacx [j], ((x & 1 << j) > 0)) ;
}
pour (int j = 0; j < = 7; j ++)
{
digitalWrite (dacy [j], ((y & 1 << j) > 0)) ;
}
}
void en parallèle (int a, int b, int c) //function de tracer une ligne parallèle à l’axe des y (un point constante sur axe x et point sur l’axe des y varie entre b et c)
{
pour (k = b; k < c; k = k + 2)
{
point(a,k) ;
}
}
void parallelx (int d, int e, int f) //function pour dessiner une ligne parallèle au x axis(d is point constant on y axis and point on x axis varies from e to f)
{
pour (k = e; k < f; k = k + 2)
{
point(k,d) ;
}
}
void angleline (int x1, int y1, int x2, int y2) //draw une ligne entre 2 points sur l’oscilloscope
{
pour (int i = 0; j’ai < = 200 ; j’ai = i + 4)
{
int x = x 1 + i * (x 2-x 1) / 200 ;
int y = y1 + i * (y2-y1) / 200 ;
point(x,y) ;
}
}
circle() Sub //function pour dessiner un cercle
{
pour (int i = 0; j’ai < 256; i = i + 2) //send sin et cos ondes aux CED
{
point(SiNx[i],cosx[i]) ;
}
}
Sub strokes()
{
pour (thêta int = 0; thêta < 12 ; thêta ++)
pour (int r = 100; r < 125; r = r + 2)
{
point(127+int(r*strokeCos[Theta]),127+int(r*strokeSin[Theta])) ;
}
}
void secLine (int x, int y, int thêta) //function dessiner secondes main de longueur « r », à un angle thêta, x et y sont points de départ
{
pour (int r = 0; r < 127; r = r + 2)
{
point(x+int(r*cos(pi*Theta/180)),y+int(r*Sin(pi*Theta/180))) ;
}
}
void minLine (int x, int y) //function dessiner l’aiguille des minutes de longueur « r », à un theta angle (donnée par minsin et mincos des variables globales), x et y sont des points de départ
{
pour (int r = 0; r < 100; r = r + 2)
{
point(x+int(r*mincos),y+int(r*minsin)) ;
}
}
void hourLine (int x, int y) //function dessiner l’aiguille des heures de longueur « r », à un theta angle (donné par 24Construit et hourcos des variables globales), x et y sont des points de départ
{
pour (int r = 0; r < 75; r = r + 2)
{
point(x+int(r*hourcos),y+int(r*hoursin)) ;
}
}
void displayclock() //display mots « CLOCK BY »
{
pour (int f = 0; f < = 50; f ++)
HORLOGE
{
parallely(10,135,195) ; C
parallelx(135,10,50) ;
parallelx(195,10,50) ;
parallely(60,135,195) ; L
parallelx(135,60,100) ;
parallely(110,135,195) ; O
parallely(150,135,195) ;
parallelx(135,110,150) ;
parallelx(195,110,150) ;
parallely(160,135,195) ; C
parallelx(135,160,200) ;
parallelx(195,160,200) ;
parallely(210,135,195) ; K
angleline(210,165,245,195) ;
angleline(210,165,245,135) ;
PAR
parallely(80,55,115) ; B
angleline(80,115,120,100) ;
angleline(80,85,120,100) ;
angleline(80,85,120,70) ;
angleline(80,55,120,70) ;
angleline (130,115,155,95); //Y
angleline(145,55,170,115) ;
}
}
void displayName() //display mots « Christophe et Khaled »
{
pour (g int = 0; g < = 40; g ++)
{
CHRISTOPHE
parallely(5,95,155) ; K
angleline(5,125,40,155) ;
angleline(5,125,40,95) ;
angleline(50,95,95,125) ; S
parallelx(125,55,95) ;
angleline(55,125,90,155) ;
parallely(105,95,155) ; H
parallely(145,95,155) ;
parallelx(125,105,145) ;
parallely(155,95,155) ; J’ai
parallely(185,95,155) ; T
parallelx(155,165,205) ;
parallely(215,95,155) ; J’ai
parallelx(155,225,252) ; J
parallely(239,95,155) ;
angleline(239,95,225,110) ;
}
pour (int f = 0; f < = 20; f ++)
{
angleline(65,95,87,155) ; A
angleline(110,95,87,155) ;
parallelx(120,75,100) ;
parallely(120,95,155) ; N
angleline(120,155,165,95) ;
parallely(165,95,155) ;
parallely(175,95,155) ; D
angleline(175,155,215,125) ;
angleline(175,95,215,125) ;
}
pour (int f = 0; f < = 40; f ++)
{
KAPIL
parallely(10,95,155) ; K
angleline(10,125,55,155) ;
angleline(10,125,55,95) ;
angleline(65,95,87,155) ; A
angleline(110,95,87,155) ;
parallelx(120,75,100) ;
parallely(120,95,155) ; P
angleline(120,155,160,135) ;
angleline(120,115,160,135) ;
parallely(180,95,155) ; J’ai
parallely(200,95,155) ; L
parallelx(95,200,245) ;
}
}
Sub polices (int a, int x) //function pour afficher les 2 numéros du temp
{
Switch(a)
{
case 0 :
parallelx(40,x,x+40) ;
parallelx(110,x,x+40) ;
parallely(x,40,110) ;
parallely(x+40,40,110) ;
rupture ;
cas 1 :
parallely(x+20,40,110) ;
rupture ;
cas 2 :
parallelx(110,x,x+40) ;
parallelx(75,x,x+40) ;
parallelx(40,x,x+40) ;
parallely(x+40,75,110) ;
parallely(x,40,75) ;
rupture ;
cas 3 :
parallelx(110,x,x+40) ;
parallelx(75,x,x+40) ;
parallelx(40,x,x+40) ;
parallely(x+40,40,110) ;
rupture ;
cas 4 :
parallely(x,80,110) ;
parallely(x+40,40,110) ;
parallelx(80,x,x+40) ;
rupture ;
cas no 5 :
parallelx(110,x,x+40) ;
parallelx(75,x,x+40) ;
parallelx(40,x,x+40) ;
parallely(x,75,110) ;
parallely(x+40,40,75) ;
rupture ;
cas 6 :
parallelx(110,x,x+40) ;
parallelx(75,x,x+40) ;
parallelx(40,x,x+40) ;
parallely(x,40,110) ;
parallely(x+40,40,75) ;
rupture ;
cas 7 :
parallely(x+40,40,110) ;
parallelx(110,x,x+40) ;
rupture ;
cas 8 :
parallelx(110,x,x+40) ;
parallelx(75,x,x+40) ;
parallelx(40,x,x+40) ;
parallely(x,40,110) ;
parallely(x+40,40,110) ;
rupture ;
cas 9 :
parallelx(110,x,x+40) ;
parallelx(75,x,x+40) ;
parallelx(40,x,x+40) ;
parallely(x,75,110) ;
parallely(x+40,40,110) ;
rupture ;
}
}
sub degree(int x) //display cercle du degré
{
parallelx(110,x,x+10) ;
parallelx(100,x,x+10) ;
parallely(x,100,110) ;
parallely(x+10,100,110) ;
}
void celcius(int x) //display "C"
{
parallelx(110,x,x+40) ;
parallelx(40,x,x+40) ;
parallely(x,40,110) ;
}