Image 01

Image 01 Image 01

A&A-Scheduler

A&A-Scheduler հավելվածը նախատեսված է միկրոկոնտրոլերների հետ աշխատելու համար: Առաջադրանքների ժամանակացույց, որը նախատեսված է Android սարքերի միջոցով կառավարելու Arduino և այլ միկրոկոնտրոլերային հարթակներ: Միկրոկոնտրոլերի հետ հաղորդակցությունն իրականացվում է USB UART կարգավորիչի միջոցով: A&A-Scheduler-ը ավտոմատ կերպով ճանաչում է USB UART կարգավորիչի դրայվերները և փորձում է հարցում ուղարկել միկրոկոնտրոլերին՝ սպասելով պատրաստ պատասխանի: Պատրաստի ազդանշանը ստանալուց հետո A&A-Scheduler-ը համապատասխան հրամանները կուղարկի միկրոկոնտրոլերին՝ ըստ նախատեսված ժամանակացույցի: A&A-Scheduler-ն աշխատում է հետին պլանում:

Image 01

Image 02

Image 03

Image 04

Հասկանալու համար, թե ինչպես է հավելվածն հաղորդակցվում միկրոկոնտրոլերի հետ, ուսումնասիրենք մի պարզ օրինակի միջոցով: Օրինակի էությունն այն է, որ ցուցադրվի թե ինչպես է հավելվածը ճանաչում միկրոկոնտրոլերին և հավելվածի ուղարկված հրամանները ինչպես կարող են մշակոել միկրոկոնտրոլերի կողմից։ Օրինակի համար կօգտագործենք Arduino NANO հարթակը, պիեզո բարձրախոս, 5 (հատ) LED, 6 (հատ) ռեզիստոր: Arduino NANO հարթակն արդեն ինտեգրված է USB UART կարգավորիչի հետ և ունի USB միակցիչ: Նախ NANO-ն USB մալուխով միացնենք մեր Android սարքին։ Երբ հավելվածը գործարկվի կամ եթե այն ադդեն գործարկված է, Android համակարգը մեզանից թույլտվություն կխնդրի, որպեսզի հավելվածն աշխատի USB UART-ի հետ: Այս փուլում կարևոր չէ՝ կհաստատե՞ք, թե՞ մերժեք այս խնդրանքը։ Անցեք հավելվածի կառավարման էկրանին և ընտրենք «USB սարքերի ցանկը» կետին: Բացվող պատուհանում կտեսնեք USB UART կարգավորիչի անունով տող (տես նկարը): Այս տողը նշանակում է, որ հավելվածը ճանաչում է USB UART կարգավորիչը և կարելի շարունակել օրինակի իրագործումը: Հաջորդ քայլը նկարում ցույց տրված սխեման հավաքելն է և այն միացնել arduino NANO-ի համապատասխան կետերին: Սխեման հավաքելուց հետո պետք է ներբեռնել միկրոկոնտրոլերի աշխատանքը կարգավորող ծրագիրը (սկետչ): Դա անելու համար մենք կօգտագործենք «Arduino IDE»:

Ստորև կարող եք ծանոթանալ սկետչ-ին: Սկետչ-ը arduino NANO ներբեռնելուց հետո այն միացնել android սարքին։ Arduino NANO-ի սնումը ապահովուն է android սարքից: Այժմ դուք պետք է հաստատեք համակարգի հարցումը, որպեսզի հավելվածը կարողանա աշխատել USB UART-ի հետ: Դրանից հետո հաղորդագրության պատկերակը կփոխվի «v»-ի, իսկ arduino NANO-ին միացված պիեզո բարձրախոսը կտա ձայնային ազդանշան: Ինչպես երևում է սկետչ -ից, հավելվածն աշխատում է միկրոկոնտրոլերի հետ 115200 bit արագությամբ։ Երբ հայտնաբերվում է USB UART կարգավորիչ, հավելվածը հարցում է ուղարկում՝ stmA և ակնկալում է պատասխան՝ rtmA ձևով: Պատասխան ստանալուց հետո հավելվածը համարում է, որ կապը միկրոկառավարիչի հետ հաստատված է և պատրաստ է ուղարկելու նախատեսված հրամանները։ Նախքան առաջադրանքը պլանավորելը, դուք կարող եք ստուգել, թե ինչպես է միկրոկառավարիչը արձագանքում հրամաններին: Կառավարման էկրանին միկրոկառավարիչի հետ կապ հաստատելուց հետո ընտրեք «Հրահանգների փորձարկում» կետը: Բացվող ցանկում ընտրեք անհրաժեշտ հրամանը: Այն անմիջապես կտեղափոխվի միկրոկոնտրոլեր: Օրինակ «Commanda2 = 000011A» նշանակում է, որ 000011A կուղարկվի: Մեր օրինակում սա նշանակում է, որ կմիանա երկու LED և 2 վարկյան հետո (համաձան սկետչ-ի) կանջատվեն:

Ներբեռնեք սկետչ-ը (այստեղ):

const int piezo_pin = 4;
const String inOtklik = "stmA";
const String outOtklik = "rtmA";
String command = "";
boolean statusCommand = false;
String inputString = "";
const String ledcomand[31] {"000001A","000010A","000011A",
            "000100A","000101A","000110A","000111A","001000A",
            "001001A","001010A","001011A","001100A","001101A",
            "001110A","001111A","010000A","010001A","010010A",
            "010011A","010100A","010101A","010110A","010111A",
            "011000A","011001A","011010A","011011A","011100A",
            "011101A","011110A","011111A"};
int ledState1 = LOW;
int ledState2 = LOW;
int ledState3 = LOW;
int ledState4 = LOW;
int ledState5 = LOW;
int led1 = 6;
int led2 = 7;
int led3 = 8;
int led4 = 9;
int led5 = 10;
unsigned long startTime = 0;
unsigned long curTime = 0;
long delta = 2000;
//
void toLedOn (String str){
  if (str.length()>5){
    char *chars = str.c_str();
    if(chars[1]=='1')ledState1 = HIGH;
    if(chars[2]=='1')ledState2 = HIGH;
    if(chars[3]=='1')ledState3 = HIGH;
    if(chars[4]=='1')ledState4 = HIGH;
    if(chars[5]=='1')ledState5 = HIGH;
    //digitalWrite(led0, ledState0);
    digitalWrite(led1, ledState1);
    digitalWrite(led2, ledState2);
    digitalWrite(led3, ledState3);
    digitalWrite(led4, ledState4);
    digitalWrite(led5, ledState5);  
  }
  return;
}
void toLedOff (){
  ledState1 = LOW;
  ledState2 = LOW;
  ledState3 = LOW;
  ledState4 = LOW;
  ledState5 = LOW;
  digitalWrite(led1, ledState1);
  digitalWrite(led2, ledState2);
  digitalWrite(led3, ledState3);
  digitalWrite(led4, ledState4);
  digitalWrite(led5, ledState5);    
  return;
}
boolean onCommand (String str){
  boolean ret=false;
  for(int i=0; i<31; ++i){
    if(ledcomand[i]==str){
      ret=true;
      break;
    }
  }
  return ret;
}
void sound1(int l) {
  tone(piezo_pin,600);
  delay(500);
  if (l==2){  
    tone(piezo_pin,900);
    delay(500);
  }  
  noTone(piezo_pin);
  return ;
}
//
void setup() {  
  Serial.begin(115200);
  inputString.reserve(200);
  pinMode(piezo_pin, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  sound1(1);
   
}

void loop() {
  if(statusCommand){
    statusCommand=false;
    if(command == inOtklik){    
      delay(2200);    
      Serial.print(outOtklik);
      sound1(2);      
    }else{
      if(onCommand(command)){
        toLedOn (command);
        startTime = millis();      
      }
    }
  }
  if(startTime != 0){
    curTime = millis();
    if(curTime > startTime+delta){
      startTime=0;
      toLedOff ();
    }
  }
}
void serialEvent() {
  while (Serial.available()) {    
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == 'A') {
      command = inputString;
      statusCommand = true;
      inputString="";
    }
  }
}