Что за зверь: микросхема PCH (или «Хаб»)
Довольно долго разработчики компьютерных платформ придерживались трёхчиповых решений: на материнской плате присутствовали процессор, северный мост и южный мост.
Особняком стоял видеочип, которого могло и не быть, особенно если проектировали ноутбук бюджетного класса — на этот случай в северный мост размещалось несложное видеоядро, достаточное для офисной работы.
Однако, в процессе развития миниатюризации, Intel и AMD перенесли контроллер памяти и контроллер шины PCI-e непосредственно в процессор и объединили функционал оставшихся двух чипов — в один. Этот чип теперь называется «Platform Controller Hub» у Intel и «Fusion Controller Hub» у AMD.
Соответственно — PCH и FCH. Хоть названия и разные, функции, выполняемые чипами — одинаковые.

Микросхема BD82HM76 от Intel — во всей красе и крупным планом.
Этот чип «заведует» периферией — к нему подключены порты USB, контроллеры звука, сети и SD-карт, порты SATA, микросхема BIOS и остальные устройства ввода-вывода.
Также хаб участвует в работе материнской платы, взаимодействуя с мультиконтроллером, коммутируя сигнал на матрицу, генерируя тактовые частоты для других устройств, обрабатывая сигналы, необходимые для работы энергосбережения. В хабе находится память CMOS и часы реального времени.
Почему ломается «хаб»?
Чаще всего хаб выходит из строя по причине подачи на него нештатного напряжения от периферии. Например, когда пользователь включает в порт USB принтер или флэшку, от статического электричества хаб может выйти из строя.
Другой пример: время грозы выгорает сетевой контроллер, он может «утащить» за собой и хаб. Случается, неопытный пользователь решает самостоятельно заменить дисплей в ноутбуке и не отключает перед этим аккумулятор. Это тоже может вывести из строя хаб.

Микросхема PCH от Intel в естественной среде обитания
Из-за сложности и окончательной определённости в названии, многие по старинке называют ХАБ «южным мостом», что нельзя назвать ни 100% верным обозначением ни грубейшей ошибкой. Фунцкионал связя с периферией она всё-таки исполняет, но части функций «южанина» таки уже лишилась.
Замена микросхемы хаба в Кемерово — зачастую входит в комплекс работ по ремонту материнской платы для ноутбука в Кемерово. А по сложности сопоставима с заменой любой другой крупной периферийной микросхемы в BGA корпусе, за исключением центральных процессоров и случаев, когда необходимо модифицировать дамп флэш-памяти BIOS (или современной UEFI). Наличие микросхем BGA на нашем крупнейшем складе в Кемерово можно узнать в каталоге на нашем сайте.
What is «pch.h» and why is it needed to be included as the first header file?
pch stands for precompiled header.
In computer programming, a precompiled header is a (C or C++) header file that is compiled into an intermediate form that is faster to process for the compiler. Usage of precompiled headers may significantly reduce compilation time, especially when applied to large header files, header files that include many other header files, or header files that are included in many translation units.
To reduce compilation times, some compilers allow header files to be compiled into a form that is faster for the compiler to process. This intermediate form is known as a precompiled header, and is commonly held in a file named with the extension .pch or similar, such as .gch under the GNU Compiler Collection.
In Visual Studio, precompiled header is usually named «pch.h» (for console based applications), but it is possible to use different name, or not use it at all. Which file would be precompiled header, if any, is determined by projects settings.
If the precompiled header file is «pch.h» and the compile option is /Yu , Visual Studio will not compile anything before the #include «pch.h» in the source file; it assumes all code in the source up to and including that line is already compiled.
После обновления пакета linux-image система перестала видеть динамики ноутбука. Debian 12

