pascal
Главная | Каталог статей | Регистрация | Вход
Суббота
08.02.2025
20:12
Приветствую Вас Гость | RSS
Главная » Статьи » Arduino » MyProject

Serial_pin_Controller

Управление контроллером(пинами) через команды, посылаемые с COM порта.

Возможно расширение списка команд. Файл Serial_Control.h

Команды:

getName; - Возвращает имя контроллера. (имя задается в конструкторе)
getPin(pin_number); - Возвращает digitalRead значение с пина pin_number
setPin(pin_number)(val); - Выполняет digitalWrite значения val на пин pin_number

 

Код:


//pin.h

//Класс пин
struct pin{
  //Номер пина
  int numb;
  //-----------------------
  
  //Конструктор
  pin(){}
  pin(int numb){
   this->numb = numb;   
    }
  //-----------------------
  //Считать значение
  int readVal(){
      pinMode(numb, INPUT);
      int val = digitalRead(numb);
      return val;    
    }

  //задать значение
  public: void writeVal(int val){
      pinMode(numb, OUTPUT);
      digitalWrite(numb, val);
    }
  
  };


//controller.h

#include "pin.h"

//Контроллер
class controller{
  //Имя
  protected: String name;
  //Пины
  protected: pin *pins;
  int k_pin;
 

  public: String getName(){
    return name;
    }
  int getK_pin(){
      return k_pin;
    }
  
   public: void setPinVal(int numb, int val){
      pins[numb].writeVal(val);
    }
   public: int getPinVal(int numb){
      return pins[numb].readVal();
    }
 

   controller(String name, int k_pin){      
      this->name = "\0";
      this->name = this->name + name;
      
      pins = new pin[k_pin];
      this->k_pin = k_pin; 
      for (int i = 0; i < k_pin; i++)
        pins[i].numb = i;;      
    }
   ~controller(){
    }
  };


//Serial_Control.h


#include "controller.h"

//Текст комманд
#define S1 "getName"
#define S2 "getPin"
#define S3 "setPin"


class Serial_Control{
  public: controller *c;
  
  
  public : void getName(){
      Serial.println(c->getName());
    }


  int test_pin_numb(int numb){
      if ((numb >= 0) && (numb < c->getK_pin()))
        return 1;
      else
        return 0;
    }
//------------------------
  int Command1(){
    if (In_String == S1){
        getName();
        return 1;        
        }
     return 0;    
    }

  int Command2(){
      if (In_String.indexOf(S2) >= 0){
      //Значения параметров
      int pos1;
      int pos2;
      String numb;
        
      pos1 = In_String.indexOf('(');
      pos2 = In_String.indexOf(')');
      numb = In_String.substring(pos1 + 1, pos2);
      int pin = numb.toInt();

      Serial.println("Read");
      if (test_pin_numb(pin)){
        int val = c->getPinVal(pin); 
        Serial.println("Pin: " + String(pin) + " is val : " + String(val));
        return 1;
      }
      else{
        Serial.println("!Pins number Error!");
        return -1;
        }        
    }
    else
      return 0;
  }

  int Command3(){
    if (In_String.indexOf(S3) >= 0){
      //Значения параметров
      int pos1;
      int pos2;
      String numb;
        
      pos1 = In_String.indexOf('(');
      pos2 = In_String.indexOf(')');
      numb = In_String.substring(pos1 + 1, pos2);
      int pin = numb.toInt();

      pos1 = In_String.indexOf('(', pos2+1);
      pos2 = In_String.indexOf(')', pos1);
      numb = In_String.substring(pos1 + 1, pos2);
      int val = numb.toInt();

      Serial.println("Write");
      if (test_pin_numb(pin)){
        c->setPinVal(pin, val);
        Serial.println("Pin: " + String(pin) + " is val : " + String(val));
        return 1;
      }
      else{
        Serial.println("!Pins number Error!");
        return -1;
        }
    }
    else
      return 0;          
   }  

  protected: 
  String In_String;
  
  public: void Serial_Listen(){
    char In_char = Serial.read();
    if (In_char != ';'){
      In_String = In_String + In_char;     
      }
    else{
      In_String.trim();

      Command1();
      Command2();
      Command3();
      In_String = "\0";
    }
  }
//------------------------
  
  Serial_Control(String name, int k_pin){
    c = new controller(name, k_pin);

    In_String = "\0";
    }
  };


Controller.ino

#include "Serial_Control.h"

Serial_Control *c1;

void setup() {
  Serial.begin(9600);  
  
  c1 = new Serial_Control("My controller\0", 14);
  c1->getName();
}

void loop() {
  if (Serial.available() > 0){      
    c1->Serial_Listen();
  }
}

Категория: MyProject | Добавил: cccc1808 (28.07.2016)
Просмотров: 240 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт
Поиск
Copyright MyCorp © 2025
Бесплатный хостинг uCoz