Radjah

Untitled

Aug 5th, 2014
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.20 KB | None | 0 0
  1. #include <SoftwareSerial.h>
  2.  
  3. #include <Wire.h>
  4. #include <LCD.h>
  5. #include <LiquidCrystal_I2C.h>
  6.  
  7. // Init LCD
  8. #define LCD_I2C_ADDR  0x27
  9. #define BACKLIGHT     3
  10. #define LCD_EN        2
  11. #define LCD_RW        1
  12. #define LCD_RS        0
  13. #define LCD_D4        4
  14. #define LCD_D5        5
  15. #define LCD_D6        6
  16. #define LCD_D7        7
  17.  
  18. // Объект для работы с дисплеем
  19. LiquidCrystal_I2C lcd(LCD_I2C_ADDR,
  20.                       LCD_EN,
  21.                       LCD_RW,
  22.                       LCD_RS,
  23.                       LCD_D4,
  24.                       LCD_D5,
  25.                       LCD_D6,
  26.                       LCD_D7);
  27.  
  28. // Программный Serial
  29. SoftwareSerial swSerial(10, 11); // RX - 10, TX - 11
  30.  
  31. // Инициализая
  32. void setup() {
  33.   // ЖК дисплей
  34.   lcd.begin(20,4);
  35.   lcd.setBacklightPin(BACKLIGHT,POSITIVE);
  36.   lcd.setBacklight(HIGH);
  37.   lcd.clear();
  38. //  lcd.home();
  39.   // Шаблон показаний
  40.   lcd.setCursor(0,0);
  41.   lcd.print("T1=_____C T2=_____C");
  42.   lcd.setCursor(0,1);
  43.   lcd.print("T3=_____C T4=_____C");
  44.   // Последовательный порт
  45.   Serial.begin(9600);
  46.   swSerial.begin(9600);
  47. }
  48.  
  49. void loop() {
  50.   // Курсор на первый символ
  51.   lcd.home();
  52.   // Переменные
  53.   int i; // Счетчик
  54.   // Serial
  55.   String RecvStr="";
  56.   String Eps="";
  57.   String Tmp="";
  58.   // swSerial
  59.   String swRecvStr="";
  60.   String swEps="";
  61.   String swTmp="";
  62.   // Чтение из порта
  63.   if (Serial.available() > 0) {
  64.     char RecvChar = Serial.read();
  65.     // Отладочный вывод
  66.     Serial.println(Serial.available());
  67.     Serial.println(RecvChar);
  68.     // Проверка на начало последовательности
  69.     if (RecvChar == '=') {
  70.       // Вся ли строка в буфере?
  71.       if (Serial.available() >= 14) {
  72.         // Если вся, то читаем всю.
  73.         for (i=0;i<14;i++) {
  74.           RecvStr += char(Serial.read());
  75.         }
  76.         // Выводим последовательность
  77.         RecvStr.trim();
  78.         // Выделяем и выводим e
  79.         Eps=RecvStr.substring(5,7);
  80.         // Выделяем и выводим тепературу
  81.         Tmp=RecvStr.substring(7,11);
  82.         PrintResult(Tmp, 0, 3);
  83.       }
  84.     }
  85.   }
  86.   // Чтение из swSeial
  87.   if (swSerial.available() > 0) {
  88.     char RecvChar = swSerial.read();
  89.     // Отладочный вывод
  90.     swSerial.println(swSerial.available());
  91.     swSerial.println(RecvChar);
  92.     // Проверка на начало последовательности
  93.     if (RecvChar == '=') {
  94.       // Вся ли строка в буфере?
  95.       if (swSerial.available() >= 14) {
  96.         // Если вся, то читаем всю.
  97.         for (i=0;i<14;i++) {
  98.           swRecvStr += char(swSerial.read());
  99.         }
  100.         // Выводим последовательность
  101.         RecvStr.trim();
  102.         // Выделяем и выводим e
  103.         swEps=swRecvStr.substring(5,7);
  104.         // Выделяем и выводим тепературу
  105.         swTmp=swRecvStr.substring(7,11);
  106.         PrintResult(swTmp, 0, 13);  # <- тут первый раз всё проходит
  107.       }
  108.     }
  109.   }
  110.   // Задержка между замерами
  111.   delay(1000);
  112. }
  113.  
  114. // Вывод на экран
  115. void PrintResult(String Input, int lcdLine, int lcdPos){
  116.   float DigTmp=0.0;
  117.   char  TmpOut[5]="";
  118.   switch (Input[0]){
  119.     case '-':
  120.     // Отрицательные значения
  121.       if (Input[1]=='F'|Input[1]==' '){
  122.         Input[1]='0';
  123.       }
  124.       DigTmp=float(Input.toInt())/10;
  125.       dtostrf(DigTmp, 5, 1, TmpOut);
  126.       lcd.setCursor(lcdPos,lcdLine);
  127.       lcd.print(TmpOut);
  128.       break;
  129.     case '>':
  130.     // Превышение диапазона
  131.       lcd.setCursor(lcdPos,lcdLine);
  132.       lcd.print(">>>>>");
  133.       break;
  134.     case '<':
  135.     // Ниже диапазона
  136.       lcd.setCursor(lcdPos,lcdLine);
  137.       lcd.print("<<<<<");
  138.       break;
  139.     default:
  140.     // Положительные в диапазоне
  141.       lcd.setCursor(lcdPos,lcdLine);
  142.       lcd.print(" ");
  143.       lcd.print(Input);
  144.   }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment