#176 Re: Апаратні питання » Старшие модели » 2018-03-17 19:18:01

Вячеслав Азаров пише:

Общесоюзная система управления железными дорогами "Экспересс" работала, на простецких ДВК и СМ-ЭВМ, лучше чем ее апгрейд на новiтнix суперкомпьютерах.

Я думаю, что это просто беспокоят старые раны.
На погоду... big_smile

#177 Re: Апаратні питання » Старшие модели » 2018-03-17 18:14:27

Вячеслав Азаров пише:

Хороший компьютер, мой ноутбук хуже. Только, что на нем "крутить", и зачем? Качественного ПО нет даже за деньги, ну не считая большие деньги.

Ну не скажите...
- там работает внутри Linux (один из вариантов Linux)...
- для Linux полно качественного ПО ... гораздо больше (если говорить о качественном) чем под Windows...
- на таком компьютере можно делать любой сложности встраиваемые (embedded) системы
- и вовсе не только игрушечного уровня Uno/Nano, но уже и серьёзные проекты промышленного, внедренческого и т.д. уровней.

Важно, и для меня неожиданно, что это устройство работает под управлением того же Arduino IDE (для отладки, загрузки, проверки ...).

Кроме того, существует целый спектр (и по развитости, мощности - и по стоимости) устройств ... от минимального Nano и до вот таких устройств.

#178 Апаратні питання » Старшие модели » 2018-03-17 17:32:11

Olej
відповідей: 6

Работает ли кто, имеет ли кто опыт работы, кроме вот тех давних свистелок и перделок a'la Uno/Nano, со старшими моделями, поддерживаемыми разработкой в Arduino IDE?

Такие, например, как Intel Edison:
c050bee2991867fc5bd5b41cd8020c2e.jpg
Хотя Arduino IDE платы стоят на AliExpress порядка $145 ... но это и совсем другой компьютер:
HTB1g1MOPpXXXXa6XVXXq6xXFXXXz.jpg?size=27908&height=349&width=502&hash=d867783f6abccc5016de4a8d3b26bd60
HTB1EgI9PpXXXXaRXpXXq6xXFXXXI.jpg?size=38323&height=349&width=502&hash=10fd910e704a641b869436897ccbdd67

Хотя, там, в Arduino IDE перечне контроллеров, есть великое множество, целый спектр промежуточных моделей.

#179 Re: Програмування Arduino » Для меня сложно, а для вас нет) » 2018-03-15 16:53:46

alex_dol пише:
NEW_NOOB пише:

А как сбросить таймер millis? Нужно что бы он считал не с начала включения ардуино, а с начала включения лампы.

А зачем сбрасывать millis? Можно запомнить его текущее значение, дальше думайте сами.

При этом ещё держать в уме, что примерно через 50 дней millis превратится в ноль через переполнение.
И это событие нужно как-то ловить и анализировать, если собираться работать дольше 50 дней.

#180 Re: Програмування Arduino » помогите понять протокол » 2018-03-15 16:49:03

robber пише:

Заранее СПАСИБО

Я вам давно уже показал ваше решение в 3 строчки, на другом форуме: http://arduino.ru/forum/programmirovanie/pomogite-s-protokolom-0#comment-352616

Заранее ПОЖАЛУЙСТА  big_smile

#181 Re: Програмування Arduino » удержание кнопки Keypad » 2018-03-14 20:41:01

angruh пише:

как ето реализовиать

Как вам уже подсказали, какими-то стандартными средствами библиотеки вы это не сделает.
Но вам можно это сделать вручную анализируя состояние (нажата-отжата) клавиш ... по крайней мере "0" и "C".
У вас классическая задача switch-автомата...
1. Уберите все свои while() - у вас loop() есть как цикл для switch анализа.
2. Поставьте в конце loop(), после switch фиксированную задержку ... скажем delay( 100 ), и забудьте про время, а считайте числа циклов (по 0.1 сек.) прошедшие с какого-то события...

angruh пише:

одиночное нажатие на кнопку «удалить»(C) должно удалять один символ;
удержание кнопки в течение двух секунд должно очищать экран;
удержание кнопки «0» должно выводить на дисплей точку, для работы с
десятичными дробями;
не могу понять как в коде задать удержания клавиш

3. при нажатии "C" устанавливает boolean признак bC.
4. и считаете число циклов (nC) при bC == true ...
5. если bC сбросится в false при nC < 20, то удаляете 1 символ: сдвигаете курсор на позицию влево + записываете туда пробел
6. а вот если nC > 20, а bC всё ещё true - чистите весь экран
7. при нажатии "0" записываете на индикатор "0", но взводите признак b0 = true, и если на следующем цикле loop() клавиша "0" всё ещё нажата - затираете "0" на индикаторе + ставите "." + переводите программу (boolean признак) в режим ввода дробной части.

Вот где-то такую логику строите...
Ничего там особенно "военного" нет! big_smile

#182 Re: Програмування Arduino » русские символы в Arduino IDE » 2018-03-14 18:35:05

Olej пише:

UNICODE - это чисто теоретическая таблица, присвоение кодов символов самым замысловатым языкам ... например, музыкальным нотам. Код UNICODE - всегда 4 байта. Но нигде, ни в одном языке и ОС в таком виде не используется ... не для того предназначается.

UTF-32 - способ кодирования UNICODE значений, каждый символ кодируется как uint32_t.

UTF-16 - способ кодирования UNICODE значений,  каждый символ кодируется uint16_t. Это то, как UNICODE понимается в Windows - сдостаточно старый способ представления UNICODE.

UTF-8 - способ кодирования UNICODE значений последовательностью байт переменной длины (это очень важно!) - каждый символ (код UNICODE) представляется как последовательность байт длиной от 1 до 6 (первоначально) байт ... позже, в угоду совместимости с Windows в стандарте было решено не использовать 5 и 6 байтные последовательности (но многим POSIX-ОС это не указ) - это новая кодировка UNICODE, первоначально придуманая авторами UNIX для операционной системы Plan 9 (~2004г.).

Здесь есть ещё один аспект, который я сразу забыл отметить - связанный с порядком байт в компьютере: BE или LE (big-endian или little-endian) - какой байт в 16 или 32 бит int считается младшим (в порядке адресации байт). Это очень важно при обменах: обменах между процессорами разных архитектур, сетевых обменах TCP/IP и т.д.

BE: IBM 360/370/390, Motorola 68000, SPARC ... + все сетевые обмены всех протоколов TCP/IP
LE: Intel x86, USB, конфигурация PCI, таблица разделов GUID (для идентификации дисков и др. целей)
Кстати ... я не знаю BE/LE относительно процессоров AVR, на которых собраны Arduino?

Поэтому и кодировки UTF-16 тут же развалились на 2 новых: UTF-16LE (это Windows wchar_t, как я понимаю) и UTF-16BE.

А относительно UTF-8 ещё можно дополнить:
- для UTF-8 нет проблемы порядка байт ... в том числе и при сетевых обменах;
- UTF-8 - самосинхронизирующийся код: при обрыве потока текста в любом месте, после его восстановления легко восстанавливается начало очередного символа (по формату 1-го байта).

#183 Re: Програмування Arduino » русские символы в Arduino IDE » 2018-03-14 17:02:14

Green пише:

Ардуино IDE и КА у заказчика. Какие варианты? Что то поменяется - буду только рад.)

Не ... ну, если "бабло молотим" - так только на пользу ... и флаг в руки: "сто старушек - сто рублей!"
Но вот если для себя делать, и что-то посложнее чем простейший управляющий контроллер (это тоже имеет право быть, но сейчас о другом ... например об обмене с хост-компьютером через Serial) - то всё становится совершенно не так весело.

#184 Re: Програмування Arduino » Для меня сложно, а для вас нет) » 2018-03-14 16:04:44

Olej пише:

