Вот вы тут опять обсуждаете задачу с русскими буквами - в скетче и в микроконтроллере, а я тут уже давно решил эту задачу. И, к вашему сведенью, памяти строки меньше займут в 2 раза!
Вот вы тут опять обсуждаете задачу с русскими буквами - в скетче и в микроконтроллере, а я тут уже давно решил эту задачу. И, к вашему сведенью, памяти строки меньше займут в 2 раза!
Это хорошо. Но будет ли ваш вариант работать с Visual Studio и Visual Micro под нее?
И все работает. Библиотека более простая чем АрдаФруит. позволяет выводить картинки и спецсимволы. Единственное, что не удалось побороть- размер шрифта.
1. масштабировать текущий шрифт. выглядит убого и множитель только целый
2. сделать новый шрифт кратный высоте строки (8пикселей)
3. делать массив для всего дисплея. в нем писать в любом месте и как угодно, и выводить его на дисплей. что то вроде видеопамяти. только жрет оперативку сильно
По первому варианту-в библиотеке PCD8544 вроде такой функции нету.
2.Вариант не осилю))) Тем более текущий шрифт итак высотой 8 пикселей. Мне нужно около 16-32.
Единственный вариант который мне видится-выводить картинками. Ввиду того, что слов и букв будет не много то можно будет нарисовать целиком слово. А вот с цифрами посложнее, т.к. они будут меняться динамически. Но памяти сожрет прилично.
Это хорошо. Но будет ли ваш вариант работать с Visual Studio и Visual Micro под нее?
Если вы компилите в других IDE то и настраивайте там какую вам надо кодировку скетча. Или там(у мелкомягких) не знают что может потребоваться кодировка отличная от юникода?
По первому варианту-в библиотеке PCD8544 вроде такой функции нету.
2.Вариант не осилю))) Тем более текущий шрифт итак высотой 8 пикселей. Мне нужно около 16-32.
Единственный вариант который мне видится-выводить картинками. Ввиду того, что слов и букв будет не много то можно будет нарисовать целиком слово. А вот с цифрами посложнее, т.к. они будут меняться динамически. Но памяти сожрет прилично.
Есть такая строка. Дело в том что остальную информацию выводит, а именно переменную не хочет.
И ещё вопрос. Как записать время в DS1307. Питание снимаешь - они останавливаются.
А если передавать из COM-порта - то английские буквы показывает нормально - русские нет.
Я использую следующий код для передачи информации из компьютера в экранчик:
String s
while (Serial.available())
{
char c = Serial.read();
s += c;
if (c == '\n') //перевод строки
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(s);
}
Пробую так же подключиться из Delphi к ардуино. Чувствую, что проблема просто с кодировкой. Однако, если делать кодировку UTF8 для передачи, то английский передается нормально, русский нет. Вообще не показывается на экране.
Хочу сделать нотификатор из гугл календаря на связке Ардуино - Дельфи.
источником сейчас является монитор последовательного порта из IDE Arduino для Windows. Так что меня смущает, что код-то передается тот, что нужно, в кодировке СР1251, см. мое предыдущее сообщение, а на экране не отображается.
На сколько я разобрался в теме это и не получится с русскими. Т.к. они в чип компилятся не как
printString("Привет!",0,1,7);а как
printString("\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82!",0,1,7);каждая русская буква кодируется двумя байтами в кодировка UTF8, а данный скретч предполагает ASCII кодировку.
Все равно крякозябры.
попробуй вот это
printString("\x8F\xE0\xAE\xA2\xA5\xE0\xAA\xA0\x20\xA4\xA8\xE1\xAF\xAB\xA5\xEF!",0,1,7);На сколько я разобрался в теме это и не получится с русскими. Т.к. они в чип компилятся не как
printString("Привет!",0,1,7);а как
printString("\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82!",0,1,7);каждая русская буква кодируется двумя байтами в кодировка UTF8, а данный скретч предполагает ASCII кодировку.
Все равно крякозябры.
попробуй вот это
printString("\x8F\xE0\xAE\xA2\xA5\xE0\xAA\xA0\x20\xA4\xA8\xE1\xAF\xAB\xA5\xEF!",0,1,7);P.S: Как спойлер добавить? Не смог найти. :(
отправь просто
printString("Привет!",0,1,7);глянуть что именно выдаст и по картинке определить на какие элементы массива он ссылается
и фото бы покачественней. хоть через темное стекло или пленку
Вот вы тут опять обсуждаете задачу с русскими буквами - в скетче и в микроконтроллере, а я тут уже давно решил эту задачу. И, к вашему сведенью, памяти строки меньше займут в 2 раза!
Вот вы тут опять обсуждаете задачу с русскими буквами - в скетче и в микроконтроллере, а я тут уже давно решил эту задачу. И, к вашему сведенью, памяти строки меньше займут в 2 раза!
Это хорошо. Но будет ли ваш вариант работать с Visual Studio и Visual Micro под нее?
Всех приветствую господа. В общем я победил эту проблемму. Библиотека PCD8544. Подправил файл Charset.cpp:
/* * PCD8544 - Interface with Philips PCD8544 (or compatible) LCDs. * * Copyright (c) 2010 Carlos Rodrigues <cefrodrigues@gmail.com> * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include <avr/pgmspace.h> // The 7-bit ASCII character set... const PROGMEM unsigned char charset[][5] = { { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 20 space { 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 backslash { 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 ~ { 0x00, 0x00, 0x00, 0x00, 0x00 }, // 7f { 0x7C, 0x14, 0x14, 0x14, 0x08 },//p 0xB0 { 0x38, 0x44, 0x44, 0x44, 0x20 },//c 0xB1 { 0x04, 0x04, 0x7c, 0x04, 0x04 },//т 0xB2 { 0x0C, 0x50, 0x50, 0x50, 0x3C },//у 0xB3 { 0x30, 0x48, 0xfc, 0x48, 0x30 },//ф 0xB4 { 0x44, 0x28, 0x10, 0x28, 0x44 },//x 0xB5 { 0x7c, 0x40, 0x40, 0x40, 0xfc },//ц 0xB6 { 0x0c, 0x10, 0x10, 0x10, 0x7c },//ч 0xB7 { 0x7c, 0x40, 0x7c, 0x40, 0x7c },//ш 0xB8 { 0x7c, 0x40, 0x7c, 0x40, 0xfc },//щ 0xB9 { 0x04, 0x7c, 0x50, 0x50, 0x20 },//ъ 0xBA { 0x7c, 0x50, 0x50, 0x20, 0x7c },//ы 0xBB { 0x7c, 0x50, 0x50, 0x20, 0x00 },//ь 0xBC { 0x28, 0x44, 0x54, 0x54, 0x38 },//э 0xBD { 0x7c, 0x10, 0x38, 0x44, 0x38 },//ю 0xBE { 0x08, 0x54, 0x34, 0x14, 0x7c}, //я 0xBF { 0x7e, 0x11, 0x11, 0x11, 0x7e },//A 0x80 { 0x7f, 0x49, 0x49, 0x49, 0x33 },//Б 0x81 { 0x7f, 0x49, 0x49, 0x49, 0x36 },//В 0x82 { 0x7f, 0x01, 0x01, 0x01, 0x03 },//Г 0x83 { 0xe0, 0x51, 0x4f, 0x41, 0xff },//Д 0x84 { 0x7f, 0x49, 0x49, 0x49, 0x41 },//E 0x85 { 0x77, 0x08, 0x7f, 0x08, 0x77 },//Ж 0x86 { 0x41, 0x49, 0x49, 0x49, 0x36 },//З 0x87 { 0x7f, 0x10, 0x08, 0x04, 0x7f },//И 0x88 { 0x7c, 0x21, 0x12, 0x09, 0x7c },//Й 0x89 { 0x7f, 0x08, 0x14, 0x22, 0x41 },//K 0x8A { 0x20, 0x41, 0x3f, 0x01, 0x7f },//Л 0x8B { 0x7f, 0x02, 0x0c, 0x02, 0x7f },//M 0x8C { 0x7f, 0x08, 0x08, 0x08, 0x7f },//H 0x8D { 0x3e, 0x41, 0x41, 0x41, 0x3e },//O 0x8E { 0x7f, 0x01, 0x01, 0x01, 0x7f },//П 0x8F { 0x7f, 0x09, 0x09, 0x09, 0x06 },//P 0x90 { 0x3e, 0x41, 0x41, 0x41, 0x22 },//C 0x91 { 0x01, 0x01, 0x7f, 0x01, 0x01 },//T 0x92 { 0x47, 0x28, 0x10, 0x08, 0x07 },//У 0x93 { 0x1c, 0x22, 0x7f, 0x22, 0x1c },//Ф 0x94 { 0x63, 0x14, 0x08, 0x14, 0x63 },//X 0x95 { 0x7f, 0x40, 0x40, 0x40, 0xff },//Ц 0x96 { 0x07, 0x08, 0x08, 0x08, 0x7f },//Ч 0x97 { 0x7f, 0x40, 0x7f, 0x40, 0x7f },//Ш 0x98 { 0x7f, 0x40, 0x7f, 0x40, 0xff },//Щ 0x99 { 0x01, 0x7f, 0x48, 0x48, 0x30 },//Ъ 0x9A { 0x7f, 0x48, 0x30, 0x00, 0x7f },//Ы 0x9B { 0x00, 0x7f, 0x48, 0x48, 0x30 },//Э 0x9C { 0x22, 0x41, 0x49, 0x49, 0x3e },//Ь 0x9D { 0x7f, 0x08, 0x3e, 0x41, 0x3e },//Ю 0x9E { 0x46, 0x29, 0x19, 0x09, 0x7f },//Я 0x9F // маленькие буквы { 0x20, 0x54, 0x54, 0x54, 0x78 },//a 0xA0 { 0x3c, 0x4a, 0x4a, 0x49, 0x31 },//б 0xA1 { 0x7c, 0x54, 0x54, 0x28, 0x00 },//в 0xA2 { 0x7c, 0x04, 0x04, 0x04, 0x0c },//г 0xA3 { 0xe0, 0x54, 0x4c, 0x44, 0xfc },//д 0xA4 { 0x38, 0x54, 0x54, 0x54, 0x18 },//e 0xA5 { 0x6c, 0x10, 0x7c, 0x10, 0x6c },//ж 0xA6 { 0x44, 0x44, 0x54, 0x54, 0x28 },//з 0xA7 { 0x7c, 0x20, 0x10, 0x08, 0x7c },//и 0xA8 { 0x7c, 0x41, 0x22, 0x11, 0x7c },//й 0xA9 { 0x7c, 0x10, 0x28, 0x44, 0x00 },//к 0xAA { 0x20, 0x44, 0x3c, 0x04, 0x7c },//л 0xAB { 0x7c, 0x08, 0x10, 0x08, 0x7c },//м 0xAC { 0x7c, 0x10, 0x10, 0x10, 0x7c },//н 0xAD { 0x38, 0x44, 0x44, 0x44, 0x38 },//o 0xAE { 0x7c, 0x04, 0x04, 0x04, 0x7c }//п 0xAF }; /* vim: set expandtab ts=4 sw=4: */Здесь пришлось в массиве поменять местами порядок русских букв. Но все равно только редактированием этого файла не обойтись.
В файле PCD8544.cpp делаем правки
size_t PCD8544::write(uint8_t chr) #endif { // ASCII 7-bit only... if (chr >= 0x80) { #if ARDUINO < 100 return; #else return 0; #endif } ЗАМЕНЯЕМ НА size_t PCD8544::write(uint8_t chr) #endif { // ASCII 7-bit only... if (chr >= 0xC0) { #if ARDUINO < 100 return; #else return 0; #endif }И все работает. Библиотека более простая чем АрдаФруит. позволяет выводить картинки и спецсимволы. Единственное, что не удалось побороть- размер шрифта.
размер шрифта побороть можно 3 способами
1. масштабировать текущий шрифт. выглядит убого и множитель только целый
2. сделать новый шрифт кратный высоте строки (8пикселей)
3. делать массив для всего дисплея. в нем писать в любом месте и как угодно, и выводить его на дисплей. что то вроде видеопамяти. только жрет оперативку сильно
jeka_tm
По первому варианту-в библиотеке PCD8544 вроде такой функции нету.
2.Вариант не осилю))) Тем более текущий шрифт итак высотой 8 пикселей. Мне нужно около 16-32.
Единственный вариант который мне видится-выводить картинками. Ввиду того, что слов и букв будет не много то можно будет нарисовать целиком слово. А вот с цифрами посложнее, т.к. они будут меняться динамически. Но памяти сожрет прилично.
2.Вариант не осилю))) Тем более текущий шрифт итак высотой 8 пикселей. Мне нужно около 16-32.
а повзаимствовать из keyrus не? Там стандартные вполне себе шрифты. http://gurtjak.skif.net/pages/programs.htm
Это хорошо. Но будет ли ваш вариант работать с Visual Studio и Visual Micro под нее?
Если вы компилите в других IDE то и настраивайте там какую вам надо кодировку скетча. Или там(у мелкомягких) не знают что может потребоваться кодировка отличная от юникода?
Вот отредактированная мной библиотека Adafruit_GFX с поддержкой русских букв
https://yadi.sk/d/MEiPGeXcepeJK
Вот отредактированная мной библиотека Adafruit_GFX с поддержкой русских букв
https://yadi.sk/d/MEiPGeXcepeJK
С буквой "И" какой-то косяк. Вместо неё знак вопроса.
jeka_tm
По первому варианту-в библиотеке PCD8544 вроде такой функции нету.
2.Вариант не осилю))) Тем более текущий шрифт итак высотой 8 пикселей. Мне нужно около 16-32.
Единственный вариант который мне видится-выводить картинками. Ввиду того, что слов и букв будет не много то можно будет нарисовать целиком слово. А вот с цифрами посложнее, т.к. они будут меняться динамически. Но памяти сожрет прилично.
цифры могу дать. в этой теме посмотри какие
http://arduino.ru/forum/proekty/khronograf-izmeritel-skorosti-puli-ot-pr...
а новые можно в одной программе генерировать
http://arduino.ru/forum/proekty/khronograf-izmeritel-skorosti-puli-ot-pr...
только там замороченный вывод. но его уже победил. код выложил
С буквой "И" какой-то косяк. Вместо неё знак вопроса.
Странно. Еще раз проверил все буквы. Все работает.
Выложи код. Может быть вместе найдем косяк.
Вот в шрифте строка: 0x7f, 0x10, 0x08, 0x04, 0x7f,//И 0x98
Вот в шрифте строка: 0x7f, 0x10, 0x08, 0x04, 0x7f,//И 0x98
Здесь все верно))
Может быть в твоем скетче ошибка?
Как мне правильно определить строковую переменную и вывести её на дисплей? Пытаюсь так:
String variant if(<кусок кода>){ variant="строка"; display.print(variant);На дисплей ни чего не выводит.
А вот скетч:
#include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> // pin 7 - Serial clock out (SCLK) // pin 6 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 4 - LCD chip select (CS) // pin 3 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); void setup() { display.begin(); display.setContrast(55); } void loop() { display.clearDisplay(); display.setTextSize(1);// В строку вмещается 14 знаков display.print("АБВГДЕЖЗИЙКЛМН"); display.setTextSize(2);// В строку вмещается 7 знаков display.print("опрстуф"); display.setTextSize(3);// В строку вмещается 4 знаков display.print("цщшя"); display.display(); }Как мне правильно определить строковую переменную и вывести её на дисплей? Пытаюсь так:
String variant if(<кусок кода>){ variant="строка"; display.print(variant);На дисплей ни чего не выводит.
Добавь в конец кода строчку:
У меня так переменная выводится.
Возможно другая информация затирает твою переменную. Может это поможет:
И ещё вопрос. Как записать время в DS1307. Питание снимаешь - они останавливаются.
Что делаю не правильно?:
#include <DS1307.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> // pin 7 - Serial clock out (SCLK) // pin 6 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 4 - LCD chip select (CS) // pin 3 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); DS1307 rtc(A4, A5); // Инициализация библиотеки с указанием Time t; // Инициализация структуры //String str1; char* str[]={"Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"}; int i; void setup() { display.begin();// Инициализация дисплея display.setContrast(55); display.setTextSize(1); rtc.halt(false); // Установка режимов // rtc.writeProtect(false); // работы часов // Следующих три строки нужно закомментировать после // установки времени и загрузить скетч в плату повторно rtc.setDOW(6); // Установка дня недели rtc.setTime(8, 8, 10); // Установка времени 10:59:10 rtc.setDate(28, 02, 2015); // Установка даты 20 июля 2013 if((rtc.getDOWStr())=="MONDAY"){ i=0; str[i];} else if((rtc.getDOWStr())=="TUESDAY"){ i=1; str[i];} else if((rtc.getDOWStr())=="WEDNESDAY"){ i=2; str[i];} else if((rtc.getDOWStr())=="THORSDAY"){ i=3; str[i];} else if((rtc.getDOWStr())=="FRIDAY"){ i=4; str[i];} else if((rtc.getDOWStr())=="SATURDAY"){ i=5; str[i];} else if((rtc.getDOWStr())=="SUNDAY"){ i=6; str[i];} } void loop() { t = rtc.getTime(); // Получение времени и его запись в структуру t display.setTextSize(2); // Установка набора символов display.clearDisplay(); // Очистка экрана if(int(t.hour)<10){ display.setCursor(7,0); display.print("0"); display.setCursor(20,0); display.print(t.hour);} // Вывод часов else{ display.setCursor(7,0); display.print(t.hour);} display.setCursor(35,0); display.print("-"); if(int(t.min)<10){ display.setCursor(49,0); display.print("0"); display.setCursor(63,0); display.print(int(t.min));} // Вывод минут else{ display.setCursor(49,0); display.print(int(t.min));} display.setTextSize(1); // Установка набора символов if(int(t.sec)<10){ display.setCursor(35, 0); display.print("0"); display.setCursor(41, 0); display.print(int(t.sec));} // Вывод секунд else{ display.setCursor(35, 0); display.print((t.sec));} // Вывод секунд display.setCursor(8,17); display.print(str[i]); // Вывод дня недели display.setCursor(13,27); display.print(rtc.getDateStr()); // Вывод даты display.setTextSize(1); // Установка набора символов display.setCursor(0, 37); display.print("часы от sandr4"); display.display(); // Вывод вместимого буфера на дисплей delay (1000); // Задержка 1 с }Всё равно выводит "Понедельник".
так может у тебя понедельник. что ты железку ругаешь))
У меня вообще отпуск, а в 28 строке задаю субботу, а он, собака, пишет понедельник. Вот и спрашивается, где косяк?
а если сделать так
и посмотреть что он выдает. может это не он тупит, а кто то перегрелся на солнышке
что выполняет строка 034
str[i];} ?Как я понимаю, если "MONDEY", то в "i" заносится "0", если "TUESDAY", то в "i" заносится "1" и так далее...
а если сделать так
и посмотреть что он выдает. может это не он тупит, а кто то перегрелся на солнышке
Я понял, что выполняется только "MONDAY", вот и спрашиваю, что не так? Я раньше писал на Delphi, совсем другая петрушка...
ну проверь чтоли уже)) вставь строку в свой код и посмотри в терминале
Пишет субботу...А на дисплей выводит понедельник.
И часы отстают не по детски...Батарейка?
это соответствие устанавливается в строке 33, а в 34-й вообще смысла не вижу.
Немного переделал, но всё равно возвращает "0". Не пойму что не так:
int work_day(){ rtc.getTime(); if((rtc.getDOWStr())=="MONDAY") return d=0; else if((rtc.getDOWStr())=="TUESDAY") return d=1; else if((rtc.getDOWStr())=="WEDNESDAY") return d=2; else if((rtc.getDOWStr())=="THORSDAY") return d=3; else if((rtc.getDOWStr())=="FRIDAY") return d=4; else if((rtc.getDOWStr())=="SATURDAY") return d=5; else if((rtc.getDOWStr())=="SUNDAY") return d=6; } work_day; display.print(str[d]); // Вывод дня недели Serial.println(d); Serial.println(rtc.getDOWStr());Немного переделал, но всё равно возвращает "0". Не пойму что не так:
У тебя в коде ошибки и пропущено много скобок {}
case не может быть строковым, только числом.
sandr4, у тебя после строки 01 программа всегда перескакивает на строку 19. Сам найдешь ошибку? :)
Если-бы мог сам найти ошибку, здесь бы не задавал вопроса.
У тебя d всегда равна нулю, потому что ни в одной строчке кода ты не меняешь ее состояние (я про пост #81).
Попробуй так:
byte work_day() // функция должна быть вынесена за пределы скобок loop или setup { rtc.getTime(); if((rtc.getDOWStr())=="MONDAY") return 0; else if((rtc.getDOWStr())=="TUESDAY") return 1; else if((rtc.getDOWStr())=="WEDNESDAY") return 2; else if((rtc.getDOWStr())=="THORSDAY") return 3; else if((rtc.getDOWStr())=="FRIDAY") return 4; else if((rtc.getDOWStr())=="SATURDAY") return 5; else if((rtc.getDOWStr())=="SUNDAY") return 6; } void loop() { byte d = work_day(); Serial.println(str[d]); // Вывод дня недели Serial.println(d); delay(1000); Serial.println(rtc.getDOWStr()); }Спасибо за помощь, вставил Ваш код в прогу, возвращает, почему-то, "31"...
возвращает в каком месте? d не может быть 31.
Весь код выложите, у меня нет DS1307, плоэтому вживую проверить нет возможности.
P.S. и исправьте THORSDAY
Весь код:
#include <DS1307.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> // pin 7 - Serial clock out (SCLK) // pin 6 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 4 - LCD chip select (CS) // pin 3 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); DS1307 rtc(A4, A5); // Инициализация библиотеки с указанием Time t; // Инициализация структуры //String str1; char* str[]={"Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"}; int d; void setup() { Serial.begin(9600); display.begin();// Инициализация дисплея display.setContrast(55); display.setTextSize(1); rtc.halt(false); // Установка режимов // rtc.writeProtect(false); // работы часов // Следующих три строки нужно закомментировать после // установки времени и загрузить скетч в плату повторно //rtc.setDOW(7); // Установка дня недели //rtc.setTime(14, 25, 00); // Установка времени 10:59:10 //rtc.setDate(01, 03, 2015); // Установка даты 20 июля 2013 } void loop() { t = rtc.getTime(); // Получение времени и его запись в структуру t display.setTextSize(2); // Установка набора символов display.clearDisplay(); // Очистка экрана if(int(t.hour)<10){ display.setCursor(9,0); display.print("0"); display.setCursor(22,0); display.print(t.hour);} // Вывод часов else{ display.setCursor(9,0); display.print(t.hour);} display.setCursor(37,0); display.print("-"); if(int(t.min)<10){ display.setCursor(51,0); display.print("0"); display.setCursor(65,0); display.print(int(t.min));} // Вывод минут else{ display.setCursor(51,0); display.print(int(t.min));} display.setTextSize(1); // Установка набора символов if(int(t.sec)<10){ display.setCursor(37, 0); display.print("0"); display.setCursor(43, 0); display.print(int(t.sec));} // Вывод секунд else{ display.setCursor(37, 0); display.print((t.sec));} // Вывод секунд display.setCursor(8,17); byte d = work_day(); display.print(str[d]); Serial.println(str[d]); // Вывод дня недели Serial.println(d); Serial.println(rtc.getDOWStr()); display.setCursor(13,27); display.print(rtc.getDateStr()); // Вывод даты display.setTextSize(1); // Установка набора символов display.setCursor(25, 37); display.print("здесь t"); display.display(); // Вывод вместимого буфера на дисплей delay (1000); // Задержка 1 с } byte work_day() // функция должна быть вынесена за пределы скобок loop или setup { rtc.getTime(); if((rtc.getDOWStr())=="MONDAY") return 0; else if((rtc.getDOWStr())=="TUESDAY") return 1; else if((rtc.getDOWStr())=="WEDNESDAY") return 2; else if((rtc.getDOWStr())=="THURSDAY") return 3; else if((rtc.getDOWStr())=="FRIDAY") return 4; else if((rtc.getDOWStr())=="SATURDAY") return 5; else if((rtc.getDOWStr())=="SUNDAY") return 6; }а где "31" выводится?
"31" в мониторе, на дисплее, соответственно, пустота.
упс
Сделал так:
char* str[]={"Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"}; String d; ............................... String d = rtc.getDOWStr(); if(d == "Monday"){d=(str[0]);display.print(d);} else if(d == "Tuesday"){d=(str[1]);display.print(d);} else if(d == "Wednesday"){d=(str[2]);display.print(d);} else if(d == "Thursday"){d=(str[3]);display.print(d);} else if(d == "Friday"){d=(str[4]);display.print(d);} else if(d == "Saturday"){d=(str[5]);display.print(d);} else if(d == "Sunday"){d=(str[6]);display.print(d);}и код "заработал". Теперь дни недели на русском.
составь символы таким форматом:
byte symvol_a[] = {
B0,0,0,0,0
B0,0,1,0,0
B0,1,0,1,0
B0,1,1,1,0
B0,1,0,1,0
B0,1,0,1,0
B0,0,0,0,0
}
будет отоброжаца символ А .
в принцепе можно английскую букву "a". Ну вы меня поняли.
Только я не понял как его запустить.
Добрый день, уважаемое сообщество.
Тоже пытаюсь соединить дисплей от Nokia 5110 с Arduino Uno.
Для этого использую библиотеку https://github.com/carlosefr/pcd8544 с патчем и шрифтом от serghv.
В коде, если писать
lcd.print("Привет!");то отображается на экране все нормально: Привет!
А если передавать из COM-порта - то английские буквы показывает нормально - русские нет.
Я использую следующий код для передачи информации из компьютера в экранчик:
String s while (Serial.available()) { char c = Serial.read(); s += c; if (c == '\n') //перевод строки { lcd.clear(); lcd.setCursor(0, 0); lcd.print(s); }Пробую так же подключиться из Delphi к ардуино. Чувствую, что проблема просто с кодировкой. Однако, если делать кодировку UTF8 для передачи, то английский передается нормально, русский нет. Вообще не показывается на экране.
Хочу сделать нотификатор из гугл календаря на связке Ардуино - Дельфи.
Никакого utf8 только ascii
Да, вы правы!
Если попросить вывести хекс вместо символа на экран кодом
display.print(Serial.read(),HEX);
то выводятся коды кодировки СР1251, т.е. вместо А - C0, вместо а - E0. Тогда в чем может быть проблема? В таблице символов?
Как исправить?
Как исправить?
ну в вашем случае: найти/настроить терминал на ascii.
Вы же передаете из винды или по блютузу? Кто является источником?
источником сейчас является монитор последовательного порта из IDE Arduino для Windows. Так что меня смущает, что код-то передается тот, что нужно, в кодировке СР1251, см. мое предыдущее сообщение, а на экране не отображается.
https://ru.wikipedia.org/wiki/Windows-1251
Попробуй конвертить из CP1251 в расширенный ASCII
хм... туплю - это одно и тоже. Тогда надо смотреть как руссифицирован шрифт, возможно не по стандату