Я хочу вывести температуру и влажность воздуха на текстовый экран. Датчик температуры и влажности DHT 11. Ардуино Уно.
#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 }
Это как? Код (C++): static char chars[] = {'Б','Г','Д','Ж','З','И','Й','Л','П','У','Ф','Ц','Ч','Ш','Щ','Ь','Ъ','Ы','Э','Ю','Я'}; В utf8 русские буквы занимают два байта.