А systemctl restart —user pipewire pipewire-pulse не помогает?
Werenter ★★
( 13.09.23 15:59:07 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 15:58:16 MSK

Werenter ★★
( 13.09.23 15:59:30 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 15:59:07 MSK

Failed to connect to bus: Носитель не найден
MrCookie
( 13.09.23 15:59:46 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 15:59:30 MSK

00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 0b) 00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b) 00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 0b) 00:04.0 Signal processing controller: Intel Corporation Haswell-ULT Thermal Subsystem (rev 0b) 00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04) 00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04) 00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04) 00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4) 00:1c.2 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4) 00:1c.3 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 4 (rev e4) 00:1c.4 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 5 (rev e4) 00:1d.0 USB controller: Intel Corporation 8 Series USB EHCI #1 (rev 04) 00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04) 00:1f.2 SATA controller: Intel Corporation 8 Series SATA Controller 1 [AHCI mode] (rev 04) 00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04) 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 10) 03:00.0 Network controller: Qualcomm Atheros AR9485 Wireless Network Adapter (rev 01) 04:00.0 3D controller: NVIDIA Corporation GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (rev a1)
Команда lsusb не найдена
MrCookie
( 13.09.23 16:00:53 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 16:00:53 MSK

Ну тут уже видна модель:
. 00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04) .
Werenter ★★
( 13.09.23 16:01:43 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 16:01:43 MSK

dmesg |grep audio
bugs-bunny ★
( 13.09.23 16:02:05 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от bugs-bunny 13.09.23 16:02:05 MSK

[ 8.128477] snd_hda_intel 0000:00:03.0: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915]) [ 8.252473] snd_hda_codec_conexant hdaudioC1D0: CX20751/2: BIOS auto-probing. [ 8.253522] snd_hda_codec_conexant hdaudioC1D0: autoconfig for CX20751/2: line_outs=1 (0x17/0x0/0x0/0x0/0x0) type:speaker [ 8.253533] snd_hda_codec_conexant hdaudioC1D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0) [ 8.253538] snd_hda_codec_conexant hdaudioC1D0: hp_outs=1 (0x16/0x0/0x0/0x0/0x0) [ 8.253542] snd_hda_codec_conexant hdaudioC1D0: mono: mono_out=0x0 [ 8.253545] snd_hda_codec_conexant hdaudioC1D0: inputs: [ 8.253549] snd_hda_codec_conexant hdaudioC1D0: Internal Mic=0x1a [ 8.253553] snd_hda_codec_conexant hdaudioC1D0: Mic=0x19
MrCookie
( 13.09.23 16:02:34 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 16:02:34 MSK

Судя по логам, звуковуха работает, а отвалился pipewire. Попробуй запустить speaker-test .
Werenter ★★
( 13.09.23 16:03:53 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 16:03:53 MSK

А он не будет на всю катушку орать? )))
MrCookie
( 13.09.23 16:04:21 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 16:03:53 MSK

speaker-test 1.2.8 Playback device is default Stream parameters are 48000Hz, S16_LE, 1 channels Using 16 octaves of pink noise ALSA lib pcm_dmix.c:999:(snd_pcm_dmix_open) unable to open slave Playback open error: -2,Нет такого файла или каталога
MrCookie
( 13.09.23 16:06:15 MSK ) автор топика
- Ответить на это сообщение
- Показать ответы
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 16:06:15 MSK

Пакет pipewire-alsa стоит? Если да, то снеси его на время и попробуй снова.
Werenter ★★
( 13.09.23 16:08:13 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 16:08:13 MSK

MrCookie
( 13.09.23 16:09:01 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 16:06:15 MSK

В настройках аудиоустройств посмотреть, какой канал выбран сейчас. У меня вот есть headphones, hdmi audio и что-то еще. Повыбирать.
bugs-bunny ★
( 13.09.23 16:09:16 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от bugs-bunny 13.09.23 16:09:16 MSK

Там ничего нет и кнопка «Проверить» ничего не даёт
KDE Plasma у меня, в Параметры системы заходил
MrCookie
( 13.09.23 16:10:24 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 15:59:46 MSK

А что выдаёт systemctl status —user pipewire ?
Werenter ★★
( 13.09.23 16:23:43 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 16:23:43 MSK

Failed to connect to bus: Носитель не найден
MrCookie
( 13.09.23 16:28:04 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 16:28:04 MSK

А если попробовать стартануть pipewire вручную из консоли, командами pipewire и pipewire-pulse, то работает?
Werenter ★★
( 13.09.23 16:31:12 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Werenter 13.09.23 16:31:12 MSK

[E][04884.264419] mod.protocol-native | [module-protocol-: 687 init_socket_name()] server 0x558d5940b520: name pipewire-0 is not an absolute path and no runtime dir found. Set one of PIPEWIRE_RUNTIME_DIR, XDG_RUNTIME_DIR or USERPROFILE in the environment [E][04884.264579] pw.conf | [ conf.c: 594 load_module()] 0x558d593f3130: could not load mandatory module "libpipewire-module-protocol-native": Нет такого файла или каталога [E][04884.264959] default | [ pipewire.c: 125 main()] failed to create context: Нет такого файла или каталога
MrCookie
( 13.09.23 16:31:55 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 16:31:55 MSK

Pipewire же старуется просто командой pipewire ?
MrCookie
( 13.09.23 16:33:29 MSK ) автор топика
- Ответить на это сообщение
- Ссылка

На старом ядре пробовал грузиться, там работает?
Vsevolod-linuxoid ★★★★★
( 13.09.23 18:14:26 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Vsevolod-linuxoid 13.09.23 18:14:26 MSK

Попробовал, проблема осталась
MrCookie
( 13.09.23 18:34:07 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 18:34:07 MSK

Значит проблема пришла не с ядром, а с каким-то пакетом. Логи бы того, что обновилось. Вроде бы в /var/log/apt/history.log и архивы ##.tar.gz
bugs-bunny ★
( 13.09.23 18:51:57 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка

[offtopic]
Стабильный Debian, говорили они…
[/offtopic]
Werenter ★★
( 13.09.23 21:03:49 MSK )
Последнее исправление: Werenter 13.09.23 21:03:55 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от MrCookie 13.09.23 16:06:15 MSK
ХЗ, какой там дефолт назначили эти ваши новомодные пульсы/пайпвари, и как именно это сделали. Во-первых, посмотри, какие физические устройства выдаёт aplay -L . Если там есть звуковуха, сделай на неё speaker-test -t wav -c2 -D plughw: . По результатам уже надо разбираться. Вангую, что звуковая надстройка сломала какие-то конфиги алсы. Они все пихают свои конфиги в /usr/share/alsa , где и так чёрт ногу сломит.
alegz ★★★★
( 14.09.23 07:53:56 MSK )
Последнее исправление: alegz 14.09.23 08:05:04 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от alegz 14.09.23 07:53:56 MSK

Так тут куча всяких разных: и Open Sоund System, и чё-то связанное с HDMI. Такой (Intel Corporation 8 Series HD Audio Controller (rev 04)) карточки в списке нет
null Discard all samples (playback) or generate zero samples (capture) lavrate Rate Converter Plugin Using Libav/FFmpeg Library samplerate Rate Converter Plugin Using Samplerate Library speexrate Rate Converter Plugin Using Speex Resampler jack JACK Audio Connection Kit oss Open Sound System pulse PulseAudio Sound Server speex Plugin using Speex DSP (resample, agc, denoise, echo, dereverb) upmix Plugin for channel upmix (4,6,8) vdownmix Plugin for channel downmix (stereo) with a simple spacialization hw:CARD=HDMI,DEV=3 HDA Intel HDMI, BKY230 Direct hardware device without any conversions hw:CARD=HDMI,DEV=7 HDA Intel HDMI, HDMI 1 Direct hardware device without any conversions hw:CARD=HDMI,DEV=8 HDA Intel HDMI, HDMI 2 Direct hardware device without any conversions plughw:CARD=HDMI,DEV=3 HDA Intel HDMI, BKY230 Hardware device with all software conversions plughw:CARD=HDMI,DEV=7 HDA Intel HDMI, HDMI 1 Hardware device with all software conversions plughw:CARD=HDMI,DEV=8 HDA Intel HDMI, HDMI 2 Hardware device with all software conversions hdmi:CARD=HDMI,DEV=0 HDA Intel HDMI, BKY230 HDMI Audio Output hdmi:CARD=HDMI,DEV=1 HDA Intel HDMI, HDMI 1 HDMI Audio Output hdmi:CARD=HDMI,DEV=2 HDA Intel HDMI, HDMI 2 HDMI Audio Output dmix:CARD=HDMI,DEV=3 HDA Intel HDMI, BKY230 Direct sample mixing device dmix:CARD=HDMI,DEV=7 HDA Intel HDMI, HDMI 1 Direct sample mixing device dmix:CARD=HDMI,DEV=8 HDA Intel HDMI, HDMI 2 Direct sample mixing device usbstream:CARD=HDMI HDA Intel HDMI USB Stream Output hw:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog Direct hardware device without any conversions plughw:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog Hardware device with all software conversions default:CARD=PCH HDA Intel PCH, CX20751/2 Analog Default Audio Device sysdefault:CARD=PCH HDA Intel PCH, CX20751/2 Analog Default Audio Device front:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog Front output / input surround21:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog 2.1 Surround output to Front and Subwoofer speakers surround40:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog 4.0 Surround output to Front and Rear speakers surround41:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog 5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers dmix:CARD=PCH,DEV=0 HDA Intel PCH, CX20751/2 Analog Direct sample mixing device usbstream:CARD=PCH HDA Intel PCH USB Stream Output
MrCookie
( 14.09.23 08:10:46 MSK ) автор топика
Последнее исправление: MrCookie 14.09.23 08:11:08 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от bugs-bunny 13.09.23 18:51:57 MSK

Обновлялись эти пакеты:
Start-Date: 2023-09-13 09:14:12 Commandline: apt upgrade Requested-By: mrcookie (1000) Install: linux-image-6.1.0-12-amd64:amd64 (6.1.52-1, automatic) Upgrade: linux-compiler-gcc-12-x86:amd64 (6.1.38-4, 6.1.52-1), linux-kbuild-6.1:amd64 (6.1.38-4, 6.1.52-1), linux-image-amd64:amd64 (6.1.38-4, 6.1.52-1), vivaldi-stable:amd64 (6.2.3105.47-1, 6.2.3105.48-1), linux-libc-dev:amd64 (6.1.38-4, 6.1.52-1) End-Date: 2023-09-13 09:16:27
Ещё ставил вот это (VMWare просила):
Start-Date: 2023-09-13 12:10:16 Commandline: apt install linux-headers-6.1.0-12-amd64 Requested-By: mrcookie (1000) Install: linux-headers-6.1.0-12-amd64:amd64 (6.1.52-1), linux-headers-6.1.0-12-common:amd64 (6.1.52-1, automatic) End-Date: 2023-09-13 12:10:21
Вот один архив, на второй мне пишет что нет доступа, хотя я под рутом
MrCookie
( 14.09.23 08:19:48 MSK ) автор топика
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от MrCookie 14.09.23 08:10:46 MSK
Кстати, надо было спросить с самого начала: ~/.asoundrc и/или /etc/asound.conf есть, или используется только дефолтный конфиг дистрибутива?
Вот это она, похоже. speaker-test -t wav -c2 -D plughw:PCH что-то даёт? Судя вот этому
ALSA lib pcm_dmix.c:999:(snd_pcm_dmix_open) unable to open slave
из предыдущего теста, дефолтный dmix не может найти свою звуковуху (card 0 по умолчанию). aplay -l (с маленькой «l») какие номера выдаёт?
alegz ★★★★
( 14.09.23 08:57:57 MSK )
Последнее исправление: alegz 14.09.23 08:58:32 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от alegz 14.09.23 08:57:57 MSK

Ни одно из упомянутых файлов нет. спикертест выдаёт следующее, звука нет:
speaker-test 1.2.8 Playback device is plughw:PCH Stream parameters are 48000Hz, S16_LE, 2 channels WAV file(s) Rate set to 48000Hz (requested 48000Hz) Buffer size range from 64 to 1048576 Period size range from 32 to 524288 Using max buffer size 1048576 Periods = 4 was set period_size = 262144 was set buffer_size = 1048576 0 - Front Left 1 - Front Right Time per period = 10,934328
**** List of PLAYBACK Hardware Devices **** card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [BKY230] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: PCH [HDA Intel PCH], device 0: CX20751/2 Analog [CX20751/2 Analog] Subdevices: 0/1 Subdevice #0: subdevice #0
MrCookie
( 14.09.23 09:02:40 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 14.09.23 09:02:40 MSK
Ну, то есть, конфиги дефолтные, звуковуха находится, и ошибок при выдаче на неё нет, уже хорошо. Не слышно может быть из-за настроек миксера, поковыряйся с alsamixer -c 1 .
Но номер интеловской звуковухи не 0, а 1 — такое может быть, если порядок загрузки модулей изменился. Можно поковыряться с этим порядком, можно задать дефолт при помощи установки переменной окружения ALSA_PCM_CARD=1, много чего можно.
(Вспомнил тут, что в пакете alsa-utils есть утилитка alsa-info , делающая дико полезный в подобных случаях дамп, который можно выложить куда-нибудь на pastebin и с ним уже разбираться.)
alegz ★★★★
( 14.09.23 09:20:31 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от alegz 14.09.23 09:20:31 MSK

Я вот на панели задач жму на звук и там написано, что устройств для ввода-вывода звука не найдено.
alsamixer чёт ничего не даёт
Пакет alsa-utils стоит, но команда alsa-info не найдена
Переменную поставил, не перезагружался (а это,, думаю, и не надо), но всё равно не работает.
MrCookie
( 14.09.23 09:38:47 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от MrCookie 14.09.23 09:38:47 MSK
«Панель задач» — это уже надстройка. Что там, pipeware? Я её не знаю, у неё есть где-то выбор звукового устройства по умолчанию? Должен быть где-то в настройках.
alsamixer чёт ничего не даёт
Что такое «ничего не даёт»? alsamixer -c1 в консоли не запускается, или что?
Пакет alsa-utils стоит, но команда alsa-info не найдена
sudo alsa-info (или что там у тебя, чтобы от рута её запустить).
alegz ★★★★
( 14.09.23 10:26:27 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от alegz 14.09.23 10:26:27 MSK

Ну я в этом микшере покрутил Master, Speaker, PCM — звука всё равно нет.
MrCookie
( 14.09.23 10:35:59 MSK ) автор топика
Последнее исправление: MrCookie 14.09.23 10:36:42 MSK (всего исправлений: 2)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Arduino.ru
Количество команд в последовательности не имеет жесткого ограничения. Необходимо получить последовательность целиком. В этом проблема.
Пытался двигаться в этом направлении:
void loop() < if(mySerial.available()>0) < symbol = mySerial.read(); incomingByte = symbol; if(incomingByte !=-1)< command = command + symbol; >> >
С двумя символами способ работает, но когда посылаю 3 символа, то последний не отображается. Если посылаю 4, то появляются кракозябры. Видимо, не успевает долетать информация или я её неправильно оргнизую. Подскажите пожалуйста, в каком направлении двигаться для решения это задачи? Использовать readBytes()?
- Войдите на сайт для отправки комментариев
Пт, 26/01/2018 — 10:37

Зарегистрирован: 25.05.2015
Ну, по этому куску ничего не скажешь. Каких типов command , incomingByte и symbol ? Почему Вы нигде не проверяеете на конец посылки (#)? Что значит » посылаю 3 символа»? Символа или команды?
В общем, если хотите нормального обсуждения, делайте пример работающего скетча на десяток строк в котором Вы принимаете ntrcn и печатаете в сериал. Пишите что вводите в мониторе порта и что потом печатается (последнее копипастом). Тогда можно будет о чём-то говорить. Сейчас же . хрустальные шары на этом форуме запрещены, так что .
- Войдите на сайт для отправки комментариев
Пт, 26/01/2018 — 10:41
Зарегистрирован: 18.01.2015
Можно этой штукой считать
Serial.readBytesUntil(character, buffer, length)
А можно просто в цикле читать и складывать в буфер пока не встретили #. Потом уже спокойно разбирать пакет (или обнаружить что это был и не пакет а что-то «искаженное»).
- Войдите на сайт для отправки комментариев
Пт, 26/01/2018 — 10:56
Зарегистрирован: 05.02.2016
ЕвгенийП, хотел проверить возможность получения трех символов(которые не относятся к поставленной задаче), но даже три символа нормально считать не удалось.
Penni, в readBytesUntil() необходимо указывать кол-во байтов, которые нужно считать, а это неизвестно.
Буду пробовать считывать до ‘#’, хотя вчера вечером такое пытался релизовать, но программа не находила символ ‘#’. Скорее всего сам ошибку допустил. Буду смотреть.
- Войдите на сайт для отправки комментариев
Пт, 26/01/2018 — 11:28
Зарегистрирован: 18.01.2015
Какой-то размер вы все равно будите для буфера приемного указывать, например, 30-50 байт, чтобы точно любой пакет влез. Вот это число и указывайте в readBytesUntil. Она прервется по любому из трех событий, встретили символ конца, прочитали всю длину либо вышел таймаут. В идеальном варианте она всегда будет прерываться по символу #
- Войдите на сайт для отправки комментариев
Пт, 26/01/2018 — 11:54
Зарегистрирован: 18.01.2015
Если без всяких проверок на ошибки при приеме и прочего, то вот так, примерно
#define IN_BUFFER_SIZE 50 char inBuffer[IN_BUFFER_SIZE]; void setup() < Serial.begin(9600); >void loop() < if(Serial.available()) < memset(inBuffer, '\0', IN_BUFFER_SIZE); Serial.readBytesUntil('#', inBuffer, IN_BUFFER_SIZE); char * pch = strtok (inBuffer,"$;#"); while (pch != NULL) < Serial.println(pch); pch = strtok (NULL, "$;#"); >> >
- Войдите на сайт для отправки комментариев
Пт, 26/01/2018 — 12:23

Зарегистрирован: 25.05.2015
Twilkeris пишет:
но даже три символа нормально считать не удалось.
ЕвгенийП пишет:
если хотите нормального обсуждения, делайте пример работающего скетча на десяток строк в котором Вы принимаете ntrcn и печатаете в сериал. Пишите что вводите в мониторе порта и что потом печатается (последнее копипастом).
Остаётся в силе.
- Войдите на сайт для отправки комментариев
Сб, 27/01/2018 — 19:18
Зарегистрирован: 05.02.2016
Penni, спасибо большое! Изучил Ваш код, теперь всё работает.
Только если между (13 и 14) и (15 и 16) строчками в коде из сообщения #5 делаю вывод сообщения в порт через .println(), то появляются крокозябры в принятой команде.. Не знаю чем это можно объяснить. В моей программме нет необходимости в этих частях что-то выводить, но всё же особенность заинтересовала. Был бы благодарен, если кто-нибудь смог бы ткнуть меня носом в нужном направлении.
Пока что тестирую обработку принятой команды, поэтому часть кода Penni не использую. В качестве входных данных использую команду «u100». Получаю команду, записываю в inBuffer и вызываю функцию goMove(), которая занимается обработкой команды. Записываю char* pch в String command, потому что со String привык работать, а вот char* для меня дикий зверь.
Проблема в том, что не выполняется(видимо) код из строк 22, 26, 27. Пробовал ставить в разные места — результат не меняется: в ответ ничего не приходит и, соответственно, код в switch() не выполняется. Подскажите пожалуйста, в чём я допустил ошибку?
SoftwareSerial mySerial(51, 50); const int IN_BUFFER_SIZE = 64; char inBuffer[IN_BUFFER_SIZE]; void loop() < if(mySerial.available()>0) < memset(inBuffer, '\0', IN_BUFFER_SIZE); mySerial.readBytesUntil('#', inBuffer, IN_BUFFER_SIZE); goMove(inBuffer); >> void goMove(char* pch) < String command = pch; mySerial.println("command: " + command); if(isDigit(command.charAt(1)))< String str_value = ""; int value = 0; for(int k=1; kmySerial.println("charAt(): " + command.charAt(0)); mySerial.println("str_value: " + str_value); value = str_value.toInt(); mySerial.println("value: " + value); mySerial.println("charAt(): " + command.charAt(0)); switch(command.charAt(0)) < case 'u': movement.to_up(value); case 'd': movement.to_down(value); case 'l': movement.to_left(value); case 'r': movement.to_right(value); >> >
- Войдите на сайт для отправки комментариев