Vous êtes sur la page 1sur 3

#include #include #include #include #include #include #include #include #include

<stdio.h> <stdlib.h> <string.h> <errno.h> <stdint.h> <wiringPiSPI.h> <wiringPi.h> <signal.h> <sys/time.h>

typedef void (*sighandler_t)(int); float temperatura=0; float referencia=25; char men='M'; int elec=2,rele=0,modo=0;

int analogRead(int pin){ int ADC=-1; if((pin>=0)&&(pin<=7)){ int ce = 0; unsigned char ByteSPI[7]; // Cargamos los datos ByteSPI[0] = 0b01;//El ultimo bit es el start ByteSPI[1]=(0x80)|(pin<<4);//4 primeros bits configuracion ver tabla ByteSPI[2]=0;//Byte donde nos escriben los 8 ultimos bits. wiringPiSPIDataRW (ce, ByteSPI, 3);//Enviamos la trama usleep(20);//Esperamos 20 microsegundos ADC=((ByteSPI[1]&0x03)<<8)|ByteSPI[2];//Tratamos los datos } return (ADC); } float tempRead(){ return((float)analogRead(0)*(3.3/1023)*100-273); } void Manual(){ printf("\nON (1)"); printf("\nOFF(0)"); scanf("%d",&rele); elec=2; } void Ref(){ printf("\nIntroduzca referencia:"); scanf("%f",&referencia); elec=2; } void Automatico(){ //hysteresi de 1 grado para evitar oscilaciones del rele if(temperatura>=(referencia+1))rele=0;//apagamos estufa else if(temperatura<=(referencia-1))rele=1;//encendemos estufa

control(int theint) { system("clear"); temperatura=tempRead(); printf("\n Manual(M)"); printf("\n Automatico(A)"); printf("\n Exit(E)"); printf("\n---- Temperatura %f",temperatura); printf("\n---- Referencia %f",referencia); printf("\n---- Rele %d",rele); printf("\n Modo:"); if(modo)printf(" Automatico"); else printf(" Manual"); printf("\n\n"); if(elec==0){ Manual(); } else if (elec==1)Ref();//preguntamos referencia if(modo)Automatico();//modo automatico digitalWrite(1,rele);//ponemos el rele en el estado indicado }

void Menu(){ if(elec==2){ fflush(stdin); scanf("%c",&men); if(men=='M'){ elec=0; modo=0; } else if(men=='A') { elec=1; modo=1; } else if(men=='E')elec=3; } } int main (void) { int i,analog ; printf ("Control de temperatura con Raspberry Pi Expansion Board www.electroe nsaimada.com\n") ; system("gpio load spi"); wiringPiSetup(); if (wiringPiSPISetup (0, 500000) < 0)//Definimos la conexion A 0.5 MHz {

fprintf (stderr, "Unable to open SPI device 0: %s\n", strerror (errno)) ; exit (1) ; } pinMode(1,OUTPUT); //configuracion del timer struct timeval my_value={1,0}; struct timeval my_interval={5,0}; //periodo de 5 segundos struct itimerval my_timer={my_interval,my_value}; setitimer(ITIMER_REAL, &my_timer, 0); signal(SIGALRM, (sighandler_t) control); while(elec!=3){ delay(100); Menu(); } printf("\nCerrando programa\n"); delay(1000); return (0); }

Vous aimerez peut-être aussi