Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float sensorValue = 0;
- float voltageValue = 0;
- float temperatura = 0;
- int counter = 0;
- float mtemp = 0;
- float msensor = 0;
- float mvoltage = 0;
- void init_can(void)
- {
- ADCSRA=0;
- delay(50);
- ADCSRA = _BV(ADEN)|_BV(ADSC)|_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0);
- }
- uint16_t read_CAN(uint8_t nr_intrare)
- {
- ADMUX=nr_intrare;
- delay(50);
- ADMUX |= _BV(REFS0);
- ADCSRA |= _BV(ADSC);
- if(ADCSRA&ADSC)
- return ADC;
- }
- void command(char LcdCommand) // Basic function used in giving command
- {
- // to LCD char UpperHalf, LowerHalf;
- char UpperHalf,LowerHalf;
- char rs=0,en=1;
- UpperHalf = LcdCommand & 0xF0; // upper 4 bits of command
- PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
- PORTD |= UpperHalf;
- PORTB &= ~(1<<rs);
- PORTB |= (1<<en);
- _delay_ms(10);
- PORTB &= ~(1<<en);
- _delay_ms(10);
- LowerHalf = ((LcdCommand<<4) & 0xF0); //lower 4 bits of command
- PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
- PORTD |= LowerHalf;
- PORTB &= ~(1<<rs);
- PORTB |= (1<<en);
- _delay_ms(10);
- PORTB &= ~(1<<en);
- _delay_ms(10);
- }
- void data(char AsciiChar) // Basic function used in giving data
- { // to LCD
- char UpperHalf, LowerHalf;
- char rs=0,en=1;
- UpperHalf = AsciiChar & 0xF0; // upper 4 bits of data
- PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
- PORTD |= UpperHalf;
- PORTB |= (1<<rs);
- PORTB |= (1<<en);
- _delay_ms(10);
- PORTB &= ~(1<<en);
- _delay_us(400);
- LowerHalf = ((AsciiChar<<4) & 0xF0); //lower 4 bits of data
- PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
- PORTD |= LowerHalf;
- PORTB |= (1<<rs);
- PORTB |= (1<<en);
- _delay_ms(10);
- PORTB &= ~(1<<en);
- _delay_us(400);
- }
- void scriere_temperatura(float valoare_temperatura)
- {
- int val_tmp=valoare_temperatura*10,c[4],i;
- data('T');data('E');data('M');data('P');data('=');
- for(i=0;i<4;i++)
- c[i]=0;
- i=0;
- while(val_tmp!=0)
- {
- c[i]=val_tmp%10;
- val_tmp=val_tmp/10;
- i++;
- }
- for(i=3;i>=1;i--)
- data(c[i] + '0');
- data(',');
- data(c[0] + '0');
- data('°');
- data('C');
- }
- void scriere_can(int valoare_can)
- {
- int c[4],i;
- for(i=0;i<4;i++)
- c[i]=0;
- i=0;
- while(valoare_can!=0)
- {
- c[i]=valoare_can%10;
- valoare_can=valoare_can/10;
- i++;
- }
- data('N');data('=');
- for(i=3;i>=0;i--)
- data(c[i] + '0');
- }
- void scriere_tensiune(int valoare_tensiune)
- {
- int c[4],i;
- for(i=0;i<4;i++)
- c[i]=0;
- i=0;
- while(valoare_tensiune!=0)
- {
- c[i]=valoare_tensiune%10;
- valoare_tensiune=valoare_tensiune/10;
- i++;
- }
- data('N');data('=');
- for(i=3;i>=0;i--)
- data(c[i] + '0');
- data('m');data('V');
- }
- void init_display (void)
- {
- command(0x28); //4 biti 2 linii
- command(0x0E); //Display -ON; cursor -vizibil;
- command(0x06); //incrementare cursor
- command(0x01); //stergere ecran;
- }
- void setup()
- {
- Serial.begin(9600);
- DDRD=0xF0;
- DDRB=0x03;
- DDRC=B000000;
- init_can();
- init_display();
- }
- void loop()
- {
- sensorValue=read_CAN(0);
- voltageValue = sensorValue*5000/1023;
- temperatura = voltageValue/10;
- Serial.print("Temperatura: ");
- Serial.print(temperatura);
- Serial.print(" Voltaj: ");
- Serial.print(voltageValue);
- Serial.print(" Valoare CAN: ");
- Serial.print(sensorValue);
- Serial.print("\n");
- mtemp = mtemp + temperatura;
- msensor = msensor + sensorValue;
- mvoltage = mvoltage + voltageValue;
- counter++;
- if(counter>=50)
- {
- mtemp=mtemp/counter;
- msensor=msensor/counter;
- mvoltage=mvoltage/counter;
- command(0x80);
- scriere_temperatura(mtemp);
- command(0xC0);
- scriere_can(msensor);
- command(0xC8);
- scriere_tensiune(mvoltage);
- counter=0;
- mtemp=0;
- msensor=0;
- mvoltage=0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement