Помогите пожалуйста написать скетч.

Тема в разделе "Глядите, что я сделал", создана пользователем GamesElektronik, 19 авг 2016.

  1. Я хочу вывести температуру и влажность воздуха на текстовый экран.
    Датчик температуры и влажности DHT 11.
    Ардуино Уно.
     
  2. DIYMan

    DIYMan Guest

  3. maxim 1234

    maxim 1234 Нерд

    #include <LiquidCrystal.h>
    #include <dht11.h>

    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(7, 6, 5, 2, 3, 4);
    int DHT11PIN = A2;
    #define RELAYPIN 8
    dht11 DHT11;


    static byte addon_letters[16];
    void init_rus(const char* letters_use )
    {
    // custom characters
    static byte letters[][8] = {
    { B11111, B10000, B10000, B11111, B10001, B10001, B11111, B00000 },//Б
    { B11111, B10000, B10000, B10000, B10000, B10000, B10000, B00000 },//Г
    { B01111, B01001, B01001, B01001, B01001, B11111, B10001, B00000 },//Д
    { B10101, B10101, B10101, B01110, B10101, B10101, B10101, B00000 },//Ж
    { B01110, B10001, B00001, B00110, B00001, B10001, B01110, B00000 },//З
    { B10001, B10001, B10011, B10101, B11001, B10001, B10001, B00000 },//И
    { B10101, B10101, B10011, B10101, B11001, B10001, B10001, B00000 },//Й
    { B00111, B01001, B10001, B10001, B10001, B10001, B10001, B00000 },//Л
    { B11111, B10001, B10001, B10001, B10001, B10001, B10001, B00000 },//П
    { B10001, B10001, B10001, B01111, B00001, B10001, B01110, B00000 },//У
    { B01110, B10101, B10101, B10101, B01110, B00100, B00100, B00000 },//Ф
    { B10001, B10001, B10001, B10001, B10001, B10001, B11111, B00001 },//Ц
    { B10001, B10001, B10001, B01111, B00001, B00001, B00001, B00000 },//Ч
    { B10101, B10101, B10101, B10101, B10101, B10101, B11111, B00000 },//Ш
    { B10101, B10101, B10101, B10101, B10101, B10101, B11111, B00001 },//Щ
    { B10000, B10000, B10000, B11110, B10001, B10001, B11110, B00000 },//Ь
    { B11000, B01000, B01110, B01001, B01001, B01001, B01110, B00000 },//Ъ
    { B10001, B10001, B10001, B11101, B10101, B10101, B11101, B00000 },//Ы
    { B11110, B00001, B00001, B01111, B00001, B00001, B11110, B00000 },//Э
    { B10111, B10101, B10101, B11101, B10101, B10101, B10111, B00000 },//Ю
    { B01111, B10001, B10001, B01111, B10001, B10001, B10001, B00000 },//Я
    };
    static char chars[] = {'Б','Г','Д','Ж','З','И','Й','Л','П','У','Ф','Ц','Ч','Ш','Щ','Ь','Ъ','Ы','Э','Ю','Я'};
    static byte empty[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
    int index = 0, cl = sizeof(chars)/sizeof(char),i,j,symb;
    memset(addon_letters,0,sizeof(addon_letters));
    for( j = 0; j < strlen(letters_use) && j < 16; j++ )
    lcd.createChar(j, empty);

    for( j = 0; j < strlen(letters_use) && j < 16; j++ )
    {
    symb = -1;
    for( i=0; i < cl; i++ ) if( chars == letters_use[j] ) { symb = i; addon_letters[index] = letters_use[j]; break; }
    if( symb != -1 ) { lcd.createChar(index, letters[symb]); index++; }
    }
    }
    ////////////////////////////////////////////////////////////////////
    // print russian chars
    ////////////////////////////////////////////////////////////////////
    void print_rus(char *str) {
    static char rus_letters[] = {'А','В','Е','Ё','К','М','Н','О','Р','С','Т','Х'};
    static char trans_letters[] = {'A','B','E','E','K','M','H','O','P','C','T','X'};
    int lcount = sizeof(rus_letters)/sizeof(char), i, j;
    for( i=0; i<strlen(str); i++ )
    {
    if( byte(str) == 208 ) continue; // 208 ignore
    int found = 0;
    for(j=0; j < 16; j++) if( addon_letters[j] != 0 && byte(str) == byte(addon_letters[j]) ) { lcd.write(j); found = 1; break; }
    if(!found) for(j=0; j < lcount; j++) if( byte(str) == byte(rus_letters[j]) ) { lcd.write(trans_letters[j]); found = 1; break; }
    if(!found) lcd.write(byte(str));
    }
    }
    void print_rus(int x, int y, char *str) {
    lcd.setCursor(x, y);
    print_rus(str);
    }
    ////////////////////////////////////////////////////////////////////



    static byte degree[8] = { B01100, B10010, B10010, B01100, B00000, B00000, B00000, B00000 };//degree

    void setup() {
    lcd.begin(16, 2);
    init_rus("УПЖЬЛ");
    lcd.createChar(7, degree);
    print_rus(0,0,"ТЕМПЕРАТУРА:");
    print_rus(0,1,"ВЛАЖНОСТЬ: ");

    pinMode (RELAYPIN,OUTPUT);
    }
    void loop() {
    int response = DHT11.read(DHT11PIN);
    if( response == DHTLIB_OK)
    {
    lcd.setCursor(12,0);
    lcd.print(DHT11.temperature);
    lcd.write(7);
    lcd.print("C ");
    lcd.setCursor(12,1);
    lcd.print(DHT11.humidity);
    lcd.print(" % ");
    }
    else
    {
    lcd.clear();
    init_rus("ШИБДЧЛЖП");
    print_rus(0,0," ОШИБКА ДАТЧИКА ");
    print_rus(0,1," ТЕМП/ВЛАЖНОСТИ ");
    do { delay(1000); } while( DHT11.read(DHT11PIN) != DHTLIB_OK );
    setup();
    }
    delay(1000);
    if (DHT11.humidity > 56 ) digitalWrite (RELAYPIN,LOW);// > more than

    if (DHT11.humidity < 53 ) digitalWrite (RELAYPIN,HIGH); // < less than
    }
     
  4. ostrov

    ostrov Гуру

    Это как?
    Код (C++):
    static char chars[] = {'Б','Г','Д','Ж','З','И','Й','Л','П','У','Ф','Ц','Ч','Ш','Щ','Ь','Ъ','Ы','Э','Ю','Я'};
    В utf8 русские буквы занимают два байта.
     
  5. maxim 1234

    maxim 1234 Нерд

    что как?
     
  6. ostrov

    ostrov Гуру

    Ниже я написал что как. Как вы заталкиваете 2 байта в char, никак не могу уловить. Код ваш?
     
  7. maxim 1234

    maxim 1234 Нерд

    Нет не мой, но он работает:)