написал скетч для передачи двух переменных int в пакете через радиомодули 433.... вроде передается и все мигает и на передатчике и на приемнике, но в мониторе порта одни нули посмотрите плиз что не так код ниже Код (C++): // скетчь передатчика #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); #include <VirtualWire.h> #include <EasyTransferVirtualWire.h> int q; int z; EasyTransferVirtualWire ET; struct SEND_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO //Struct can'e be bigger then 26 bytes for VirtualWire version byte ID; int q; int z; }; //give a name to the group of data SEND_DATA_STRUCTURE mydata; void setup() { lcd.init(); lcd.backlight(); Serial.begin(9600); lcd.setCursor(0, 0); // Устанавливаем курсор в начало 2 строки lcd.print("S"); // Выводим текст delay(100); lcd.print("T"); // Выводим текст delay(100); lcd.print("A"); // Выводим текст delay(100); lcd.print("R"); // Выводим текст delay(100); lcd.print("T"); // Выводим текст delay(100); lcd.print(" "); // Выводим текст delay(100); lcd.print("A"); // Выводим текст delay(100); lcd.print("R"); // Выводим текст delay(100); // Выводим текст lcd.print("D"); // Выводим текст delay(100); lcd.print("U"); // Выводим текст delay(100); lcd.print("I"); // Выводим текст delay(100); lcd.print("N"); // Выводим текст delay(100); lcd.print("O"); // Выводим текст delay(500); //start the library, pass in the data details ET.begin(details(mydata)); mydata.ID = 1; // Initialise the IO and ISR vw_set_ptt_inverted(true); // Required for DR3100 vw_set_tx_pin(8); vw_setup(2000); // Bits per sec pinMode(13, OUTPUT); randomSeed(analogRead(0)); } void loop() { delay(150); // Защита от скачков напряжения тока. int q = analogRead(A0); // Чтоб не засорять радио эфир, отправим данные только, если обнаружим изменения на PIN (A0). int z = analogRead(A1); // Чтоб не засорять радио эфир, отправим данные только, если обнаружим изменения на PIN (A1). delay(100); // Пауза для обнаружения изменения на PIN (A0) (A1). q = map(q, 0, 1023, 0, 360); // Конвертируем значения с 1023 в 254, для светодиода. z = map(z, 0, 1023, 0, 180); // Конвертируем значения с 1023 в 254, для светодиода. lcd.clear(); lcd.print("Horizont -- "); lcd.print(q); // Выводим текст lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("Vertical -- "); lcd.print(z); // Выводим текст Serial.print(q); Serial.print(z); digitalWrite(13, HIGH); ET.sendData(); digitalWrite(13, LOW); delay(random(100, 1000)); } Код (C++): // код для приемника #include <VirtualWire.h> #include <EasyTransferVirtualWire.h> EasyTransferVirtualWire ET; struct SEND_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO //Struct can'e be bigger then 26 bytes for VirtualWire version byte ID; int q; int z; }; //give a name to the group of data SEND_DATA_STRUCTURE mydata; void setup(){ //start the library, pass in the data details ET.begin(details(mydata)); Serial.begin(9600); // Initialise the IO and ISR vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(2000); // Bits per sec vw_set_rx_pin(2); vw_rx_start(); // Start the receiver PLL running pinMode(13, OUTPUT); } void loop(){ //check and see if a data packet has come in. if(ET.receiveData()){ //this is how you access the variables. [name of the group].[variable name] //since we have data, we will blink it out. if (mydata.ID == 1) { Serial.print(mydata.q); Serial.print(mydata.z); } } } мне нужно на другом конце получить 2 int переменные помоему в приемнике я что то недоделал
А поместить значения q и z в структуру перед отправкой? В упор не вижу, чтобы это происходило. Задаются значения локальных переменных q и z, а отправляется-то глобальная структура с полями q и z. Т.е. перед ET.sendData(); поставить mydata.q=q; mydata.z=z; Или убрать переменные q и z и сразу использовать соответствующие поля структуры.
Код (C++): EasyTransferVirtualWire ET; struct SEND_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO //Struct can'e be bigger then 26 bytes for VirtualWire version byte ID; mydata.q=q; mydata.z=z; то есть вт так? А как сразу без обьявления переменных? И как на том конце вытащить переменные?
или так Код (C++): digitalWrite(13, HIGH); mydata.q=q; mydata.z=z; ET.sendData(); digitalWrite(13, LOW);
Второй вариант верный. Первый вариант не cкомпилируется, поскольку переменные q и t объявлены локально. А без объявления переменных q и z - это сразу использовать вместо них поля имеющейся структуры. Т.е. так: Код (Text): void loop() { delay(150); // Защита от скачков напряжения тока. mydata.q = analogRead(A0); // Чтоб не засорять радио эфир, отправим данные только, если обнаружим изменения на PIN (A0). mydata.z = analogRead(A1); // Чтоб не засорять радио эфир, отправим данные только, если обнаружим изменения на PIN (A1). delay(100); // Пауза для обнаружения изменения на PIN (A0) (A1). mydata.q = map(mydata.q, 0, 1023, 0, 360); // Конвертируем значения с 1023 в 254, для светодиода. mydata.z = map(mydata.z, 0, 1023, 0, 180); // Конвертируем значения с 1023 в 254, для светодиода. lcd.clear(); lcd.print("Horizont -- "); lcd.print(mydata.q); // Выводим текст lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки lcd.print("Vertical -- "); lcd.print(mydata.z); // Выводим текст Serial.print(mydata.q); Serial.print(mydata.z); digitalWrite(13, HIGH); ET.sendData(); digitalWrite(13, LOW); delay(random(100, 1000)); } На приеме вроде все нормально, в последовательный порт выводятся сразу поля структуры.
спасибо сейчас попробую.....))) А как на приеме результаты не в порт выдавать а в обьявленную переменную на другом конце int?
Просто присвоить переменной значение поля структуры, заполненной принятыми данными. Например, int val = mydata.z; С другой стороны, никто не мешает пользоваться непосредственно полем структуры mydata (точно так же, как оно используется для вывода в последовательный порт). Чем оно хуже отдельно объявленной целой переменной? Переменная может реально понадобиться, если надо преобразовать значение поля, например, сместить в другой диапазон, но при этом надо будет оставить для каких-то целей непосредственно принятое значение.
А неподскажете как добавить еще один передатчик в скетчь, допустим одна переменная через один передатчик передается а другая через другой... Смысл в том чтобы сравнить передатчики-у меня из два типа... вот хочу одновременно с одной платы передавать разными передатчиками