Я пишу программу последовательной связи между mkr wifi 1010 и мега, в которой mkr отправляет на мега символ H или L, а мега отвечает, читая символ и устанавливая его встроенный светодиод на высокий или низкий уровень в зависимости от символ. Когда я использую задержку (#) на микроконтроллере, код работает нормально, а светодиод мегапикселя мигает и гаснет.
Однако, когда я создаю код без задержки, светодиод мегафона не мигает. Он либо остается низким, либо остается высоким, большую часть времени остается низким. Я проверил код mkr, прочитав последовательный порт, и он действительно отправляет 72 (H) и 76 (L) попеременно с правильным интервалом в обеих версиях кода.
Схема подключения:
MKR Mega
gnd -> gnd
tx -> rx
rx -> tx
Я сместил уровень на выводе TX Mega до 3,3 В перед контактом RX на MKR.
Код задержки мкр:
void setup()
{
uint32_t baudRate = 9600;
Serial1.begin(baudRate);
}
void loop()
{
Serial1.print('H');
delay(500);
Serial1.print('L');
delay(500);
}
Код без задержки mkr:
unsigned long curT = 0;
unsigned long prevT = 0;
const int interval = 500;
int byteToSend = 'L';
void setup()
{
uint32_t baudRate = 9600;
Serial1.begin(baudRate);
}
void loop()
{
curT = millis();
if (curT - prevT > interval)
{
if (byteToSend == 'L')
{
byteToSend = 'H';
}
else
{
byteToSend = 'L';
}
Serial1.print(byteToSend);
prevT = curT;
}
}
мега-код:
const int ledPin = 13; // the pin that the LED is attached to
int incomingByte; // a variable to read incoming serial data into
void setup() {
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
void loop() {
// see if there's incoming serial data:
if (Serial.available() > 0)
{
// read the oldest byte in the serial buffer:
incomingByte = Serial.read();
// if it's a capital H (ASCII 72), turn on the LED:
if (incomingByte == 'H')
{
digitalWrite(ledPin, HIGH);
}
// if it's an L (ASCII 76) turn off the LED:
if (incomingByte == 'L')
{
digitalWrite(ledPin, LOW);
}
}
}
Насколько я знаю, эти две разные программы mkr делают одно и то же и отправляют последовательные данные одинаково, просто одна блокирует, а другая - неблокирующая. Почему не мигает код без задержки?
int
(2 байта) для отправки байта. И получить. - person Mark Setchell   schedule 04.10.2020