Paso 3: código
Código#include < PinChangeInt.h >
#include < PinChangeIntConfig.h >
int PIN = 10; perno que interrupción se generará (pin conectado al interruptor que cuando presiona voluntad Mostrar temperatura en osciloscopio)
int thermistorpin = A0; que pin analógico para conectar
int thermistornominal = 150; resistencia a 25 grados C
int temperaturenominal = 25; a la temperatura. resistencia nominal (casi siempre 25 C)
int numsamples = 100; Cuántas muestras a tomar y media, más tarda más
pero es más 'suave'
int bcoefficient = 3950; El coeficiente beta el termistor (generalmente 3000-4000)
int seriesresistor = 10000; el valor de la resistencia de 'otro'
int k;
int t1, t2; 2 dígitos de la temperatura
muestras de int [100]; No. de muestras a ser tomadas por A0
int dacx [] = {}
9,8,7,6,5,4,3,2}; //pins donde está conectado el dac 1
int [] dacy = {}
19,18,17,16,15,13,12,11}; pines donde se conecta la 2 º CAD
int segundos = 90; controles de segunda mano (90 es el ángulo en 12:00)
menta de int = 90; controla la mano de min
int hora = 120; manecilla de controles
flotador mincos = 0; genera el valor para el valor de seno y cos para el punto final de la mano de min
flotador de minsin = 1;
Float hourcos =-0.866; genera el valor para el valor de seno y cos para el punto final de la aguja de las horas
Float horas = 0,5;
ponits (valores de bit) para ondas seno y cos
unsigned char [] de 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 [] de 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
};
valor de seno y coseno del ángulo en que 12 movimientos de reloj de
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
};
changeTime largo sin firmar; / / guardar el programa en tiempo de ejecución
void setup()
{
pinMode (PIN, entrada); configurar el pin 10 a la entrada
digitalWrite (PIN, alto); Use la resistencia de pullup interna
PCintPort::attachInterrupt (PIN, swapMode, caer);
para (int i = 0; i < = 7; i ++)
{
pinMode(dacx[i],OUTPUT); declarar de dac como salida
pinMode(dacy[i],OUTPUT);
}
changeTime=millis();
displayclock(); dispay "Por reloj"
displayName();
}
void loop()
{
minLine(127,127); función para mostrar la manecilla de los minutos
hourLine(127,127); función para mostrar la manecilla de las horas
Circle(); función para hacer un círculo
Strokes(); función para agregar 12 líneas de movimiento que representan 12 horas en el reloj
secLine(127,127,sec);
if((Millis()-changeTime) > 114)
{
s--;
if(sec==0) s = 360; 0 o 360 es el ángulo en el número tres en el reloj de
updateMin() de if(SEC==90); Cuando se completan 60 seg min mano es movida por 1 lugar
changeTime=millis();
}
}
función para calcular y mostrar la temp.
se llama cuando se genera la interrupción
void swapMode()
{
uint8_t.
Float promedio;
tomar N muestras en una fila, con un ligero retraso
para (i = 0; i < numsamples; i ++) {}
muestras [i] = analogRead(thermistorpin);
Delay(10);
}
promedio de todas las muestras
promedio = 0;
para (i = 0; i < numsamples; i ++) {}
muestras promedio += [i];
}
promedio / = numsamples;
convertir el valor a la resistencia
promedio = 1023 / media - 1;
promedio = seriesresistor / media;
steinhart de flotador;
Steinhart = media / thermistornominal; (R/Ro)
Steinhart = log(steinhart); LN(R/RO)
Steinhart = bcoefficient; 1/B * ln(R/Ro)
Steinhart += 1.0 / (temperaturenominal + 273.15); + (1/a)
Steinhart = 1.0 / steinhart; Invertir
Steinhart-= 273.15; convertir a C
Steinhart=Round(Steinhart); nos da un número entero
T1 = steinhart/10; genera número a decenas lugar
T2 = (int) steinhart % 10; genera número en los lugar
para (int m = 0; m < = 100; m ++)
{
Mostrar a la temperatura en cuanto a por ejemplo "35 * C"
Font(T1,50);
Font(T2,100);
Degree(145);
celcius(160);
}
segundos-= 19;
}
void updateMin()
{
menta = menta-6;
if(Mint==0) menta = 360;
mincos=cos(PI*Mint/180);
minsin=sin(PI*Mint/180);
updateHour de if(Mint==90); Cuando se completan 60 min hora mano es movida por 1 lugar
}
void updateHour()
{
horas = horas-30;
if(hour==0) horas = 360;
hourcos=cos(PI*hour/180);
hoursIn=sin(PI*hour/180);
}
anular //plot punto (int x, int y) un punto en el plano xy del osciloscopio
{
para (int j = 0; j < = 7; j ++)
{
digitalWrite (dacx [j], ((x & 1 << j) > 0));
}
para (int j = 0; j < = 7; j ++)
{
digitalWrite (dacy [j], ((y & 1 << j) > 0));
}
}
void paralelamente (int a, int b, int c) //function para dibujar una línea paralela al eje y (un punto constante en el eje x y punto sobre el eje de y varía entre b y c)
{
para (k = b; k < c; k = k + 2)
{
Point(a,k);
}
}
void //function parallelx (int d, int e, int f) para trazar una línea paralela a x axis(d is point constant on y axis and point on x axis varies from e to f)
{
para (k = e; k < f; k = k + 2)
{
Point(k,d);
}
}
void angleline (int x1, int y1, int x2, int y2) //draw una línea entre 2 puntos en osciloscopio
{
para (int i = 0; i < = 200; i = i + 4)
{
int x = x 1 + i * (x 2-x 1) / 200;
int y = y1 + i * (y2-y1) / 200;
Point(x,y);
}
}
//function circle() vacío para dibujar un círculo
{
para (int i = 0; i < 256; i = i + 2) //send pecado y cos olas para dacs
{
Point(SiNx[i],cosx[i]);
}
}
void strokes()
{
para (int theta = 0; theta < 12; theta ++)
para (int r = 100; i < 125; r = r + 2)
{
Point(127+int(r*strokeCos[Theta]),127+int(r*strokeSin[Theta]));
}
}
void secLine (int x, int y, int theta) //function dibujar segundos mano de longitud 'r', en un ángulo theta, x e y son puntos de partida
{
para (int i = 0; i < 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 dibujar minutero de longitud 'r', en una theta de ángulo (dado por minsin y variables globales mincos), x e y son puntos de partida
{
para (int i = 0; i < 100; r = r + 2)
{
Point(x+int(r*mincos),y+int(r*minsin));
}
}
void hourLine (int x, int y) //function establecer hora mano de longitud 'r', en una theta de ángulo (dado por horas y hourcos de las variables globales), x e y son puntos de partida
{
para (int i = 0; i < 75; r = r + 2)
{
Point(x+int(r*hourcos),y+int(r*hoursIn));
}
}
void displayclock() //display palabras "Por el reloj"
{
para (int f = 0; f < = 50; f ++)
RELOJ
{
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);
POR
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 palabras "KSHITIJ y KAPIL"
{
para (int g = 0; g < = 40; g ++)
{
KSHITIJ
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); Me
parallely(185,95,155); T
parallelx(155,165,205);
parallely(215,95,155); Me
parallelx(155,225,252); J
parallely(239,95,155);
angleline(239,95,225,110);
}
para (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);
}
para (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); Me
parallely(200,95,155); L
parallelx(95,200,245);
}
}
fuente vacío (int a, int x) //function para mostrar 2 números de la temperatura
{
Switch(a)
{
caso 0:
parallelx(40,x,x+40);
parallelx(110,x,x+40);
parallely(x,40,110);
parallely(x+40,40,110);
rotura;
caso 1:
parallely(x+20,40,110);
rotura;
caso 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);
rotura;
caso 3:
parallelx(110,x,x+40);
parallelx(75,x,x+40);
parallelx(40,x,x+40);
parallely(x+40,40,110);
rotura;
caso 4:
parallely(x,80,110);
parallely(x+40,40,110);
parallelx(80,x,x+40);
rotura;
caso 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);
rotura;
caso 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);
rotura;
caso 7:
parallely(x+40,40,110);
parallelx(110,x,x+40);
rotura;
caso 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);
rotura;
caso 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);
rotura;
}
}
Círculo de //display de vacío degree(int x) de grado
{
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);
}