Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
1

Вывести строку из массива на COM порт

12.07.2012, 23:06. Показов 2065. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Время доброе.

Создаю массив:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        private const int
          MR = 8, // кол-во по вертикали
          MC = 8, // кол-во по горизонтали
 
        private int[,] Pole = new int[MR + 2, MC + 2];
 
        // Правильно заполняю ?
        private void button1_Click(object sender, EventArgs e)
        {
            int row, col;    // индексы клетки
            // очистить поле
            for (row = 1; row <= MR; row++)
                for (col = 1; col <= MC; col++)
                    Pole[row, col] = 0;
        }
 
         // При нажатии на одну из 64 кнопок записываю 0
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
             int row = (int)(e.Y/H) + 1, col = (int)(e.X/W) + 1;
             Pole[row, col] = 0;
        }
Что хочу:

Создается массив 8х8

Нужно построчно вывести на COM порт массив

Пробовал так:

C#
1
2
3
4
5
6
7
                for (int i = 0; i < Pole.GetLength(0); i++)
                {
                    for (int j = 0; j < Pole.GetLength(1); j++)
                    {
                        p.Write(Pole[i, j] + "");
                    }
                }
Не получилось...


Подскажите, исправьте уважаемые где ошибся...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2012, 23:06
Ответы с готовыми решениями:

Как вывести элемент массива в порт на асме?
Смещение в r14 mov.b #tidCodes, r4 mov.b @r14, r4 mov #0, &amp;SEG_PORT tidCodes DB %00111111,...

Если C изображает цифру, то вывести строку «digit», если латинскую букву — вывести строку «lat», если русскую — вывести строку «rus»
Доброй ночи всем программерам, примитивная задачка, но в стрингах я не шарю, помогите плиз......

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

Массив: Вывести элементы массива в строку...
Простой вопрос, при выводи чисел в массив они пишутся в столбик, например: 1 2 3 4 и т.д. А...

7
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
12.07.2012, 23:19 2
Смотря что именно вы хотите вывести в порт.
Текст? Цифры?
0
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
13.07.2012, 01:26  [ТС] 3
Нужно отправить Микроконтроллеру 8 бит.

Допустим есть 8 кнопок каждая из которых соответствует одному бит из восьми. При нажатии на кнопку указываю порядковый номер бита, в которой записываю 0 или 1
Как это сделать? Чтобы можно было записать 1 или 0 в указанный порядковый номер?

Добавлено через 16 минут
Поправте меня если я, что-то не понимаю.

Еще раз расскажу.

Как вообще отправить МК 8 бит, чтобы каждый бит можно было изменить на 0 или 1?
Что лучше использовать для этого?


Вот сейчас наработал это:

Есть матрица из кнопок 8х8. При нажатии из которой както нужно указать порядковый номер бита в которой будет запнисан 0 или 1.

Вообще отсылать МК нужно 8 раз по 8 бит.

Как быть?
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
13.07.2012, 08:22 4
Цитата Сообщение от sasha0192 Посмотреть сообщение
При нажатии на кнопку указываю порядковый номер бита, в которой записываю 0 или 1
Как это сделать? Чтобы можно было записать 1 или 0 в указанный порядковый номер?
Используйте побитовые операции или класс BitArray (но лично мне не нравится им пользоваться).
C#
1
2
3
4
5
6
7
8
9
byte value = 0; // Все биты = 0
value |= 1;     // Нулевой бит в единицу
value |= 2;     // Первый бит в единицу
value |= 4;     // Второй бит в единицу
value |= 8;     // Третий бит в единицу
value |= 16;    // Четвертый бит в единицу
value |= 32;    // Пятый бит в единицу
value |= 64;    // Шестой бит в единицу
value |= 128;   // Седьмой бит в единицу
Убираются биты через оператор & и ~:
C#
1
value &= ~1; // Убрать нулевой бит
Правда, если использовать константы, то потребуется приведение к byte и помещение в блок unchecked.

Цитата Сообщение от sasha0192 Посмотреть сообщение
Как вообще отправить МК 8 бит, чтобы каждый бит можно было изменить на 0 или 1?
8 бит - это один байт. Вот и отсылайте ему массив из одного байта с помощью метода Write.

Цитата Сообщение от sasha0192 Посмотреть сообщение
Что лучше использовать для этого?
Массив байтов.

