Вход

Регистрация
Главная
 

 

Пиротехнические пульты, пиротехническое оборудование
и пиротехника
Pyro Alex RF 48
Open Pyro SFX 8 D
Open Pyro SFX 10/120
Pyro Man 200 M
Spets 150
Приём заказов на изготовление пиротехнических пультов
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Пиропульты - Электроника Форум » Электроника » Микроконтроллеры и ПЛИС » Обработка сообщений принятых по UART контролером ARDUINO
Обработка сообщений принятых по UART контролером ARDUINO
alexval2007Дата: Понедельник, 15.11.2010, 23:35 | Сообщение # 1
Электро воспламенитель
Группа: Администраторы
Сообщений: 662
Награды: 7
Репутация: 7
Статус: Offline
Обработка сообщений принятых по 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;  
   }
}

на днях будет продолжение и комментарии сегодня устал уж извините wink
Прикрепления: UART.zip(5Kb)
 
romanДата: Пятница, 31.07.2015, 08:54 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Offline
Спасибо

Временная регистрация
 
alexval2007Дата: Суббота, 22.08.2015, 18:50 | Сообщение # 3
Электро воспламенитель
Группа: Администраторы
Сообщений: 662
Награды: 7
Репутация: 7
Статус: Offline
эх давно это было надо статеек добавить wink
 
Пиропульты - Электроника Форум » Электроника » Микроконтроллеры и ПЛИС » Обработка сообщений принятых по UART контролером ARDUINO
Страница 1 из 11
Поиск:


Rambler's Top100 Пиротехника, салюты, фейерверки. Яндекс цитирования
www.alexval2007.ucoz.ru © 2008