5hScheduler

Հասկանալու համար, թե ինչպես է հավելվածն հաղորդակցվում միկրոկոնտրոլերի հետ, ուսումնասիրենք մի պարզ օրինակի միջոցով: Օրինակի էությունն այն է, որ ցուցադրվի թե ինչպես է հավելվածը ճանաչում միկրոկոնտրոլերին և հավելվածի ուղարկված հրամանները ինչպես կարող են մշակոել միկրոկոնտրոլերի կողմից։ Օրինակի համար կօգտագործենք 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 = “stm”;
const String outOtklik = “rtmA”;
const String outOtklik2 = “rtmB”;
//
String command = “”;
boolean statusCommand = false;
//
String inputString = “”;
boolean strimAudio = false;
//
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(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;
}
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);
Serial.print(outOtklik2);
}

void loop() {
if(statusCommand){
statusCommand=false;
if(command == inOtklik){
delay(2200);
Serial.print(outOtklik);
sound1(2);
}else{
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();
//
if (inChar == ‘A’) {
command = inputString;
statusCommand = true;
inputString=””;
} else {
inputString += inChar;
}
}
}