2. Вот такие примеры, как выше - они очень соответствуют тому, что пишут во всех книгах и статьях по языку C.

А вот такая запись:

uint32_t x;

В ряде случаев, это будет куда содержательнее для читающего (да и пишущего тоже ... через 2 недели после написания), чем просто:

int x;

И поможет избежать очень досадных и тяжёлых ошибок ... типа таких:

if( x < 0 ) { ... };

#185 Re: Програмування Arduino » русские символы в Arduino IDE » 2018-03-14 15:55:52

Green пише:
Olej пише:

Если кто-то сталкивался с проявлениями этих проблем - поделитесь.
А я поделюсь то, что от себя знаю.

Нужно было выводить кириллицу в кассовый аппарат. Дабы было всё красиво, написал перекодировщик UTF-8 в CP-866. Проблем не было.)

Вот об этой глупости ... фиче, простите, я и говорю: когда каждый сам для себя пишет перекодировщик... : на каждый чих и на каждую кодовую таблицу - пишем свой перекодировщик.
Только при смене операционной системы (Windows на Linux, или наоборот) или модели оконечного устройства (другой "кассовый аппарат") - всё это посыпется!

#186 Re: Програмування Arduino » Для меня сложно, а для вас нет) » 2018-03-14 15:51:55

Вячеслав Азаров пише:
Olej пише:

Описание API avr-libc на русском языке (хоть и несколько горбатом) см. здесь.

Ага. Пошлите, еще, новичка к Atmel Software Framework, он еще богаче чем avr-libc.

А чего же не послать? big_smile
В библиотеках есть множество достаточно элементарных вещей, которые:

1. Очень упрощают написание кода ... например вместо 20 штук последовательно друг за другом вызовов:

Serial.print(...);
// ... и ещё так же 25 раз ...
Serial.println(...);

Записать:

char msg[ 80 ];
sprintf( msg, "%s%d%x%x%x", "это будет ", n, " штук HEX чисел:", x1, x2, x3 );
println( msg );

(я бы мог это записать ещё проще, без промежуточного буфера msg, через printf() ... но это будет уже действительно посложнее).

2. Вот такие примеры, как выше - они очень соответствуют тому, что пишут во всех книгах и статьях по языку C. А отсутствие того, что написано во всех книжках, Arduino IDE - будет вызывать смущение в уме.
И это ещё важнее.

#187 Re: Програмування Arduino » русские символы в Arduino IDE » 2018-03-14 15:41:14

Olej пише:

А я поделюсь то, что от себя знаю.

Я скопирую сюда то, что писал на совсем другом форуме:

DarkGenius пише:

Первый байт означает какая кодировки и какая версия, второй собственно код символа, если ты пишешь тут двухбайтный код символа в десятичной системе, это о многом говорит. Всё есть в сети, а если тебе лень разбиратся не засоряй форум.
Кириллица в Юникоде
Windows-1251

Всё не совсем так просто... И для корректной работы с символьными строками с этим нужно разобраться:

UNICODE - это чисто теоретическая таблица, присвоение кодов символов самым замысловатым языкам ... например, музыкальным нотам. Код UNICODE - всегда 4 байта. Но нигде, ни в одном языке и ОС в таком виде не используется ... не для того предназначается.

UTF-32 - способ кодирования UNICODE значений, каждый символ кодируется как uint32_t.

UTF-16 - способ кодирования UNICODE значений,  каждый символ кодируется uint16_t. Это то, как UNICODE понимается в Windows - сдостаточно старый способ представления UNICODE.

UTF-8 - способ кодирования UNICODE значений последовательностью байт переменной длины (это очень важно!) - каждый символ (код UNICODE) представляется как последовательность байт длиной от 1 до 6 (первоначально) байт ... позже, в угоду совместимости с Windows в стандарте было решено не использовать 5 и 6 байтные последовательности (но многим POSIX-ОС это не указ) - это новая кодировка UNICODE, первоначально придуманая авторами UNIX для операционной системы Plan 9 (~2004г.).

