Нашел в интернете реализацию кода манчестер, но для примера только одно слово передается. А как сделать чтобы передавался массив? А лучше чтобы изначально это были числовые переменные, которые потом будут последовательно передаваться
#include "VirtualWire.h"
#define txPin 3 // цифра 3 - это номер ноги, к которой подключается контакт data передатчика.
#define Te 1000
const int led_pin = 13; //сигнальный светодиод
void setup() {
pinMode(txPin, OUTPUT); // настраиваем ногу txPin, т.е. ногу №3 как выход
Serial.begin(9600);
}
void loop() {
//SendCame(0b0000000000000000); //пока такой код передаем (в HEX АААААА). Принимается сообщение как 010101010101010101010101 (в HEX это 555555). В действительности будет код 1111 1111 0100 1111 1111 0100<U+202C> как обозначено в топике.
long Send []={0b00000000,0b10101010};
SendCame(Send); тут берется только первый
}
void SendCameBit(byte b) // 0 передается 2-мя высокими интервалами, 1-м низким интервалом
{
delayMicroseconds(Te);
if (!b) digitalWrite(txPin, HIGH);
delayMicroseconds(Te);
digitalWrite(txPin, HIGH);
delayMicroseconds(Te);
digitalWrite(txPin, LOW);
}
void SendCame(long Code) {
digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи
digitalWrite(txPin, HIGH);
delayMicroseconds(Te);
digitalWrite(txPin, LOW); // посылаем стартовый импульс
delay(5);
for (int j = 0; j < 2; j++) // посылку посылаем как 4 раза подряд, т.к. посылка может потеряться из-за ЭМ помех.
{
for (byte i = 8; i > 0; i--) {
SendCameBit(bitRead(Code, i - 1)); // побитово перебираем и посылаем код
}
delay(20); //здесь большое значение времени >300 вообще сигнал не принимается. Почему? было 10!
}
extern void vw_wait_tx() ; // Ожидаем окончания отправки сообщения
digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи
delay(10); // сделать паузу после посылки на 1,5 мс было 1500!
}
если вы что то не знаете, публикуйте ваши вопросы в разделе для новичков, тут обсуждают вопросы, от тех кто понимает, что он делает и возникли коллизии, и требуется их решение/обсуждения.
Ну, тогда ему надо ещё delay в конце передачи убрать.
Это сильно заточено под конкретную принималку. Если Вы не с нею работаете, то Вам бы лучше написать свою реализацию без притянутых за уши странных задержек. Кстати, комментерии типа
видимо, введены, чтобы сбить с толку противника.
Но, если уж Вы хотите использовать именно эту реализацию, то, смотрите: у Вас есть готовая функция отправки одного бита – SendCameBit. Вот и отправляйте ею по одному биту столько, сколько нужно, хоть гигабайты. В чём Ваша проблема?
Открою Вам страшный секрет: в компьютере (такой архитектуры, как мы используем) всё (от слова «совсем всё», для особо недоверчивых – «совсем-совсем – без исключений – всё) хранится в бинарном коде Переводить надо, когда хочется это в десятичном (или ещё каком) напечатать для того, чтобы человеку читать удобнее было.
Просто передавайте SendCameBit байт и она его передаст, не придумывайте себе сложностей.
Тогда помогите пожалуйста как передать, к примеру три числа.
В этом коде берётся sendcame(0b1111111), если он воспримит и sendcame(3522355), то хорошо, а как тогда сделать, чтобы он передавал несколько чисел? Цикл? Но когда я пробовал засунуть засунуть все последующее после void loop, он что-то ругался
Если Вы так будете читать, Вы никогда ничего не передадите. Я Вам дважды (если плохо видно, то ДВАЖДЫ) писал какой функцией Вам нужно пользоваться. Вот здесь
и здесь
Чего Вы всё тянете эту SendCame?
Ещё раз, у Вас есть функция отправки бита. И есть нечто (число или там ещё что-то), что нужно переслать. Делаете цикл по битам отправляемого пакета (если он больше байта, то удобнее цикл по байтам, а в него уже вложить цикл по битам внутри байта) и спокойно, бит за битом всё отправляете.
Пример, как делать цикл по битам есть в “Вашем” коде в строках №№ 41-43. Вот примерно так и отправляйте.
Т.е. идею я Вам изложил, готовый пример у Вас есть. Какие у Вас ещё проблемы?