Заполнить массив
- Войдите на сайт для отправки комментариев
На порт поступают данные они распознаются как 0 и 1 и передаются в функцию для заполнения массива data[8]
{10111101}-{11000000}-…..
void SendBit(byte b)
{
bitWrite(data[0],1,1);
bitWrite(data[0],1,0);
bitWrite(data[0],1,1);
bitWrite(data[0],1,1);
bitWrite(data[0],1,1);
bitWrite(data[0],1,0);
bitWrite(data[0],1,1);
Как реализовать запись остальных данных в массив?
bitWrite(data[1],1,1);
bitWrite(data[1],1,1);
bitWrite(data[1],1,0);
bitWrite(data[1],1,0);
bitWrite(data[1],1,0);
bitWrite(data[1],1,0);
bitWrite(data[1],1,0);
}
массива
В чем смысл второго аргумента функции bitWrite? Того, что у вас везде равен единице?
И что за функциё такоё void SendBit(byte b)? Где у нее начало и где конец? Для чего в нее передается байт по имени b?
Индекс массива data[1], Байт по имени b это аргумент функции 0 или 1
Может у кого-то есть пример как «побитово» заполнить массив из 8 значений byte
bitWrite(data[0],1,b);
bitWrite(data[0],1,b);
bitWrite(data[0],1,b);
bitWrite(data[0],1,b);
bitWrite(data[0],1,b);
bitWrite(data[0],1,b);
bitWrite(data[0],1,b);
Затупил
И еще раз - зачем нужен второй аргумент в функции bitWrite()? Отмаза про индекс массива не прокатывает - вы явно задаете этот индекс в первом аргументе - data[0].
Далее, если вы передаете в функцию 0 или 1 (аргумент b), то какого рожна восемь раз подряд вызывать функцию bitWrite c одним и тем же значением третьего аргумента?
Не понимаю... (с)
Если я правильно понял:
или так:
смотря какая последовательность заполнения массива нужна.
Моё почтение за Вашу толерантность step962, попробую изложить проблему:
Есть пустой массив объявлен как:
byte data[8];
Необходимо заполнить его значениями при помощи функции bitWrite чтобы получился
Вот например такой массив с такими значениями:
byte signal[8] = {77,95,143,42,7,10,1,2};
где 77 в бинарном 01001101
где 95 в бинарном 01011111
и так до конца 64 бита
1001101
bitWrite(data[0], 7, 0);
bitWrite(data[0], 6, 1);
bitWrite(data[0], 5, 0);
bitWrite(data[0], 4, 0);
bitWrite(data[0], 3, 1);
bitWrite(data[0], 2, 1);
bitWrite(data[0], 1, 0);
bitWrite(data[0], 0, 1);
1001101
bitWrite(data[1], 7, 0);
bitWrite(data[1], 6, 1);
bitWrite(data[1], 5, 0);
bitWrite(data[1], 4, 1);
bitWrite(data[1], 3, 1);
bitWrite(data[1], 2, 1);
bitWrite(data[1], 1, 1);
bitWrite(data[1], 0, 1);
На каком принципе построить функцию, чтобы поступающие данные, где качестве аргументов 0100110101001101 заполнялся массив. Сначала 0-левой индекс массива signal[0]=01001101 затем signal[1]=01011111 и так до конца заполнить 64 битами весь массив
Спасибо.
А данные в каком виде у вас должны поступать в вашу функцию? Тип данных какой?
boolean
0100110101001101101011111101101110100011
void savebit(boolean val){
}
Если boolean то только один бит, а у вас их много, откуда вы эти данные берете?
Я так предпологаю, вы их с какого-то входа получаете?
Да, чтобы просто декодировать хотел загнать в массив..
Что декодировать?
Пульт радиоупровления
bitWrite(data[0], 7, 0);
bitWrite(data[0], 6, 1);
bitWrite(data[0], 5, 0);
bitWrite(data[0], 4, 0);
bitWrite(data[0], 3, 1);
bitWrite(data[0], 2, 1);
bitWrite(data[0], 1, 0);
bitWrite(data[0], 0, 1);
В-о-о-о-т.
Уже пости понятно.
Есть входной поток, который надо загнать в байтовый массив, используя функцию bitWrite(), реализация которой пока не дается. Так?
Для начала организуем цикл приема:
Далее городим функцию bitWrite:
На выходе получаем поток битов, разложенный порциями по восемь.
Оно?
В смысле - искомое решение?
Нет - попробуйте сформулировать свой проблемус еще раз.
Так давайте не будем играть в угадайку, опишите, что хотите сделать?
Пульт радиоупровления
Вы, кстате, с какими параметрами сигнал обрабатываете (частота следования битов прежде всего интересует)? Может быть, он средствами UART может приниматься?
Есть несколько пультов радиоуправления на частоту 433,92. Есть модуль приёмник. С пульта летит 64 бита информации C8 5F 8F 2A 07 0A 01 4D в зависимости от начатой кнопки меняется данные, которые необходимо сравнивать
Вот формат http://narod.ru/disk/45399853001.6970bf09c934cc8d35cf33cefa85b85b/010101...
А к приемнику вы куда и как подключаетесь?
Это радиомодуль 433 мГц к любому Digital
Вы сигнал как демодулируете?
Огромное Спасибо Maksim буду разбирать твои примеры
interrupts();
}
void pinint(){
if(digitalRead(rxd)==HIGH)oldtime=micros();
else{
time=micros()-oldtime;
if(time<mintime)return;
if(constrain(time,log0-delta,log0+delta)==time)savebit(false);
else if(constrain(time,log1-delta,log1+delta)==time)savebit(true);
else{
count=0;
}
}
}
Поробуйте так:
и покажите, что у вас в сериал-мониторе
Сейчас не смогу, не у себя дома :)
DATAPIN -это вывод к которому подключаетесь, у меня в коде он 4
interrupts();
4 нельзя
attachInterrupt(interrupt, function, mode)
Задает функцию обработки внешнего прерывания, то есть функция, которая будет вызвана по внешнему прерыванию. Если до это была задана другая функция, то назначается новая. Большинство контроллеров Arduino умеют обрабатывать до двух внешних прерываний, пронумерованных так: 0 (на цифровом порту 2) и 1 (на цифровом порту 3). Arduino Mega обрабатывает дополнительно еще четыра прерывания: 2 (порт 21), 3 (порт 20), 4 (порт 19) и 5 (порт 18).
Как проверете, выложите, что дает сериал-монитор.
Ок! Спасибо
Вы мне зачем про прерывания расказываете?
И вы путаете понятие порта с воводом (пином).
Вы, кстати, до этого хотябы в с-монитор эти 64-бита выводили? Вы уверены, что ваш код правильно демодулирует сигнал?