13 KiB
وائیو ٹرمینل پر ٹائمر سیٹ کریں
اس سبق کے اس حصے میں، آپ اپنی سرور لیس کوڈ کو کال کریں گے تاکہ تقریر کو سمجھا جا سکے، اور نتائج کی بنیاد پر اپنے وائیو ٹرمینل پر ایک ٹائمر سیٹ کریں۔
ٹائمر سیٹ کریں
تقریر کو متن میں تبدیل کرنے کے بعد جو متن واپس آتا ہے، اسے آپ کے سرور لیس کوڈ کو بھیجا جانا چاہیے تاکہ LUIS کے ذریعے پروسیس کیا جا سکے، اور ٹائمر کے لیے سیکنڈز کی تعداد واپس حاصل کی جا سکے۔ ان سیکنڈز کی تعداد کو ٹائمر سیٹ کرنے کے لیے استعمال کیا جا سکتا ہے۔
مائیکرو کنٹرولرز میں Arduino میں متعدد تھریڈز کے لیے مقامی طور پر سپورٹ نہیں ہوتی، اس لیے یہاں معیاری ٹائمر کلاسز موجود نہیں ہیں جیسا کہ Python یا دیگر اعلیٰ سطحی زبانوں میں ہوتا ہے۔ اس کے بجائے، آپ ٹائمر لائبریریاں استعمال کر سکتے ہیں جو loop
فنکشن میں گزرے ہوئے وقت کو ماپ کر کام کرتی ہیں اور وقت ختم ہونے پر فنکشنز کو کال کرتی ہیں۔
کام - متن کو سرور لیس فنکشن کو بھیجیں
-
اگر
smart-timer
پروجیکٹ پہلے سے کھلا نہیں ہے تو اسے VS Code میں کھولیں۔ -
config.h
ہیڈر فائل کھولیں اور اپنی فنکشن ایپ کے لیے URL شامل کریں:const char *TEXT_TO_TIMER_FUNCTION_URL = "<URL>";
<URL>
کو اپنی فنکشن ایپ کے URL سے تبدیل کریں جو آپ نے پچھلے سبق کے آخری مرحلے میں حاصل کیا تھا، جو آپ کے مقامی مشین کے IP ایڈریس کی طرف اشارہ کرتا ہے جہاں فنکشن ایپ چل رہی ہے۔ -
src
فولڈر میں ایک نئی فائل بنائیں جس کا نامlanguage_understanding.h
ہو۔ یہ فائل اس کلاس کو ڈیفائن کرنے کے لیے استعمال ہوگی جو پہچانی گئی تقریر کو آپ کی فنکشن ایپ کو بھیجے گی تاکہ LUIS کے ذریعے سیکنڈز میں تبدیل کیا جا سکے۔ -
اس فائل کے اوپر درج ذیل شامل کریں:
#pragma once #include <Arduino.h> #include <ArduinoJson.h> #include <HTTPClient.h> #include <WiFiClient.h> #include "config.h"
یہ کچھ ضروری ہیڈر فائلز شامل کرتا ہے۔
-
ایک کلاس
LanguageUnderstanding
کے نام سے ڈیفائن کریں، اور اس کلاس کا ایک انسٹینس ڈکلیئر کریں:class LanguageUnderstanding { public: private: }; LanguageUnderstanding languageUnderstanding;
-
اپنی فنکشن ایپ کو کال کرنے کے لیے، ایک WiFi کلائنٹ ڈکلیئر کریں۔ کلاس کے
private
سیکشن میں درج ذیل شامل کریں:WiFiClient _client;
-
public
سیکشن میں، ایک میتھڈGetTimerDuration
ڈکلیئر کریں تاکہ فنکشن ایپ کو کال کیا جا سکے:int GetTimerDuration(String text) { }
-
GetTimerDuration
میتھڈ میں، فنکشن ایپ کو بھیجے جانے والے JSON کو بنانے کے لیے درج ذیل کوڈ شامل کریں:DynamicJsonDocument doc(1024); doc["text"] = text; String body; serializeJson(doc, body);
یہ کوڈ
GetTimerDuration
میتھڈ کو پاس کیے گئے متن کو درج ذیل JSON میں تبدیل کرتا ہے:{ "text" : "<text>" }
جہاں
<text>
وہ متن ہے جو فنکشن کو پاس کیا گیا ہے۔ -
اس کے نیچے، فنکشن ایپ کال کرنے کے لیے درج ذیل کوڈ شامل کریں:
HTTPClient httpClient; httpClient.begin(_client, TEXT_TO_TIMER_FUNCTION_URL); int httpResponseCode = httpClient.POST(body);
یہ ایک POST درخواست فنکشن ایپ کو بھیجتا ہے، JSON باڈی پاس کرتا ہے اور رسپانس کوڈ حاصل کرتا ہے۔
-
اس کے نیچے درج ذیل کوڈ شامل کریں:
int seconds = 0; if (httpResponseCode == 200) { String result = httpClient.getString(); Serial.println(result); DynamicJsonDocument doc(1024); deserializeJson(doc, result.c_str()); JsonObject obj = doc.as<JsonObject>(); seconds = obj["seconds"].as<int>(); } else { Serial.print("Failed to understand text - error "); Serial.println(httpResponseCode); }
یہ کوڈ رسپانس کوڈ کو چیک کرتا ہے۔ اگر یہ 200 (کامیابی) ہے، تو ٹائمر کے لیے سیکنڈز کی تعداد رسپانس باڈی سے حاصل کی جاتی ہے۔ ورنہ، ایک ایرر سیریل مانیٹر پر بھیجا جاتا ہے اور سیکنڈز کی تعداد 0 پر سیٹ کی جاتی ہے۔
-
اس میتھڈ کے آخر میں درج ذیل کوڈ شامل کریں تاکہ HTTP کنکشن بند کیا جا سکے اور سیکنڈز کی تعداد واپس کی جا سکے:
httpClient.end(); return seconds;
-
main.cpp
فائل میں، اس نئے ہیڈر کو شامل کریں:#include "speech_to_text.h"
-
processAudio
فنکشن کے آخر میں،GetTimerDuration
میتھڈ کو کال کریں تاکہ ٹائمر کی مدت حاصل کی جا سکے:int total_seconds = languageUnderstanding.GetTimerDuration(text);
یہ
SpeechToText
کلاس کی کال سے حاصل شدہ متن کو ٹائمر کے لیے سیکنڈز کی تعداد میں تبدیل کرتا ہے۔
کام - ٹائمر سیٹ کریں
سیکنڈز کی تعداد کو ٹائمر سیٹ کرنے کے لیے استعمال کیا جا سکتا ہے۔
-
platformio.ini
فائل میں درج ذیل لائبریری ڈپینڈنسی شامل کریں تاکہ ٹائمر سیٹ کرنے کے لیے ایک لائبریری شامل کی جا سکے:contrem/arduino-timer @ 2.3.0
-
main.cpp
فائل میں اس لائبریری کے لیے ایک انکلوڈ ڈائریکٹو شامل کریں:#include <arduino-timer.h>
-
processAudio
فنکشن کے اوپر درج ذیل کوڈ شامل کریں:auto timer = timer_create_default();
یہ کوڈ ایک ٹائمر
timer
ڈکلیئر کرتا ہے۔ -
اس کے نیچے درج ذیل کوڈ شامل کریں:
void say(String text) { Serial.print("Saying "); Serial.println(text); }
یہ
say
فنکشن آخر کار متن کو تقریر میں تبدیل کرے گا، لیکن فی الحال یہ صرف پاس کیے گئے متن کو سیریل مانیٹر پر لکھے گا۔ -
say
فنکشن کے نیچے درج ذیل کوڈ شامل کریں:bool timerExpired(void *announcement) { say((char *)announcement); return false; }
یہ ایک کال بیک فنکشن ہے جو ٹائمر ختم ہونے پر کال کیا جائے گا۔ یہ ایک پیغام پاس کرتا ہے جو ٹائمر ختم ہونے پر کہا جائے گا۔ ٹائمرز کو دہرایا جا سکتا ہے، اور یہ کال بیک کے ریٹرن ویلیو سے کنٹرول کیا جا سکتا ہے - یہ
false
ریٹرن کرتا ہے تاکہ ٹائمر دوبارہ نہ چلے۔ -
processAudio
فنکشن کے آخر میں درج ذیل کوڈ شامل کریں:if (total_seconds == 0) { return; } int minutes = total_seconds / 60; int seconds = total_seconds % 60;
یہ کوڈ کل سیکنڈز کو چیک کرتا ہے، اور اگر یہ 0 ہے، تو فنکشن کال سے واپس آ جاتا ہے تاکہ کوئی ٹائمر سیٹ نہ ہو۔ پھر یہ کل سیکنڈز کو منٹ اور سیکنڈز میں تبدیل کرتا ہے۔
-
اس کوڈ کے نیچے، ٹائمر شروع ہونے پر کہنے کے لیے ایک پیغام بنانے کے لیے درج ذیل شامل کریں:
String begin_message; if (minutes > 0) { begin_message += minutes; begin_message += " minute "; } if (seconds > 0) { begin_message += seconds; begin_message += " second "; } begin_message += "timer started.";
-
اس کے نیچے، ٹائمر ختم ہونے پر کہنے کے لیے ایک پیغام بنانے کے لیے اسی طرح کا کوڈ شامل کریں:
String end_message("Times up on your "); if (minutes > 0) { end_message += minutes; end_message += " minute "; } if (seconds > 0) { end_message += seconds; end_message += " second "; } end_message += "timer.";
-
اس کے بعد، ٹائمر شروع ہونے کا پیغام کہیں:
say(begin_message);
-
اس فنکشن کے آخر میں، ٹائمر شروع کریں:
timer.in(total_seconds * 1000, timerExpired, (void *)(end_message.c_str()));
یہ ٹائمر کو ٹرگر کرتا ہے۔ ٹائمر ملی سیکنڈز میں سیٹ کیا جاتا ہے، اس لیے کل سیکنڈز کو 1,000 سے ضرب دے کر ملی سیکنڈز میں تبدیل کیا جاتا ہے۔
timerExpired
فنکشن کو کال بیک کے طور پر پاس کیا جاتا ہے، اورend_message
کو کال بیک کو پاس کرنے کے لیے ایک آرگومنٹ کے طور پر پاس کیا جاتا ہے۔ یہ کال بیک صرفvoid *
آرگومنٹس لیتا ہے، اس لیے اسٹرنگ کو مناسب طریقے سے تبدیل کیا جاتا ہے۔ -
آخر میں، ٹائمر کو ٹِک کرنے کی ضرورت ہے، اور یہ
loop
فنکشن میں کیا جاتا ہے۔loop
فنکشن کے آخر میں درج ذیل کوڈ شامل کریں:timer.tick();
-
اس کوڈ کو بنائیں، اسے اپنے وائیو ٹرمینل پر اپ لوڈ کریں اور سیریل مانیٹر کے ذریعے اسے ٹیسٹ کریں۔ جب آپ سیریل مانیٹر میں
Ready
دیکھیں، تو C بٹن دبائیں (جو بائیں جانب ہے، پاور سوئچ کے قریب)، اور بولیں۔ 4 سیکنڈز کی آڈیو کیپچر کی جائے گی، متن میں تبدیل کی جائے گی، پھر آپ کی فنکشن ایپ کو بھیجی جائے گی، اور ایک ٹائمر سیٹ کیا جائے گا۔ یقینی بنائیں کہ آپ کی فنکشن ایپ مقامی طور پر چل رہی ہے۔آپ دیکھیں گے کہ ٹائمر کب شروع ہوتا ہے، اور کب ختم ہوتا ہے۔
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem1101 9600,8,N,1 --- --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- Connecting to WiFi.. Connected! Got access token. Ready. Starting recording... Finished recording Sending speech... Speech sent! {"RecognitionStatus":"Success","DisplayText":"Set a 2 minute and 27 second timer.","Offset":4700000,"Duration":35300000} Set a 2 minute and 27 second timer. {"seconds": 147} 2 minute 27 second timer started. Times up on your 2 minute 27 second timer.
💁 آپ اس کوڈ کو code-timer/wio-terminal فولڈر میں تلاش کر سکتے ہیں۔
😀 آپ کا ٹائمر پروگرام کامیاب رہا!
ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