Обработка сообщений принятых по UART контролером ARDUINO
Иногда возникает необходимость что то принять из PC а иногда и что то отправить в него. Сегодня рас кажу как это сделать в среде ARDUINO.
Итак код
Code
// [b]Автор alexval2007[/b]
int led1 = 13; // светодиод 1
int led2 = 3; // светодиод 2
int button1 = 4; // кнопка 1
int button2 = 5; // кнопка 2
//**************************************************************************
int data1; // переменная для приема данных из уарта
int data2; // переменная для приема данных из уарта
//**************************************************************************
void setup(){// Инициализация
pinMode(led1, OUTPUT); // настраиваю порты светодиодов на вывод
pinMode(led2, OUTPUT); // настраиваю порты светодиодов на вывод
pinMode(button1, INPUT); // настраиваю порты кнопок на ввод
pinMode(button2, INPUT); // настраиваю порты кнопок на ввод
digitalWrite(button1, HIGH); //включаю подтягивающие резисторы для кнопок к лог "1"
digitalWrite(button2, HIGH);
Serial.begin(9600); // скорость обмена по уарт
Serial.println("Privet Medved"); //ТЕКСТ ПО УАРТ
}
//******************************************************************************
void loop(){// главный программный цикл
if (Serial.available()){
data1 = Serial.read(); // сохраним принятый бит в переменную data1
Obrabotka(data1); // вызываем подпрограмму обработки принятого байта
// while (!Serial.available()){
// delay(25); // ожидание следующего байта
// }
}
}
void Obrabotka(int i){// обработка принятого байта
switch (i){
case 48:
digitalWrite(led1, LOW); //выключаю оба светодиода если пришло "0"
digitalWrite(led2, LOW);
Serial.println("OFF LED ");//ТЕКСТ ПО УАРТ
break;
case 49:
digitalWrite(led1, HIGH); // вкл светодиод 1
Serial.println("ON LED 1 ");//ТЕКСТ ПО УАРТ
break;
case 50:
digitalWrite(led2, LOW); // вкл светодиод 2
Serial.println("ON LED 2 ");//ТЕКСТ ПО УАРТ
break;
}
}
Code
// Автор alexval2007
int ledPin1 = 2; // светодиод 1
int ledPin2 = 3; // светодиод 2
int ledPin3 = 13; // светодиод 3
#define buttonPin1 4 // кнопка 1
#define buttonPin2 5 // кнопка 2
//**************************************************************************
int data1; // переменная для приема данных из уарта
int data2; // переменная для приема данных из уарта
//**************************************************************************
//"unsigned long" которое возможно в функции "delay()" (максимальное значение 4 294 967 296 или
// 4294967.2 сек задержки).
unsigned long delay_button_1 = 1000; // задержка для кнопки 1
unsigned long delay_button_2 = 2500; // задержка для кнопки 2
// начальное состояние кнопок
int button1_state = LOW; // состояние кнопки 1
int button2_state = LOW; // состояние кнопки 2
int currentSwitchState = LOW; // текущее состояние кнопок
//**************************************************************************
void setup(){// Инициализация
pinMode(ledPin1, OUTPUT); // настраиваю порты светодиодов на вывод
pinMode(ledPin2, OUTPUT); // настраиваю порты светодиодов на вывод
pinMode(ledPin3, OUTPUT); // настраиваю порты светодиодов на вывод
pinMode(buttonPin1, INPUT); // настраиваю порты кнопок на ввод
pinMode(buttonPin2, INPUT); // настраиваю порты кнопок на ввод
digitalWrite(buttonPin1, HIGH); //включаю подтягивающие резисторы для кнопок к лог "1"
digitalWrite(buttonPin2, HIGH);
Serial.begin(9600); // скорость обмена по уарт
Serial.println("Privet Medved"); //ТЕКСТ ПО УАРТ
}
//******************************************************************************
void loop(){// главный программный цикл
if (Serial.available()){
data1 = Serial.read(); // сохраним принятый бит в переменную data1
Obrabotka(data1); // вызываем подпрограмму обработки принятого байта
// while (!Serial.available()){
// delay(25); // ожидание следующего байта
// }
}
//************************************************************************************************
// button1
currentSwitchState = digitalRead(buttonPin1);
if( currentSwitchState == LOW && button1_state == HIGH ) // push
Serial.println("Button 1 on");
digitalWrite(ledPin3, HIGH); //включаю светодиод 3
delay(delay_button_1); // задержка времени горения светодиода 3 для кнопки 1
//if( currentSwitchState == HIGH && button1_state == LOW ) // release
digitalWrite(ledPin3, LOW); //выключаю светодиод 3
button1_state = currentSwitchState;
// button2
currentSwitchState = digitalRead(buttonPin2);
if( currentSwitchState == LOW && button2_state == HIGH ) // push
Serial.println("Button 2 on");
digitalWrite(ledPin3, HIGH); //включаю светодиод 3
delay(delay_button_2); // задержка времени горения светодиода 3 для кнопки 2
//if( currentSwitchState == HIGH && button2_state == LOW ) // release
digitalWrite(ledPin3, LOW); //выключаю светодиод 3
button1_state = currentSwitchState;
}
//**************************************************************************************************
void Obrabotka(int i){// обработка принятого байта
switch (i){
case 48:
digitalWrite(ledPin1, LOW); //выключаю оба светодиода если пришло "0"
digitalWrite(ledPin2, LOW);
Serial.println("OFF LED ");//ТЕКСТ ПО УАРТ
break;
case 49:
digitalWrite(ledPin1, HIGH); // вкл светодиод 1
Serial.println("ON LED 1 ");//ТЕКСТ ПО УАРТ
break;
case 50:
digitalWrite(ledPin2, LOW); // вкл светодиод 2
Serial.println("ON LED 2 ");//ТЕКСТ ПО УАРТ
break;
}
}
на днях будет продолжение и комментарии сегодня устал уж извините