В языка C/C++ для представления локализованных символов введен (стандарт C89, позже C99) тип данных wchar_t - широкие символы. И вот тут начинается неразбериха ... в разных ОС wchar_t имеют разные представления: в Windows - uint16_t, в Linux и других новых ОС - uint32_t ("чистый" UNICODE). Никакого отношения wchar_t к UTF-8 не имеют!

Кодировки, кодовые страницы: CP-866, CP-1251, KOI-8r, ... и ещё 1001 шт. - это прошлый, ... или даже позапрошлый день... когда все иноязычные символы представлялись 1-м байтом.

Все способы кодирования UNICODE - UTF-8, UTF-16, UTF-32 - к кодовым страницам никакого отношения не имеют, они в единой кодировке представляют все возможные в природе символы.

Все новые языки программирования: Python, Go, Swift, Kotlin, Tust ... - используют кодировку UTF-8 по умолчанию.

Но для аппаратного обмена (индикаторы, дисплеи, светодиодные панели, ...) нужно преобразовывать любое представление в 1-байтовое. И вот это (как это делать) заслуживает детального обсуждения.

С какой целью копирую?
Возможно, кого-то заинтересует до конца разобраться с этими проблемами ... или поэкспериментировать для уточнения.

#188 Програмування Arduino » русские символы в Arduino IDE » 2018-03-14 15:35:33

Olej
відповідей: 16

Вообще то, Arduino IDE (пишут) использует по умолчанию UTF-8 кодировку UNICODE.
Для англоязычных символов (как пишут во всех примерах кода) это не имеет никакого значения.
Но для русскоязычных символов это порождает проблемы, с которыми хотелось бы разобраться.
Когда вообще возникают (могут) русскоязычные символы в Arduino?
1. При выводе на индикаторы ... LCD 1602, например, или TFT (об этих проблемах галдёж на форумах Arduino стоит года с 2011-го big_smile )
2. Обмен по вводу-выводу через Serial
3. Обмен с ОС, самописными программами, или Processing на хост-компьютере (и здесь в Linux и Windows будут принципиально разные вещи ... но в чём? насколько? и какими неприятностями выражаться?)
4. При самых разных сетевых обменах

Если кто-то сталкивался с проявлениями этих проблем - поделитесь.
А я поделюсь то, что от себя знаю.

#189 Re: Програмування Arduino » Для меня сложно, а для вас нет) » 2018-03-14 15:26:28

Вячеслав Азаров пише:

Справочник по ядру Ардуино, на русском, есть здесь: https://doc.arduino.ua/ru/prog/ . А по билиотекам гуглите и читайте исходники и документацию на https://www.arduino.cc/reference/en/.

Кроме того, стандартная библиотека avr-libc намного шире, чем то, что доступно из описаний Arduino. Но всё это доступно для использования в коде скетча.
Описание API avr-libc на русском языке (хоть и несколько горбатом) см. здесь.

#190 Re: Програмування Arduino » Помогите с нажатием на кнопку (удержание) » 2018-03-12 12:14:35

Green пише:
radio-active пише:

нехрена

научитесь правильно писать сначала.

ни хрена?  roll

#191 Re: Програмування Arduino » форматирование символьных строк » 2018-03-12 09:28:07

Olej пише:

Подсказали в другом месте, может кому пригодится:

Но там же подсказали и гораздо интереснее:

Если printf Вам нужен только для вывода в поток (как в Вашем примере), то ещё удобнее делать это (выводить в поток) сразу, без запроса буфера. Например,

//	Эти три строки пишем в начале файла
#include <stdio.h>
static int serial_fputchar(const char ch, FILE *stream) { Serial.write(ch); return ch; }
static FILE *serial_stream = fdevopen(serial_fputchar, NULL);

void setup(void) { 
	stdout = serial_stream; // эта строка первая в setup
	//
	// А ТЕПЕРЬ ТУПО ПОЛЬЗУЕМСЯ printf
	//
	Serial.begin(115200);
	int a = 8;
	// Печатаем a в разных видах
	printf("a=%d, a=%02d, a=%04d, a=%05d, a=%06d\n", a, a, a, a, a);
}

