termometr

z foreste, 2 lata temu, napisane w C++, wyświetlone 112 razy.
URL https://codetab.e3x.pl/view/bb369807 Udostępnij
Pobierz wklejkę lub Pokaż surowy tekst
  1. // TODO: 1 Dokończyć monitor bateri
  2. // TODO: 2 Pytanie o imię użytkownika i zapamiętanie jego
  3. // TODO:  3 Wyłaczenie alarmu przyciskiem
  4.  
  5. #include "mbed.h"
  6. #include "MPL3115A2.h"
  7. #include "Terminal.h"
  8. #include "eeprom.h"
  9. #include "cstdlib"
  10. #include "string"
  11.  
  12. #define EEPROM_ADDR 0x00   // I2c EEPROM address is 0x00
  13.  
  14. #define SDA PTE25            // I2C SDA pin
  15. #define SCL PTE24           // I2C SCL pin
  16. int32_t eeprom_size ,  addr;
  17. Terminal pc(PTA2, PTA1); // tx, rx
  18. I2C i2c(PTE0, PTE1);       // sda, scl
  19. EEPROM brain(SDA, SCL, EEPROM_ADDR, EEPROM::T24C08);
  20. MPL3115A2 sensor(&i2c, &pc);
  21. int temperature_live_state;
  22. static int read_user_temp;
  23. int val = 0;
  24. int *temp_data = &read_user_temp;
  25. Timer licznik, licznik2;
  26. char buffer[20];
  27. char dane[4];
  28. float  check_battery;
  29. int lock  = 0;        
  30.  
  31.  
  32. DigitalOut myled1(PTA12);     // Sanity check to make sure the program is working.
  33. DigitalOut buzzer(PTB17);     // Sanity check to make sure the program is working.
  34. DigitalOut Red(PTB18, 1);
  35. DigitalOut Blue(PTD1, 1);
  36. DigitalOut Green(PTB19, 1);
  37. AnalogIn batery(PTC2);
  38. DigitalIn key_menu(PTD4);
  39.  
  40.  
  41. float monitor_batery()
  42. {
  43.         check_battery = batery.read();
  44.         float resume;
  45. return  resume = (check_battery*4.1);
  46. }
  47.  
  48. void monitor_batery_light()
  49. {
  50.         if ((monitor_batery() <= 4.10) && (monitor_batery() >= 3.74))
  51.         {
  52.                 Green = 0;
  53.         }
  54.         else if((monitor_batery() <= 3.74) && (monitor_batery() >= 3.74))
  55.         {
  56.                 Green = 0;
  57.                 Red      = 0;
  58.         }
  59.         else if((monitor_batery() <= 3,38) && (monitor_batery() >= 3.74))
  60.         {
  61.                 Red = 0;
  62.                 Green = 1;
  63.         }
  64. }
  65.  
  66. void refresh_buffer()
  67. {
  68.         for (int y = 0; y < sizeof(buffer); y++)
  69.                 buffer[y] = 0;
  70.         for (int z = 0; z < sizeof(dane); z++)
  71.                 dane[z] = 0;
  72. }              
  73. void serials()
  74. {
  75.         if (pc.readable())
  76.         {
  77.                 pc.scanf( "%s", buffer);
  78.         }
  79. }
  80.  
  81. void signaller()
  82. {
  83.         licznik.start();
  84.        
  85.         if (licznik.read_ms() >= 1000)
  86.         {
  87.                 buzzer = !buzzer;
  88.                 licznik.reset();
  89.         }
  90.        
  91. }
  92.  
  93. void alarm_power( float voltage_limit_definition )
  94. {
  95.                 if (monitor_batery() <= voltage_limit_definition)
  96.                 {
  97.                         if (lock <= 4)
  98.                         {
  99.                                         licznik2.start();
  100.                                
  101.                                         if (licznik2.read_ms() >= 1500)
  102.                                         {
  103.                                        
  104.                                                 buzzer = !buzzer;
  105.                                                 licznik2.reset();
  106.                                        
  107.                                         }
  108.                                 lock++;
  109.                                 }
  110.                 }
  111.         if (voltage_limit_definition <= monitor_batery())
  112.         {
  113.                 lock = 0;
  114.                 licznik2.stop();
  115.         }
  116.         }
  117.  
  118. void alarm_temp(string  & temp_read_input)
  119. {
  120.         string str = temp_read_input;
  121.         temperature_live_state = atoi(str.c_str());
  122.         if (temperature_live_state >= *temp_data)
  123.         {
  124.                 signaller();
  125.         }
  126.         if (*temp_data > temperature_live_state)
  127.         {
  128.                 buzzer = 0;
  129.                 licznik.stop();
  130.         }
  131.        
  132. }
  133.  
  134. void screen()
  135. {
  136.         pc.foreground(0xFFFF00);
  137.         pc.hideCursor();
  138. }
  139. void intro()
  140. {
  141.         pc.locate(15, 5);
  142.         pc.printf(" ** inteligentny Termometr   ** ");
  143.         pc.locate(15, 6);
  144.         pc.printf("Created by Foreste");
  145. }
  146. void labels()
  147. {
  148.         pc.locate(10, 7);
  149.         pc.printf("Temperatura");
  150.         pc.locate(25, 7);
  151.         pc.printf("Cisnienie");
  152.         pc.locate(38, 7);
  153.         pc.printf("otrzezenie wysokiej temp");
  154.         pc.locate(65, 7);
  155.         pc.printf("Bateria");
  156. }
  157. void input_add_user_define_temperature()
  158. {
  159.         int tempint;
  160.         refresh_buffer();
  161.        
  162.         screen();
  163.         intro();
  164.         pc.locate(1, 7);
  165.         pc.printf("Wpisz wartość temperatury ,po której termometr bedzie sygnalizował przekroczenie");
  166.        
  167.         if (pc.readable())
  168.         {
  169.                 pc.scanf("%s", dane);
  170.                
  171.         }      
  172.        
  173.        
  174.         for (int   z = 0; z < 4; z++)
  175.         {
  176.                
  177.                 if (isdigit(dane[z]))//sprawdzanie czy znak jest liczbą
  178.                 {
  179.        
  180.                         tempint = atoi(dane); //kowertowanie tablicy typu char na zmienną int
  181.                                
  182.                 }
  183.         }
  184.        
  185.                  
  186.         *temp_data = tempint;
  187.         if ((*temp_data >= 1) && (*temp_data <= 99))
  188.         {
  189.                
  190.                 if ((*temp_data >= 12) && (*temp_data <= 40))
  191.                 {
  192.                         pc.cls();
  193.                         screen();
  194.                         intro();
  195.                         brain.write(eeprom_size = 8, (int32_t) *temp_data);
  196.                         pc.locate(20, 7);
  197.                         pc.printf("Zapisalem podaną temperature przekroczenia");
  198.                         wait(5);
  199.                         val = 1;
  200.                         //fflush(stdin);
  201.                         refresh_buffer();
  202.                         pc.cls();
  203.                                
  204.                 }
  205.                 else
  206.                 {
  207.                         pc.cls();
  208.                         screen();
  209.                         intro();
  210.                         pc.locate(20, 7);
  211.                         pc.printf("Wpisano niepoprawne dane. Dopuszczalny zakres: od 12 do 40");
  212.                         wait(5);
  213.                         pc.cls();
  214.                        
  215.                 }
  216.         }
  217. }
  218.  
  219.        
  220.  
  221. void rs232_menu()
  222. {
  223.        
  224.         if (strcmp(buffer, "reset") == 0)
  225.         {
  226.                 NVIC_SystemReset();
  227.         }
  228.         else if (strcmp(buffer, "alarm") == 0)
  229.         {
  230.                 pc.cls();
  231.                 while (val <= 0)
  232.                 {
  233.                         input_add_user_define_temperature();
  234.                 }
  235.         }
  236.        
  237. }
  238.  
  239. int main() {
  240.         int lock  = 0; 
  241.         pc.baud(9600);    
  242.         pc.cls();
  243.         sensor.init();
  244.         screen();
  245.         intro();
  246.         wait(5);
  247.         Temperature t;
  248.         Pressure p;                                                                                                                                    
  249.         sensor.setOffsetTemperature(20);
  250.         sensor.setOffsetPressure(-32);
  251.         brain.read((uint32_t)(eeprom_size = 8), (int32_t&) *temp_data);
  252.        
  253.         while (read_user_temp <= 0)
  254.         {
  255.                 while (val <= 0)
  256.                 {
  257.                         input_add_user_define_temperature();
  258.                 }              
  259.         }
  260.         pc.cls();
  261.        
  262.        
  263.         while (1)
  264.         {
  265.                 val = 0;
  266.                
  267.                 sensor.readTemperature(&t);
  268.         sensor.setModeStandby();
  269.                 sensor.setModeBarometer();
  270.                 sensor.setModeActive();
  271.                 sensor.readPressure(&p);
  272.                
  273.                 screen();
  274.                 intro();
  275.                 labels();
  276.                 string temp_cache = t.print();
  277.                 pc.locate(10, 9);
  278.                 pc.printf("%s C", t.print());
  279.                 pc.locate(25, 9);
  280.                 pc.printf("%s Hpa", p.print());
  281.                 pc.locate(45, 9);
  282.                 pc.printf("%d", *temp_data);
  283.                 pc.locate(65, 9);
  284.                 pc.printf("%1.2fV", monitor_batery());
  285.                 pc.locate(65, 11);
  286.                 pc.printf("%d", licznik.read_ms());
  287.                 pc.locate(65, 12);
  288.                 alarm_temp(temp_cache);
  289.                 serials();
  290.                 alarm_power(4.20);
  291.                 rs232_menu();
  292.                 monitor_batery_light();
  293.                
  294.                 sensor.setModeStandby();
  295.                 sensor.setModeAltimeter();
  296.                 sensor.setModeActive();
  297.                
  298.         }
  299. }

odpowiedź "termometr"

Tutaj możesz odpowiedzieć na wklejkę z góry

captcha