termometr

z foreste, 2 lata temu, napisane w C++, wyświetlone 116 razy.
URL https://codetab.e3x.pl/view/937f394a Udostępnij
Pobierz wklejkę lub Pokaż surowy tekst
  1. #include "mbed.h"
  2. #include "MPL3115A2.h"
  3. #include "Terminal.h"
  4. #include "eeprom.h"
  5. #include "cstdlib"
  6. #include "string"
  7.  
  8. #define EEPROM_ADDR 0x00   // I2c EEPROM address is 0x00
  9.  
  10. #define SDA PTE25            // I2C SDA pin
  11. #define SCL PTE24           // I2C SCL pin
  12. int32_t eeprom_size ,  addr;
  13.  
  14. Terminal pc(PTA2, PTA1); // tx, rx
  15. I2C i2c(PTE0, PTE1);       // sda, scl
  16. EEPROM brain(SDA, SCL, EEPROM_ADDR, EEPROM::T24C08);
  17. MPL3115A2 sensor(&i2c, &pc);
  18. int temperature_live_state, read_user_temp;
  19. int val = 0;
  20. Timer licznik;
  21. char buffer[10];
  22. DigitalOut buzzer(PTA12);     // Sanity check to make sure the program is working.
  23. DigitalOut myled1(PTD1 , 1);     // Sanity check to make sure the program is working.
  24.  
  25.  
  26. void rs232_input_state_user_alarm()
  27. {
  28.         char dane[4];
  29.         int tempint;
  30.  
  31.         pc.gets(dane, 3);
  32.        
  33.         for (int z = 0; z < 4; z++)
  34.         {
  35.                
  36.                 if (isdigit(dane[z]))//sprawdzanie czy znak jest liczbą
  37.                 {
  38.        
  39.                         tempint = atoi(dane); //kowertowanie tablicy typu char na zmienną int
  40.                         read_user_temp = tempint;
  41.                 }
  42.         }
  43. }
  44. void speakers()
  45. {
  46.         licznik.start();
  47.        
  48.         if (licznik.read_ms() <= 1000)
  49.         {
  50.                 buzzer = !buzzer;
  51.         }
  52.         licznik.reset();
  53. }
  54.  
  55. void alarm()
  56. {
  57.         if (temperature_live_state >= read_user_temp)
  58.         {
  59.                 speakers();
  60.         }
  61.         if (read_user_temp > temperature_live_state)
  62.         {
  63.                 buzzer = 0;
  64.         }
  65.        
  66. }
  67.  
  68. void rs232_menu()
  69. {
  70.        
  71.  
  72.         pc.scanf("%5s", buffer);
  73.        
  74.        
  75.        
  76.  
  77.  
  78.          //ktw = buffer;
  79. }
  80.  
  81. void screen()
  82. {
  83.         pc.foreground(0xFFFF00);
  84.         pc.hideCursor();
  85. }
  86. void intro()
  87. {
  88.         pc.locate(25, 5);
  89.         pc.printf(" ** inteligentny Termometr   ** ");
  90.         pc.locate(25, 6);
  91.         pc.printf("Created by Foreste");
  92. }
  93. void labels()
  94. {
  95.         pc.locate(20, 7);
  96.         pc.printf("Temperatura");
  97.         pc.locate(35, 7);
  98.         pc.printf("Cisnienie");
  99.         pc.locate(48, 7);
  100.         pc.printf("alarm wysokiej temperatury");
  101. }
  102. void input_add_user_define_temperature()
  103. {
  104.         while (val <= 0)
  105.         {
  106.                
  107.                 screen();
  108.                 intro();
  109.                 pc.locate(1, 7);
  110.                 pc.printf("Wpisz wartość temperatury ,po której termometr bedzie sygnalizował przekroczenie");
  111.                 read_user_temp;
  112.                 if ((read_user_temp >= 12) && (read_user_temp <= 40))
  113.                 {
  114.                         pc.cls();
  115.                         screen();
  116.                         intro();
  117.                         brain.write(eeprom_size = 8, (int32_t) read_user_temp);
  118.                         pc.locate(20, 7);
  119.                         pc.printf("Zapisalem podaną temperature przekroczenia");
  120.                         wait(5);
  121.                         val = 1;
  122.                 }
  123.                 else
  124.                 {
  125.                         pc.cls();
  126.                         screen();
  127.                         intro();
  128.                         pc.locate(20, 7);
  129.                         pc.printf("Wpisano niepoprawne dane. Dopuszczalny zakres: od 12 do 40");
  130.                         wait(5);
  131.                 }
  132.         }
  133. }
  134.                        
  135. int main() {
  136.         pc.baud(9600);
  137.         pc.cls();
  138.         sensor.init();
  139.        
  140.         //Altitude a;
  141.         Temperature t;
  142.         Pressure p;
  143.         rs232_input_state_user_alarm();
  144.    
  145.         // Offsets for Dacula, GA
  146.         //sensor.setOffsetAltitude(83);
  147.         sensor.setOffsetTemperature(20);
  148.         sensor.setOffsetPressure(-32);
  149.         brain.read((uint32_t)(eeprom_size = 8), (int32_t&) read_user_temp);
  150.        
  151.         while (read_user_temp <= 0)
  152.         {
  153.                 input_add_user_define_temperature();
  154.         }
  155.         pc.cls();
  156.        
  157.        
  158.         while (1)
  159.         {
  160.                 sensor.readTemperature(&t);
  161.         sensor.setModeStandby();
  162.                 sensor.setModeBarometer();
  163.                 sensor.setModeActive();
  164.                 sensor.readPressure(&p);
  165.                 string str = t.print();
  166.                 temperature_live_state = atoi(str.c_str());
  167.                 screen();
  168.                 intro();
  169.                 labels();
  170.                 alarm();
  171.                 pc.locate(20, 9);
  172.                 pc.printf("%s C", t.print());
  173.                 pc.locate(35, 9);
  174.                 pc.printf("%s Hpa", p.print());
  175.                 pc.locate(50, 9);
  176.                 pc.printf("%d", read_user_temp);
  177.                 pc.locate(34, 11);
  178.                 rs232_menu();
  179.                 pc.puts( buffer);
  180.                 sensor.setModeStandby();
  181.                 sensor.setModeAltimeter();
  182.                 sensor.setModeActive();
  183.         }
  184. }

odpowiedź "termometr"

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

captcha