Помогите вывести температуру на дисплей

Тема в разделе "Arduino & Shields", создана пользователем iwizard7, 4 май 2013.

  1. iwizard7

    iwizard7 Нерд

    Всем добрый день, есть дисплей от нокии 1100, успешно запустил его, есть также датчик температура DS1 8B20 который тоже успешно запустил, отображает данные в монитор порта, а как их соеденить вместе никак не могу понять, сильно не пинайте, я новичек, два дня уже ковыряюсь, заранее спасибо.
    Вот скетч датчика '
    Код (Text):
    #include <OneWire.h>
    OneWire  ds(10);  // on pin 10 (a 4.7K resistor is necessary)
     
    void setup(void) {
      Serial.begin(9600);
    }
     
    void loop(void) {
      byte i;
      byte present = 0;
      byte type_s;
      byte data[12];
      byte addr[8];
      float celsius, fahrenheit;
     
      if ( !ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
      }
     
    for( i = 0; i < 8; i++) {
        Serial.write(' ');
      }
     
      if (OneWire::crc8(addr, 7) != addr[7]) {
          Serial.println("CRC is not valid!");
          return;
      }
     
      // the first ROM byte indicates which chip
      switch (addr[0]) {
        case 0x10:
          Serial.println("  Chip = DS18S20");  // or old DS1820
          type_s = 1;
          break;
        case 0x28:
      //    Serial.println("  Chip = DS18B20");
          type_s = 0;
          break;
        case 0x22:
          Serial.println("  Chip = DS1822");
          type_s = 0;
          break;
        default:
          Serial.println("Device ot a DS18x20 family device.");
          return;
      }
     
      ds.reset();
      ds.select(addr);
      ds.write(0x44, 1);        // start conversion, with parasite power on at the end
     
      delay(1000);  // maybe 750ms is enough, maybe not
      // we might do a ds.depower() here, but the reset will take care of it.
     
      present = ds.reset();
      ds.select(addr);  
      ds.write(0xBE);       // Read Scratchpad
     
      //Serial.print("  Data = ");
      //Serial.print(present, HEX);
      Serial.print(" ");
      for ( i = 0; i < 9; i++) {          // we need 9 bytes
        data[i] = ds.read();
      // Serial.print(data[i], HEX);
        Serial.print(" ");
      }
      //Serial.print(" CRC=");
    // Serial.print(OneWire::crc8(data, 8), HEX);
      Serial.println();
     
      // Convert the data to actual temperature
      // because the result is a 16 bit signed integer, it should
      // be stored to an "int16_t" type, which is always 16 bits
      // even when compiled on a 32 bit processor.
      int16_t raw = (data[1] << 8) | data[0];
      if (type_s) {
        raw = raw << 3; // 9 bit resolution default
        if (data[7] == 0x10) {
          // "count remain" gives full 12 bit resolution
          raw = (raw & 0xFFF0) + 12 - data[6];
        }
      } else {
        byte cfg = (data[4] & 0x60);
        // at lower res, the low bits are undefined, so let's zero them
        if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
        //// default is 12 bit resolution, 750 ms conversion time
      }
      celsius = (float)raw / 16.0;
      fahrenheit = celsius * 1.8 + 32.0;
      Serial.print("  Temp = ");
      Serial.print(celsius);
      Serial.print(" Celsius ");
    }
     
     
  2. iwizard7

    iwizard7 Нерд

    код
    А вот скетч дисплея

    Код (Text):
    // Arduino Dueminalove Atmega328
    // Interfacing with the Nokia 1100 LCD, PCF8814
     
    // Arduino pinout // Nokia 1100 LCD pinout (VDD & VDDI ==> 3.3V, VLED+ connected via 10 ohm resistor to 3.3V)
    #define PIN_SCE 3 // 2 XCS Connected via resistor-voltage-divider 1.8K & 3.2K
    #define PIN_SDIN 4 // 4 SDA
    #define PIN_RESET 5 // 1 XRES
    #define PIN_SCLK 6 // 5 SCLK
     
    #define LCD_C LOW // Command
    #define LCD_D HIGH // Data
     
     
    const int buttonPin = 12;   // the number of the pushbutton pin
    static const byte ASCII[][5] ={
    {0x00, 0x00, 0x00, 0x00, 0x00} // 20
    ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
    ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
    ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
    ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
    ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
    ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
    ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
    ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
    ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
    ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
    ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
    ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
    ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
    ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
    ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
    ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
    ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
    ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
    ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
    ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
    ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
    ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
    ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
    ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
    ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
    ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
    ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
    ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
    ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
    ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
    ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
    ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
    ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
    ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
    ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
    ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
    ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
    ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
    ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
    ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
    ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
    ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
    ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
    ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
    ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
    ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
    ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
    ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
    ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
    ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
    ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
    ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
    ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
    ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
    ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
    ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
    ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
    ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
    ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
    ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥
    ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
    ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
    ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
    ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
    ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
    ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
    ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
    ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
    ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
    ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
    ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
    ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
    ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
    ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
    ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
    ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
    ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
    ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
    ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
    ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
    ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
    ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
    ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
    ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
    ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
    ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
    ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
    ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
    ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
    ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
    ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
    ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
    ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
    ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ←
    ,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f →
    };
    int buttonState = 0;        // variable for reading the pushbutton status
     
     
    void LcdCharacter(char character)
    {
      LcdWrite(LCD_D, 0x00);
      for (int index = 0; index < 5; index++)
      {
        LcdWrite(LCD_D, ASCII[character - 0x20][index]);
      }
    }
    void LcdClear(void){
    for (int index = 0; index < 864 ; index++)
    LcdWrite(LCD_D, 0x00);
    }
     
    void LcdInitialise(void){
    digitalWrite(PIN_RESET, LOW);
    digitalWrite(PIN_RESET, HIGH);
    LcdWrite(LCD_C, 0x23); // CONTRAST?
    LcdWrite(LCD_C, 0x2F); // Charge pump ON
    LcdWrite(LCD_C, 0x24); // Vop MSB *Don't change*
    LcdWrite(LCD_C, 0x80); // Vop LSB *Here you can change contrast*
    LcdWrite(LCD_C, 0xA4); // A4 = normal display mode, A5 = all pixels ON
    LcdWrite(LCD_C, 0xAF); // Display ON
    }
     
    void LcdString(char *characters){
    while (*characters){
    LcdCharacter(*characters++);
    }
    }
     
    void LcdWrite(byte dc, byte data){
    digitalWrite(PIN_SDIN, dc); // dc is sampled with the first rising SCLK edge
    digitalWrite(PIN_SCE, LOW); // LCD enable
    digitalWrite(PIN_SCLK, HIGH); // First rising SCLK edge
    digitalWrite(PIN_SCLK, LOW);
    shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data); // SDIN is sampled at the rising edge of SCLK.
    digitalWrite(PIN_SCE, HIGH);
    }
     
    void setup(void){
    pinMode(PIN_SCE, OUTPUT);
    pinMode(PIN_RESET, OUTPUT);
    pinMode(PIN_SDIN, OUTPUT);
    pinMode(PIN_SCLK, OUTPUT);
    pinMode(buttonPin, INPUT);
    digitalWrite(PIN_RESET, LOW);
    digitalWrite(PIN_SCE, HIGH);
    digitalWrite(PIN_SCLK, LOW);
    LcdInitialise();
    LcdClear();
    LcdWrite(LCD_C, 0xA6); // Inverted display
    delay(200);
    LcdWrite(LCD_C, 0xA7); // Normal display
    }
     
    void loop(void){
     
    buttonState = digitalRead(buttonPin);
     
      // check if the pushbutton is pressed.
      // if it is, the buttonState is HIGH:
      if (buttonState == HIGH) {  
        // turn LED on:  
        LcdClear();
        LcdString(" TEST LCD 1100");
        delay(3000);
        LcdClear();
        LcdString("  Its WORKING!!!");
        delay(3000);
        LcdClear();
        LcdString(" 1111111111111111");
        delay(1000);
        LcdClear();
        LcdString("2222222222222222");
        delay(1000);
        LcdClear();
        LcdString("3333333333333333");
        delay(1000);
        LcdClear();
        LcdString("4444444444444444");
        delay(1000);
        LcdClear();
        LcdString("5555555555555555");
        delay(1000);
          LcdClear();
        LcdString("6666666666666666");
        delay(1000);
        LcdInitialise();
        LcdClear();
      }
      else {
        // turn LED off:
        LcdString("DONT PUSH MY BUTTONS");
        LcdInitialise();
       
      }
    }
     
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Все очень просто:
    1. Создаете новый скетч
    2. Переносите в него дефайны и глобальные переменные из обоих Ваших скетчей.
    3. В setup() переносите код из setup() первого скетча, после него кладете код сетапа второго
    4. Аналогичную операцию проделываете с функцией loop()
     
  4. Gvozd

    Gvozd Нуб

    Доброго времени суток. iwizard7 можете выложить схему подключения делителя напряжения для CS дисплея. В моей схеме XCS, SDA, RES, CLK - через 4,7 КОм. Код в Code Vision работает, а код в Arduino IDE, отличный от Вашего, постоянно изменяет только контраст.
    Спасибо.
     
  5. Gvozd

    Gvozd Нуб

    Спасибо. Дисплей протестил, всё ОК.