void loop(void){}

Пользуйтесь! smile

#192 Re: Програмування Arduino » форматирование символьных строк » 2018-03-12 09:25:33

Olej пише:

Подсказали в другом месте, может кому пригодится:

sprintf искаропки не поддерживает форматный вывод с плавающей точкой. Используй dtostrf() или dtostre().

Пример:

#include <alloca.h>

void setup() {
  Serial.begin( 9600 ); // устанавливаем последовательное соединение
}

void reply( boolean lng ) {
  unsigned long time = millis();
  char *msg = (char*)alloca( 80 );
  if( !lng )
    sprintf( msg, ".%lu", time % 1000 );
  else
    sprintf( msg, "%02lu:%02lu.%03lu", 
             ( time / 1000 ) / 60, 
             ( time / 1000 ) % 60, time % 1000 );
  Serial.println( msg ); 
}

void loop() {
  if( Serial.available() > 0 ) // есть доступные данные
    reply( '?' == Serial.read() );
  Serial.flush(); 
  delay( 300 ); 
}

Результат:

00:01.802
00:03.916
00:06.332
.450
.358
00:15.669
00:18.685
00:45.133
01:40.422

#193 Re: Програмування Arduino » форматирование символьных строк » 2018-03-12 09:23:47

Olej пише:

Получается, что sprintf() функция есть, форматы %d, %s и т.д. - успешно работают. А формат %f/%e - нет. Почему? Хотя в описании форматов для printf() из avr-libc эти форматы (%f/%e) есть.

Подсказали в другом месте, может кому пригодится:

sprintf искаропки не поддерживает форматный вывод с плавающей точкой. Используй dtostrf() или dtostre().

#194 Програмування Arduino » форматирование символьных строк » 2018-03-12 02:32:54

Olej
відповідей: 5

Сделаю так:

...
uint32_t i = 1000;
double s = 1.2345;
char msg[ 40 ];
sprintf( msg, "%d => %8.2f", i, s );
Serial.println( msg ); 
...

Результатом будет:

1000 =>         ?

Получается, что sprintf() функция есть, форматы %d, %s и т.д. - успешно работают. А формат %f/%e - нет. Почему? Хотя в описании форматов для printf() из avr-libc эти форматы (%f/%e) есть.
Более того, формат %8.2f определил даже ширину позиции вывода (8), знак '?' отстоит на это число позиций (менял-проверял).
Как можно форматировать строки?

#195 Проекти » Симулятор Arduino » 2018-03-12 00:25:14

Olej
відповідей: 1

Arduino Tinkercad - симулятор Arduino (не только программного кода, но и схемотехники проекта) от компании Autodesk - мэтра CAD-систем, владельца торговой марки AutoCad.

Иногда, когда нет под рукой живого Arduino, это быстрый способ набросать проект. А иногда это - более быстрый способ отмакетировать проект, чем собирать его на проводах на макетке.

Здесь можете почитать краткое введение в предмет, более чем достаточное, чтобы начать работать с Tinkercad:

Tinkercad симулирует работу электронных схем и контроллера, но при этом он является эмулятором ардуино, реализуя практически все базовые функции Arduino IDE — от среды редактирования и компилятора до монитора порта и подключения библиотек.

Вот как это выглядит (что там у меня на картинке за проект - не важно):
file.php?id=2888&t=1

#196 Re: Різне » Книги по Arduino, свободно скачать » 2018-03-09 21:12:02

Петин В.А., Биняковский А.А.
Практическая энциклопедия Arduino
xvk7nkv8UFw-211x300.jpg

Скачать

#199 Re: Різне » Книги по Arduino, свободно скачать » 2018-03-09 20:58:28

Петин В.А.
Проекты с использованием контроллера Arduino.
jhbu82vfleg-250x250.jpg

Скачать

Підвал форуму