Member 12299248 Ответов: 3

Arduino uno последовательная связь


Привет , я использую arduino uno для последовательной отправки данных в visual basic.
проблема в том, что он продолжает посылать данные непрерывно.
я хочу, чтобы arduino отправлял данные только один раз.
пожалуйста помочь

Что я уже пробовал:

#include <softwareserial.h>
/ * - - - - - ( Объявление констант и Pin-кодов )-----*/
#define SSerialRX 10 //последовательный приемный pin-код
#define SSerialTX 11 //последовательный вывод передачи

#define SSerialTxControl 3 //Управление направлением RS485
#define RS485Transmit HIGH
#define RS485Receive LOW
int ledpin = 13;
/ * - - - - - ( Объявление объектов )-----*/
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX

/*-----( объявлять переменные )-----*/
инт byteReceived;
инт byteSend;

настройка недействительными() /****** установка: запускается один раз ******/
{
// Запустите встроенный последовательный порт, вероятно, для последовательного монитора
Серийный.методы begin(9600);
Serial.println("SerialRemote"); // можно игнорировать
pinMode(SSerialTxControl, выход);
digitalWrite(SSerialTxControl, RS485Receive); // Init трансивер

// Запустите последовательный порт программного обеспечения на другое устройство
RS485Serial.begin(9600); // установите скорость передачи данных
pinMode(ledpin,выход);
digitalWrite(ledpin,LOW);
}//--(окончательная настройка )---


void loop () / * * * * * * LOOP: работает постоянно ******/
{
//Копирование входных данных в выходные
если (RS485Serial.доступен())
{
digitalWrite(ledpin,HIGH);
byteReceived = RS485Serial.read(); // считывание байта
Serial.write(byteReceived); // показать на последовательном мониторе


}
}


}//--(конец основного цикла )---

/*-----( Объявить написанные пользователем функции )-----*/
//НИКТО

//*********( КОНЕЦ )***********

3 Ответов

Рейтинг:
2

glennPattonInThePubAgain!

МММ, не очень хорошая вещь, чтобы поместить код в setup(). измените if() на что-то другое, что RS485.available() вот почему, потому что ваше устройство постоянно отправляет данные
данные, которые вы можете отправить на устройство, чтобы быть тихим. Если вы используете Bool для проверки и установки после того, как ваша программа получила данные.

Цитата:
bool bSet = false;
-----
void loop{

if (bSet == false) && (RS485Serial.available == true)
{
   bSet = true; // too prevent retrigger
   Serial.write(byteReceived); 
}
}


или после цикла в пользовательских функциях что-то вроде:

Цитата:
bool bSet = false;
-----
void loop{

if (bSet == false) && (RS485Serial.available == true)
{
   bSet = true; // too prevent retrigger
   ReadMe(); 
}
}

}
}


}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/
void ReadMe(){

Serial.write(byteReceived); // Show on Serial Monitor

}


Dave Kreskowiak

Вопрос двухлетней давности?

glennPattonInThePubAgain!

Черт! нажал Q&A случайно увидел вопрос, который выглядел интересным, увидел, что я могу ответить на него, а затем посмотрел на дату!

Dave Kreskowiak

Я так и думал. Я тоже так делал.

Рейтинг:
1

Mircea Diaconescu

Он посылает данные непрерывно из-за этой линии

Serial.write(byteReceived);
из вашего метода "петли". Метод петли снова и снова выполняет...является только то, что есть.
Если вы хотите, чтобы это было выполнено только один раз, поместите эту строку кода в "setup" или, если это невозможно по какой-либо причине, просто сделайте флаг, который контролирует его выполнение, чтобы он выполнялся только один раз в "цикле".


Рейтинг:
0

Syed Zain Nasir

Если вы хотите отправить данные только один раз, то вам следует поместить свой код в цикл void setup () {}, потому что он будет выполнен только один раз.


NotPolitcallyCorrect

Вы имеете в виду сделать это точно так, как сказал раствор 1?