Mijozdan olingan raqamli ( raqamli ) buyruqlar bilan ishlash funksiyasini yarataylik , bu funksiyaning parametri. Funktsiya ichida biz chiqish raqami va uning holatini saqlash uchun bir nechta mahalliy o'zgaruvchilar yaratamiz:
?
void digitalCommand(YunClient client) {
int pin, value;
|
Keyinchalik, mijozdan so'rovni tahlil qilamiz va client.parseInt() funksiyasidan foydalanib chiqish raqamini topishga harakat qilamiz.
Agar chiqish raqamidan keyin "/" belgisi bo'lsa, u holda URL manzilida undan keyin 1 yoki 0 bo'lishi kerak. Bu qiymat chiqish o'rnatilishi kerak bo'lgan holatni tavsiflaydi - yuqori daraja (HIGH) yoki past (LOW) . Agar URL manzilida "/" chiziq chizig'i bo'lmasa, siz shunchaki ko'rsatilgan chiqish holatini o'qishingiz kerak.
?
pin = client.parseInt();
if (client.read() == '/') {
value = client.parseInt();
digitalWrite(pin, value);
}
else {
value = digitalRead(pin);
}
|
Shundan so'ng, biz mijozga matnli xabarlarni yuboramiz va ma'lumotlar do'konidagi ko'rsatilgan chiqishga mos keladigan kalitning qiymatini mijoz tomonidan o'rnatilgan qiymat bilan yangilaymiz.
Agar yuborilgan qiymat konstruktsiya ichida ko'rsatilgan bo'lsa F(), u holda u flesh xotiradan chiqariladi. Bu sizga SRAM xotirasida bo'sh joyni tejash imkonini beradi, bu ayniqsa URL manzillari uchun odatiy bo'lgan uzun satrlar bilan ishlashda muhim ahamiyatga ega.
Kalitning nomi chiqish raqamini, shuningdek uning turini birlashtiradi. Masalan, D2 kaliti uzatilgan qiymat raqamli ( Raqamli ) pin raqami 2 ga tegishli ekanligini bildiradi.
?
client.print(F("Pin D"));
client.print(pin);
client.print(F(" set to "));
client.println(value);
String key = "D";
key += pin;
Bridge.put(key, String(value));
}
|
Endi xuddi shu tarzda analog buyruqlar bilan ishlash funksiyasini tasvirlab beramiz. Farqi shundaki, Arduino analog kirishlari bilan ishlaganda D belgisi o'rniga kalit nomida A belgisi paydo bo'ladi :
?
void analogCommand(YunClient client) {
int pin, value;
pin = client.parseInt();
if (client.read() == '/') {
value = client.parseInt();
analogWrite(pin, value);
// информируем клиента о том, что произошло
client.print(F("Pin D"));
client.print(pin);
client.print(F(" set to analog "));
client.println(value);
String key = "D";
key += pin;
Bridge.put(key, String(value));
}
else {
value = analogRead(pin);
client.print(F("Pin A"));
client.print(pin);
client.print(F(" reads analog "));
client.println(value);
String key = "A";
key += pin;
Bridge.put(key, String(value));
}
}
|
Pinlarning ishlash rejimini o'zgartirish uchun yana bitta funktsiya yarataylik: biz argument sifatida YunClient ob'ektini olamiz, pin raqamini saqlash uchun mahalliy o'zgaruvchini yaratamiz va oldingi funktsiyalar singari, kiruvchi buyruqdan pin raqamini chiqaramiz:
?
void modeCommand(YunClient client) {
int pin;
pin = client.parseInt();
|
URL to'g'ri yoki yo'qligini tekshiring:
?
if (client.read() != '/') {
client.println(F("error"));
return;
}
|
Agar URL to'g'ri kiritilgan bo'lsa, uni satrga saqlang. Agar rejim ko'rsatilgan bo'lsa kirish yoki chiqish chiziqlari , biz ko'rsatilgan chiqishning ishlash rejimini o'zgartiramiz va bu haqda mijozga xabar beramiz. Aks holda, biz xatoni qaytaramiz.
?
String mode = client.readStringUntil('\r');
if (mode == "input") {
pinMode(pin, INPUT);
// информируем клиента о том, что произошло
client.print(F("Pin D"));
client.print(pin);
client.print(F(" configured as INPUT!"));
return;
}
if (mode == "output") {
pinMode(pin, OUTPUT);
// информируем клиента о том, что произошло
client.print(F("Pin D"));
client.print(pin);
client.print(F(" configured as OUTPUT!"));
return;
}
client.print(F("error: invalid mode "));
client.print(mode);
}
|
Ushbu misolning batafsil tavsifini bu erda topishingiz mumkin .
Do'stlaringiz bilan baham: |