Цитата Сообщение от sasha0192 Посмотреть сообщение
Вообще отсылать МК нужно 8 раз по 8 бит.
C#
1
2
3
4
5
6
byte[] buffer = new byte[8];
for (int i = 0; i < buffer.Length; i++)
{
   ... // Сделать что-нибудь с текущим байтом
   serialPort.Write(buffer, i, 1);
}
1
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
14.07.2012, 15:44  [ТС] 5
Что-то я запутался...

Еще разочек))

Есть матрица:
Изображения
 
0
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
14.07.2012, 16:04  [ТС] 6
Вот как мне на каждую строку сделать 8 бит ?
Чтобы загоревшимся сегментом можно было записать 0 или 1 ?

На миниатюре горит красным.

Тесть должно выглядеть так:

Код
11111111
11111111
11011111
11111111
11111111
11111111
11111111
11111111
Добавлено через 1 минуту
Затем построчно нужно вывести на порт...


ПОЖАЛУЙСТА ПОМОГИТЕ РАЗОБРАТЬСЯ
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
14.07.2012, 19:45 7
Обязательно должна быть матрица?
Почему не сделать просто 8 байтов, где каждый байт представляет строку из восьми бит?
Удобнее же будет работать с ком-портом.
0
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
14.07.2012, 21:58  [ТС] 8
Цитата Сообщение от kolorotur Посмотреть сообщение
Удобнее же будет работать с ком-портом.
В моем случае чуть на оборот ))) ну или мне так проще ))

Вроде разобрался спасибо большое)

Решил проблемку так:

C#
1
2
3
4
5
       private const int
         //int
          MR = 8, // кол-во клеток по вертикали
          MC = 8, // кол-во клеток по горизонтали
        string[,] Pole = new string[MR, MC];
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        string m =  "11111111";
        string m1 = "11111111";
        string m2 = "11111111";
        string m3 = "11111111";
        string m4 = "11111111";
        string m5 = "11111111";
        string m6 = "11111111";
        string m7 = "11111111";
 
        string[] s1 = { "1", "1", "1", "1", "1", "1", "1", "1" };
        string[] s2 = { "1", "1", "1", "1", "1", "1", "1", "1" };
        string[] s3 = { "1", "1", "1", "1", "1", "1", "1", "1" };
        string[] s4 = { "1", "1", "1", "1", "1", "1", "1", "1" };
        string[] s5 = { "1", "1", "1", "1", "1", "1", "1", "1" };
        string[] s6 = { "1", "1", "1", "1", "1", "1", "1", "1" };
        string[] s7 = { "1", "1", "1", "1", "1", "1", "1", "1" };
        string[] s8 = { "1", "1", "1", "1", "1", "1", "1", "1" };
При нажатии получаю координаты которые соответствуют порядковому номеру в массиве.

C#
1
2
3
4
5
6
7
8
                    s1[col - 1] = "0";
                        m = "";
                    for (int i = 0; i < 8; i++)
                    {
                        m = m + s1[i];
                        listBox1.Items.Clear();
                        listBox1.Items.Add(m);
                    }
В итоге в m записывается строка из массива s1 и получилось так: 11111111

После переда на порт:

C#
1
2
3
            byte be1 = Convert.ToByte(m, 2);
            byte[] bytes1 = { be1 };
            p.Write(bytes1, 0, 1);
Вот и так для кадкой строчке их 8.

Вот вопросик, как сделать проще ?

А то приходится ставить условие на какой строчке происходит изменение...

СПАСИБО !
0
14.07.2012, 21:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2012, 21:58
Помогаю со студенческими работами здесь

Вывести строку массива с максимальной длиной
Задан строковый массив.Вывести строку с максимальной длиной Заранее спасибо!

Как мне вывести элементы массива в строку
Как я могу вывести значения массива nech в строку? for i in range(n): print(nech)\

немогу вывести элементы из массива в строку в МЕМО1
Подскажите что нужно доделать Дано 24 целых числа. Распечатать их в обратном порядке по шесть...

Как вывести три массива в одну строку
Доброго дня всем. Подскажите как правильно соединить массивы в строку? Есть исходный результат:...

Вывести в строку элементы последнего столбца двумерного массива C(m,n)
Вывести в строку элементы последнего столбца двумерного массива C(m,n). Массив заполнить случайным...

Вывести заданную строку из массива строк через указатель
char lines = { { 'hell' }, {'Dirt' }, {'Mane'}, {'LLLL'} }; char *pl = &amp;lines; нужно вывести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru