Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. float sensorValue = 0;
  2. float voltageValue = 0;
  3. float temperatura = 0;
  4. int counter = 0;
  5. float mtemp = 0;
  6. float msensor = 0;
  7. float mvoltage = 0;
  8.  
  9. void init_can(void)
  10. {
  11. ADCSRA=0;
  12. delay(50);
  13. ADCSRA = _BV(ADEN)|_BV(ADSC)|_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0);
  14. }
  15.  
  16. uint16_t read_CAN(uint8_t nr_intrare)
  17. {
  18. ADMUX=nr_intrare;
  19. delay(50);
  20. ADMUX |= _BV(REFS0);
  21. ADCSRA |= _BV(ADSC);
  22. if(ADCSRA&ADSC)
  23. return ADC;
  24. }
  25. void command(char LcdCommand) // Basic function used in giving command
  26. {
  27. // to LCD char UpperHalf, LowerHalf;
  28. char UpperHalf,LowerHalf;
  29. char rs=0,en=1;
  30. UpperHalf = LcdCommand & 0xF0; // upper 4 bits of command
  31. PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
  32. PORTD |= UpperHalf;
  33. PORTB &= ~(1<<rs);
  34. PORTB |= (1<<en);
  35. _delay_ms(10);
  36. PORTB &= ~(1<<en);
  37. _delay_ms(10);
  38.  
  39. LowerHalf = ((LcdCommand<<4) & 0xF0); //lower 4 bits of command
  40. PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
  41. PORTD |= LowerHalf;
  42. PORTB &= ~(1<<rs);
  43. PORTB |= (1<<en);
  44. _delay_ms(10);
  45. PORTB &= ~(1<<en);
  46. _delay_ms(10);
  47. }
  48.  
  49. void data(char AsciiChar) // Basic function used in giving data
  50. { // to LCD
  51. char UpperHalf, LowerHalf;
  52. char rs=0,en=1;
  53. UpperHalf = AsciiChar & 0xF0; // upper 4 bits of data
  54. PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
  55. PORTD |= UpperHalf;
  56. PORTB |= (1<<rs);
  57. PORTB |= (1<<en);
  58. _delay_ms(10);
  59. PORTB &= ~(1<<en);
  60. _delay_us(400);
  61. LowerHalf = ((AsciiChar<<4) & 0xF0); //lower 4 bits of data
  62. PORTD &= 0x0F; // flushes upper half of PortD to 0, but retains lower half of PortD
  63. PORTD |= LowerHalf;
  64. PORTB |= (1<<rs);
  65. PORTB |= (1<<en);
  66. _delay_ms(10);
  67. PORTB &= ~(1<<en);
  68. _delay_us(400);
  69. }
  70.  
  71. void scriere_temperatura(float valoare_temperatura)
  72. {
  73. int val_tmp=valoare_temperatura*10,c[4],i;
  74. data('T');data('E');data('M');data('P');data('=');
  75. for(i=0;i<4;i++)
  76. c[i]=0;
  77. i=0;
  78. while(val_tmp!=0)
  79. {
  80. c[i]=val_tmp%10;
  81. val_tmp=val_tmp/10;
  82. i++;
  83. }
  84. for(i=3;i>=1;i--)
  85. data(c[i] + '0');
  86. data(',');
  87. data(c[0] + '0');
  88. data('°');
  89. data('C');
  90. }
  91.  
  92. void scriere_can(int valoare_can)
  93. {
  94. int c[4],i;
  95. for(i=0;i<4;i++)
  96. c[i]=0;
  97. i=0;
  98. while(valoare_can!=0)
  99. {
  100. c[i]=valoare_can%10;
  101. valoare_can=valoare_can/10;
  102. i++;
  103. }
  104. data('N');data('=');
  105. for(i=3;i>=0;i--)
  106. data(c[i] + '0');
  107. }
  108.  
  109. void scriere_tensiune(int valoare_tensiune)
  110. {
  111. int c[4],i;
  112. for(i=0;i<4;i++)
  113. c[i]=0;
  114. i=0;
  115. while(valoare_tensiune!=0)
  116. {
  117. c[i]=valoare_tensiune%10;
  118. valoare_tensiune=valoare_tensiune/10;
  119. i++;
  120. }
  121. data('N');data('=');
  122. for(i=3;i>=0;i--)
  123. data(c[i] + '0');
  124. data('m');data('V');
  125. }
  126. void init_display (void)
  127. {
  128. command(0x28); //4 biti 2 linii
  129. command(0x0E); //Display -ON; cursor -vizibil;
  130. command(0x06); //incrementare cursor
  131. command(0x01); //stergere ecran;
  132. }
  133. void setup()
  134. {
  135. Serial.begin(9600);
  136. DDRD=0xF0;
  137. DDRB=0x03;
  138. DDRC=B000000;
  139. init_can();
  140. init_display();
  141. }
  142.  
  143. void loop()
  144. {
  145. sensorValue=read_CAN(0);
  146. voltageValue = sensorValue*5000/1023;
  147. temperatura = voltageValue/10;
  148. Serial.print("Temperatura: ");
  149. Serial.print(temperatura);
  150. Serial.print(" Voltaj: ");
  151. Serial.print(voltageValue);
  152. Serial.print(" Valoare CAN: ");
  153. Serial.print(sensorValue);
  154. Serial.print("\n");
  155. mtemp = mtemp + temperatura;
  156. msensor = msensor + sensorValue;
  157. mvoltage = mvoltage + voltageValue;
  158. counter++;
  159. if(counter>=50)
  160. {
  161. mtemp=mtemp/counter;
  162. msensor=msensor/counter;
  163. mvoltage=mvoltage/counter;
  164. command(0x80);
  165. scriere_temperatura(mtemp);
  166. command(0xC0);
  167. scriere_can(msensor);
  168. command(0xC8);
  169. scriere_tensiune(mvoltage);
  170. counter=0;
  171. mtemp=0;
  172. msensor=0;
  173. mvoltage=0;
  174. }
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement