به نام خدا : تو این مطلب از آموزش آردوینو میخوام به آموزش رشته در آردوینو بپردازم، و انواع توابعش رو توضیح بدم و برای هر کدوم مثالی بزنم، این مطلب رو برای این میگم که تو مطالب بعدی بهش نیاز دارم وگرنه نمیخواستم بگم(تو فکرش نبودم که بزارم تو سایت این مطلب رو )
آموزش جامع آردوینو جلسه 19 string در arduino
کلاس STRING در آردوینو شامل توابع زیر هستش :
String()
charAt()
compareTo()
concat()
c_str()
endsWith()
equals()
equalsIgnoreCase()
getBytes()
indexOf()
lastIndexOf()
length()
remove()
replace()
reserve()
setCharAt()
startsWith()
substring()
toCharArray()
toInt()
toFloat()
toLowerCase()
toUpperCase()
trim()
که در ادامه تک تک توابع رو توضیح میدم و مثال هایی میزن برای هر کدوم.
آموزش کار با توابع string ( رشته ) در آردوینو
1 2 3 4 5 6 7 8 9 10 11 |
String str1 = "DMF313.IR"; void setup() { String str2 = "ALI"; // ... } void loop() { String str3 = "REZA"; // ... } |
نکته ای که خواستم بگم اینه، سه تا رشته تعریف کردم در سه جای مختلف پروژه،
رشته str3 فقط در تابع loop قابل دسترسی هستش و در بقیه جاهای برنامه نه، رشته str2 هم فقط در تابع setup قابل دسترسی و استفاده هستش ولی رشته str1 در کل پروژه(همه جای پروژه) قابل دسترسی هستش و به این متغییر ها اگه اشتباه نکنم میگن متغییرهای سراسری.(اینم یه نکته برنامه نویسی C بود و جاش اینجا نبود که بگم ولی گفتیم دیگه
1 2 |
string.startsWith(string2) string.endsWith(string2) |
1 : در اول رشته string، رشته string2 وجود دارد.
0 : وجود ندارد.
مثال زیر رو برای این تابع ببینید :
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); String str1 = "DMF313.IR - Mahdi Damarchilu"; if( str1.startsWith("DMF313") ) Serial.print("true"); else Serial.print("false"); } void loop() {} |
1 : در پایان رشته string، رشته string2 وجود دارد.
0 : وجود ندارد.
خب در مثال زیر من یه رشته تعریف کردم و بعد در خط 7 میام بررسی میکنم که آیا در پایان رشته str1 آیا عبارت chilu وجود داره یا نه اگه وجود داشته باشه که عبارت Yes داخل پنجره سریال نمایش داده میشه و در غیر این صورت عبارت No نمایش داده میشه.(با این پروژه چند تا عبارت دیگه تست کنید حتما!)
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); String str1 = "DMF313.IR - Mahdi Damarchilu"; if( str1.endsWith("chilu") ) Serial.print("Yes"); else Serial.print("No"); } void loop() {} |
1 |
string.equals(string2) |
1 : دو رشته با هم برابر هستند.
0 : با هم برابر نیستند.
توجه : البته به جای استفاده از این تابع میتونیم از روش قدیمی بررسی برابر بودن دو چیز استفاده کنیم یعنی همون عملگر ==، مثال زیر رو ببینید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void setup() { Serial.begin(9600); String str1 = "Mahdi"; if( str1.equals("Mahdi")) Serial.println("true1"); else Serial.println("false1"); if( str1 == "Mahdi") Serial.println("true2"); else Serial.println("false2"); } void loop() {} |
1 2 |
string.toUpperCase() string.toLowerCase() |
toUpperCase : بزرگ کردن تمام حروف انگلیسی رشته string
toLowerCase : کوچک کردن تمام حروف انگلیسی رشته string
مثال زیر و جوابش رو ببینید متجوه موضوع این دو تا بع میشید(اگه دقیقا متوجه نشدید)
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); String str1 = "MAHDI damarchilu"; str1.toUpperCase(); Serial.print("toUpperCase = ");Serial.println(str1); str1.toLowerCase(); Serial.print("toLowerCase = ");Serial.println(str1); } void loop() {} |
جواب مثال بالا به صورت زیر هستش :
toUpperCase = MAHDI DAMARCHILU
toLowerCase = mahdi damarchilu
خواستین به مثال سایت آردوینو هم مراجعه کنید : StringCaseChanges
1 |
string.length() |
length : این تابع طول رشته string رو به ما میده(تعداد کاراکترهای موجود در رشته string رو به ما میده.)
مثال این تابع :
1 2 3 4 5 6 7 8 9 |
void setup() { Serial.begin(9600); String str1 = "DMF313.IR"; int i; i = str1.length(); Serial.print("str1 length = "); Serial.println(i); } void loop() {} |
1 2 |
string.remove(index) string.remove(index, count) |
remove : برای حذف یه سری کاراکتر از یه رشته(به نحوی که در ادامه میگم) از این تابع استفاده میکنیم.
این تابع remove به دو صورت میشه نوشتش و ازش استفاده کرد که در بالا مشاهده میکنید، در زیر به ترتیب توضیحشون میدم :
توجه : در رشته ها، در آرایه ها، و... کلا در برنامه نویسی شمارش از 0 شروع میشه و نه 1(حواستون باشه :-D)
تابع اولی : از خونه شماره index ام تا آخر رشته رو حذف میکنه.(یعنی رشته جدید برابر میشه با خونه 0 رشته تا خونه index ام رشته و بقیه کاراکترها حذف میشه.)
index : شماره کاراکتری که حذف کردن و بریدن رشته از اونجا شروع میشه.
مثال زیر رو ببینید تا بهتر متوجه بشید :
1 2 3 4 5 6 7 8 |
void setup() { Serial.begin(9600); String str1 = "Mahdi-Damarchilu"; str1.remove(5); Serial.print("new str1 = "); Serial.println(str1); } void loop() {} |
جواب مثال بالا به صورت زیر هستش :
new str1 = Mahdi
تابع دومی : تو این تابع به کمک پارامتر index شماره خونه ای که حذف کاراکترها از اونجا شروع میشه رو تعیین میکنیم و به کمک پارامتر count تعداد کاراکترهایی که باید حذف بشه رو تعیین میکنیم.
index : شماره کاراکتری که حذف کردن و بریدن رشته از اونجا شروع میشه.
count : تعداد کاراکترهایی که از خونه index ام رشته مون باید حذف بشه.
مثال زیر رو ببینید و با مثال بالا مقایسه اش کنید تا کامل متوجه موضوع بشید :
1 2 3 4 5 6 7 8 |
void setup() { Serial.begin(9600); String str1 = "Mahdi-Damarchilu"; str1.remove(5, 1); Serial.print("new str1 = "); Serial.println(str1); } void loop() {} |
جواب مثال بالا به صورت زیر هستش :
new str1 = MahdiDamarchilu
اینم یه مثال از سایت آردوینو که ببینیدش حتما(البته بررسیش هم بکنید و فقط به دیدن اکتفا نکنید ):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
String exString = "Hello World!"; void setup() { Serial.begin(9600); Serial.println("The full string:"); Serial.println(exString); exString.remove(7); Serial.println("String after removing from the seventh index through the end"); Serial.println(exString); exString = "Hello World!"; exString.remove(2, 6); Serial.println("String after removing six characters starting at the third position"); Serial.println(exString); } void loop(){} |
جواب پروژه بالا به صورت زیر هستش :
The full string:
Hello World!
String after removing from the seventh index through the end
Hello W
String after removing six characters starting at the third position
Herld!
1 |
string.replace(substring1, substring2) |
مثال زیر و جوابش رو ببینید :
1 2 3 4 5 6 7 8 |
void setup() { Serial.begin(9600); String str1 = "Mahdi-Damarchilu"; str1.replace("Mahdi-", "Ali+"); Serial.print("new str1 = "); Serial.println(str1); } void loop() {} |
new str1 = Ali+Damarchilu
به مثال زیر از سایت آردوینو هم نگاهی بکنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void setup() { Serial.begin(9600); String stringOne = "<html><head><body>"; Serial.println(stringOne); String stringTwo = stringOne; stringTwo.replace("<", "</"); Serial.println("Original string: " + stringOne); Serial.println("Modified string: " + stringTwo); //////////////////////////////////////////////// Serial.println(); //////////////////////////////////////////////// String normalString = "bookkeeper"; Serial.println("normal: " + normalString); String leetString = normalString; leetString.replace('o', '0'); leetString.replace('e', '3'); Serial.println("l33tspeak: " + leetString); } void loop(){} |
جواب پروژه بالا به صورت زیر هستش :
<html><head><body>
Original string: <html><head><body>
Modified string: </html></head></body>
normal: bookkeeper
l33tspeak: b00kk33p3r
1 |
string.charAt(n) |
n : شماره کاراکتری که میخوایم مقدارش رو بخونید.
مقدار برگشتی این تابع به صورت char هستش(یدونه تک کاراکتر)
توجه : البته همون طور که میدونید میشه مثل آرایه ها، به رشته هم دسترسی داشته باشیم و کاراکتر موجود در خونه های مختلف رو بخونیم، و از تابع فوق هم استفاده نکنیم، تو مثال زیر از هر دو روش استفاده کردم :
1 2 3 4 5 6 7 8 9 10 11 |
void setup() { Serial.begin(9600); String str1 = "DMF313.IR"; char chr1, chr2; chr1 = str1.charAt(2); chr2 = str1[2]; Serial.println(chr1); Serial.println(chr2); } void loop() {} |
1 |
string.setCharAt(index, c) |
توجه : به کمک تابع setChar ما مقدار کاراکتر i ام رشته ای رو میخوندیم و به کمک این تابع مقدار کاراکتر i ام رشته ای رو تغییر میدیم.
مثال زیر و جوابش رو ببینید که بعد این مثال روش عادی و خودمون رو هم میگم و مثالش ور هم میگم :
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); String str1 = "Mahdi Damarchilu"; str1.setCharAt(0, '0'); str1.setCharAt(5, '-'); str1.setCharAt(6, '1'); Serial.println(str1); } void loop() {} |
0ahdi-1amarchilu
خب تو رشته ها برا خوندن و یا نوشتن یه کاراکتر از رشته مون میتونیم همانند آرایه ها با رشتمون رفتار کنیم، برای تغییر یه کاراکتر از رشتمون میتونیم علاوه بر استفاده از تابع بالا از روش زیر هم استفاده کنیم(توصیه من استفاده از روش زیر هستش!) :
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); String str1 = "Mahdi Damarchilu"; str1[0] = '0'; str1[5] = '-'; str1[6] = '1'; Serial.println(str1); } void loop() {} |
جواب این پروژه هم دقیقا مثل پروژه قبلی هستش.
اینم یه پروژه از سایت آردوینو که دیدنش ظرر نداره :
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { Serial.begin(9600); String reportString = "SensorReading: 456"; Serial.println(reportString); char mostSignificantDigit = reportString.charAt(15); String message = "Most significant digit of the sensor reading is: "; Serial.println(message + mostSignificantDigit); reportString.setCharAt(13, '='); Serial.println(reportString); } void loop(){} |
جواب پروژه بالا به صورت زیر هستش :
SensorReading: 456
Most significant digit of the sensor reading is: 4
SensorReading= 456
1 |
string.equalsIgnoreCase(string2) |
1 : برابر بودن دو رشته
0 : عدم برابری
مثال زیر و جوابش رو ببینید و با توضیحات من مقایسه کنید تا این تابع رو هم کامل متوجه بشید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void setup() { Serial.begin(9600); String str1 = "DMF313.IR"; String str2 = "dmf313.IR"; String str3 = "DMF313.ir"; String str4 = "dmf313.ir"; bool i1 = str1.equalsIgnoreCase(str2); bool i2 = str1.equalsIgnoreCase(str3); bool i3 = str1.equalsIgnoreCase(str4); Serial.println(i1); Serial.println(i2); Serial.println(i3); } void loop() {} |
جواب مثال بالا برا هر سه خط 14-15-16 برابر 1 هستش(یعنی رشته های فوق بدون توجه به کوچیک و بزگ بودن حروف با هم برابر اند) :
1
1
1
1 2 |
string.indexOf(val) string.indexOf(val, from) |
همون طور که میبینید تابع بالا به دو صورت وجود داره، که تابع اولی از خونه 0 ام رشته string دنبال رشته val میگرده و تابع دومی از موقعیتی که توسط پارامتر from تعیین میکنیم دنبال val میگرده.
توجه : اگه رشته val داخل رشته string وجود داشته باشه، این تابع موقعیت val در String رو برمیگردونه و در غیر این صورت عدد 1- رو برمیگردونه.
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); String str1 = "DMF313.IR Mahdi Damarchilu"; int i1 = str1.indexOf("Mahdi"); int i2 = str1.indexOf("Ali"); Serial.println(i1); Serial.println(i2); } void loop() {} |
10
-1
1 2 |
string.lastIndexOf(val) string.lastIndexOf(val, from) |
lastIndexOf : این تابع همانند تابع indexOf هستش با این تفاوت که تابع indexOf از اول رشته string به دنبال رشته(یا کاراکتر) ما میگرده ولی تابع lastIndexOf از آخر رشته string شروع به جستوجو(جست و جو، جسوجو، جس و جو و... ) میکنه.(لذا به علت تنبلی بیش از حد پروژه ای به صورت جدا برای این تابع قرار نمیدم و مطمئن هستم که شما هم نمیرید پروژه ای برای این تابع برای خودتون مثال بزنید
لذا به من نگید تنبل چون خودتون تنبلید
خب بگذریم از این حرفا در ادامه یه پروژه توپول برا هر دوی این توابع قرار میدم.)
پروژه زیر از سایت آردوینو(با کمکی! تغییر) رو هم ببینید بد نیستش :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
void setup() { Serial.begin(9600); String stringOne = "<HTML><BODY><BODY>"; int firstClosingBracket = stringOne.indexOf('>'); Serial.println("The index of the First > in the string " + stringOne + " is " + firstClosingBracket); int secondOpeningBracket = firstClosingBracket + 1; int secondClosingBracket = stringOne.indexOf('>', secondOpeningBracket); Serial.println("The index of the Second > in the string " + stringOne + " is " + secondClosingBracket); int thirdOpeningBracket = secondClosingBracket + 1; int thirdClosingBracket = stringOne.indexOf('>', thirdOpeningBracket); Serial.println("The index of the Third > in the string " + stringOne + " is " + thirdClosingBracket); ////////////////////////////////////////////////////////////////// Serial.print("\n\n"); ////////////////////////////////////////////////////////////////// int bodyTag = stringOne.indexOf("<BODY>"); Serial.println("The index of the <BODY> in the string " + stringOne + " is " + bodyTag); ////////////////////////////////////////////////////////////////// Serial.print("\n\n"); ////////////////////////////////////////////////////////////////// int lastOpeningBracket = stringOne.lastIndexOf('<'); Serial.println("The index of the last < in the string " + stringOne + " is " + lastOpeningBracket); int lastListItem = stringOne.lastIndexOf("<BODY>"); Serial.println("The index of the last <BODY> in the string " + stringOne + " is " + lastListItem); } void loop(){} |
1 |
string.concat(parameter) |
concat : این تابع برای الحاق کردن یه مقدار(حالا میتونه رشته باشه یا هر نوع متغییر دیگه ای باشه >>> String, char, byte, int, unsigned int, long, unsigned long, float, double) به آخر رشته string از این تابع میتونیم استفاده کنیم.
توجه : اگه این تابع عملیات الحاق رو با موفقیت انجام بده عدد 1 و در غیر این صورت عدد 0 رو برمیگردونه.
در زیر دو مثال میزارم براتون، که تو اولی از تابع بالا استفاده کردم و تو پروژه دومی از روش عادی اضافه کردن یه چیز به رشته ها به کمک + استفاده کردم(چیه جان داش برا هر کاری باید از تابع استفاده کنیم، من خودم به شخصه زیاد خوشم نمیاد توابع رو برای هر چیز حتی الکی ترین چیزها اومدن نوشتن )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void setup() { Serial.begin(9600); String str1 = "DMF"; String str2 = "313.IR-"; int i1 = 13; char ch1 = '-'; float f1 = 3.14; str1.concat(str2); str1.concat(i1); str1.concat(ch1); str1.concat(f1); Serial.println(str1); } void loop() {} |
جواب پروژه بالا به صورت زیر هستش :
DMF313.IR-13-3.14
تو پروژه زیر هم از روش قدیمی و راحت تری استفاده کردم به کمک عملگر +(فک کنم بهش میگن عملگر)، جواب این پروژه هم مثل پروژه بالا هستش.
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { Serial.begin(9600); String str1 = "DMF"; String str2 = "313.IR-"; int i1 = 13; char ch1 = '-'; float f1 = 3.14; str1 = str1 + str2 + i1 + ch1 + f1; Serial.println(str1); } void loop() {} |
مثال زیر از سایت آردوینو(با کمکی تغییر :-D) رو ببینید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
String stringOne = "Sensor "; void setup() { Serial.begin(9600); Serial.println(stringOne); stringOne += "value"; Serial.println(stringOne); stringOne += " for input "; Serial.println(stringOne); stringOne += 'Q'; Serial.println(stringOne); stringOne += 13; Serial.println(stringOne); stringOne += " = "; Serial.println(stringOne); stringOne += 1234567890; Serial.println(stringOne); } void loop() {} |
جواب پروژه بالا به صورت زیر هستش :
Sensor
Sensor value
Sensor value for input
Sensor value for input Q
Sensor value for input Q13
Sensor value for input Q13 =
Sensor value for input Q13 = 1234567890
1 2 |
string.substring(from) string.substring(from, to) |
همون طور که میبینید این تابع به 2صورت نوشته میشه.
تابع اولی : از کاراکتر from تا آخر رشته string رو جدا میکنه و رشته جدا شده رو برمیگردونه.
تابع دومی : از کاراکتر from تا کاراکتر to-1 از رشته string رو جدا میکنه و رشته جدا شده رو برمیگردونه.
جواب : خب حقیقتش این که ما توقع داریم که تابع دومی ار کاراکتر شماره from ام تا کاراکتر شماره to ام رو جدا کنه و به صورت یه رشته جدا برگردونه ولی این تابع تا کارکاتر to-1 رو جدا میکنه و خود کاراکتر شماره to ام رو جدا نمیکنه.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void setup() { Serial.begin(9600); String str1 = "Mahdi Damarchilu Dmf313.ir"; String str2, str3, str4; str2 = str1.substring(0,4+1); str3 = str1.substring(6,15+1); str4 = str1.substring(17); Serial.println(str2); Serial.println(str3); Serial.println(str4); } void loop() {} |
Mahdi
Damarchilu
Dmf313.ir
در زیر هم مثالی که تو سایت آردوینو بود رو براتون قرار میدم :
1 2 3 4 5 6 7 8 9 10 11 |
void setup() { Serial.begin(9600); String stringOne = "Content-Type: text/html"; Serial.println(stringOne); if (stringOne.substring(19) == "html") Serial.println("It's an html file"); if (stringOne.substring(14, 18) == "text") Serial.println("It's a text-based file"); } void loop(){} |
جواب این پروژه به صورت زیر هستش :
Content-Type: text/html
It's an html file
It's a text-based file
1 |
string.toFloat() |
توجه : رشته string باید با یه عدد شروع بشه و اگه در ابتدای رشته عدد وجود نداشته باشه، عمل تبدیل رشته به float انجام نمیشه و این تابع عدد 0 برمیگردونه، ولی اگه داخل رشته بعد از عدد هر کاراکتری میخواد باشه باشه مشکلی به وجود نمیاد.
مثال زیر و جوابش رو ببینید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void setup() { Serial.begin(9600); String str1 = "a3.142"; String str2 = "3.142a"; String str3 = "3.1a42"; String str4 = "3.142"; float f1 = str1.toFloat(); float f2 = str2.toFloat(); float f3 = str3.toFloat(); float f4 = str4.toFloat(); Serial.println(f1, 3); Serial.println(f2, 3); Serial.println(f3, 3); Serial.println(f4, 3); } void loop(){} |
0.000
3.142
3.100
3.142
1 |
string.toInt() |
toInt : تبدیل رشته به یه عدد صحیح از نوع int
توجه : رشته string باید با یه عدد شروع بشه و اگه در ابتدای رشته عدد وجود نداشته باشه، عمل تبدیل رشته به int انجام نمیشه و این تابع عدد 0 برمیگردونه، ولی اگه داخل رشته بعد از عدد هر کاراکتری میخواد باشه باشه مشکلی به وجود نمیاد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void setup() { Serial.begin(9600); String str1 = "3.4"; String str2 = "34"; String str3 = "a34"; String str4 = "34a"; int i1 = str1.toInt(); int i2 = str2.toInt(); int i3 = str3.toInt(); int i4 = str4.toInt(); Serial.println(i1); Serial.println(i2); Serial.println(i3); Serial.println(i4); } void loop(){} |
جواب پروژه بالا به صورت زیر هستش :
3
34
34
1 |
string.toCharArray(buf, len) |
buf : نام آرایه ای که قراره کاراکترهای رشته string داخلش قرار بگیره.
len : اندازه آرایه.
اینم پروژه این تابع :
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); String str1 = "Mahdi Damarchilu"; char buffer1[20]; str1.toCharArray(buffer1, 20); Serial.println(str1); Serial.println(buffer1); } void loop(){} |
Mahdi Damarchilu
Mahdi Damarchilu
1 |
string.c_str() |
c_str : برای این تابع توضیح خاصی نمیدم، کسایی که تازه کار هستن بیخیال این تابع بشن ولی کسایی که زبون c شون قوی هستش با دیدن مثال زیر متوجه موضوع میشن.
توجه : لینک این تتابع در سایت آردوینو c_str
1 2 3 4 5 6 7 8 9 |
void setup() { Serial.begin(9600); String str1 = "Mahdi Damarchilu"; const char* xConstString = str1.c_str(); Serial.println(str1); Serial.println(xConstString); } void loop(){} |
جواب پروژه بالا به صورت زیر هستش :
Mahdi Damarchilu
Mahdi Damarchilu
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void setup() { Serial.begin(9600); String stringOne = " D M F "; Serial.print(stringOne); Serial.print("<--- end of string. Length: "); Serial.println(stringOne.length()); stringOne.trim(); Serial.print(stringOne); Serial.print("<--- end of trimmed string. Length: "); Serial.println(stringOne.length()); } void loop(){} |
1 |
string.compareTo(string2) |
StringCompareTo
StringComparisonOperators
توجه : ولی چیزی که من فهمیدم(که به احتمال 99% درسته) این تابع بر اساس خونه حروف در زبان انگلیسی عمل میکنه این مقایسه رو(عجب جمله ای شد)، یعنی دو رشته رو کاراکتر به کاراکتر با هم بررسی میکنی :
1) اگه تمام کاراکتر ها با هم برابر بودن، این تابع عدد 0 رو برمیگردونه.
2و3) اگه تا یه جایی کاراکترهای هر دو رشته با هم برابر بودن و در کاراکتر xام کاراکترها با هم برابر نبودن این تابع میاد اونا رو بر اساس جدول کد اسکی با هم مقایسه میکنه، مثلا اگه در رشته string2 این کاراکتر A باشه و در رشته string این کاراکتر B باشه، تابع بالا یه عددی - برمیگردونه و اگه این حالا فرض ما برعکس بود تابع عددی + برمیگردونه
پروژه زیر رو ببینید متوجه موضوع میشید دقیقا، تو پروژه زیر هم استفاده از روش عادی مقایسه دو چیز( > و < و => و =<) رو قرار دادیم و هم روش مقایسه به کمک تابع بووووووووق بالا :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
String stringOne, stringTwo; void setup() { Serial.begin(9600); stringOne = "this"; stringTwo = "that"; if (stringOne == "this") Serial.println("StringOne == \"this\""); if (stringOne != stringTwo) Serial.println(stringOne + " != " + stringTwo); stringOne = "This"; stringTwo = "this"; if (stringOne != stringTwo) Serial.println(stringOne + " != " + stringTwo); if (!stringOne.equals(stringTwo)) Serial.println(stringOne + " does not equal " + stringTwo); if (stringOne.equalsIgnoreCase(stringTwo)) Serial.println(stringOne + " equals (ignoring case) " + stringTwo); stringOne = "1"; if (stringOne.toInt() == 1) Serial.println(stringOne + " = 1"); stringOne = "1"; stringTwo = "2"; if (stringTwo >= stringOne) Serial.println(stringTwo + " >= " + stringOne); ////////////////////////////////////////////////////////////////////////////// Serial.print("\n\n"); ////////////////////////////////////////////////////////////////////////////// stringOne = "ABCDEF"; stringTwo = "ABCDEF"; if (stringOne.compareTo(stringTwo) == 0) Serial.println(stringOne + " equal " + stringTwo); else if (stringOne.compareTo(stringTwo) < 0) Serial.println(stringOne + " comes before " + stringTwo); else Serial.println(stringOne + " comes after " + stringTwo); stringOne = "ABCDEG"; stringTwo = "ABCDEF"; if (stringOne.compareTo(stringTwo) == 0) Serial.println(stringOne + " equal " + stringTwo); else if (stringOne.compareTo(stringTwo) < 0) Serial.println(stringOne + " comes before " + stringTwo); else Serial.println(stringOne + " comes after " + stringTwo); stringOne = "ABCDEF"; stringTwo = "ABCDEG"; if (stringOne.compareTo(stringTwo) == 0) Serial.println(stringOne + " equal " + stringTwo); else if (stringOne.compareTo(stringTwo) < 0) Serial.println(stringOne + " comes before " + stringTwo); else Serial.println(stringOne + " comes after " + stringTwo); ////////////////////////////////////////////////////////////////////////////// Serial.print("\n\n"); ////////////////////////////////////////////////////////////////////////////// stringOne = "ABCDEF"; stringTwo = "ABCDEF"; if (stringOne == stringTwo) Serial.println(stringOne + " equal " + stringTwo); else if (stringOne < stringTwo) Serial.println(stringOne + " comes before " + stringTwo); else Serial.println(stringOne + " comes after " + stringTwo); stringOne = "ABCDEG"; stringTwo = "ABCDEF"; if (stringOne == stringTwo) Serial.println(stringOne + " equal " + stringTwo); else if (stringOne < stringTwo) Serial.println(stringOne + " comes before " + stringTwo); else Serial.println(stringOne + " comes after " + stringTwo); stringOne = "ABCDEF"; stringTwo = "ABCDEG"; if (stringOne == stringTwo) Serial.println(stringOne + " equal " + stringTwo); else if (stringOne < stringTwo) Serial.println(stringOne + " comes before " + stringTwo); else Serial.println(stringOne + " comes after " + stringTwo); } void loop() {} |
1 |
string.reserve(size) |
reserve : این تابع تابع جالبی هستش، مثلا شما میدونید که این رشته مد نظرتون حداکثر 20 کاراکتر قراره داخلش قرار بگیره، به کمک این تابع میاید و 20 خونه از حافظه رو به اون رشتتون اختصاص میدید تا در بعضی شرایط خاص دیگه مشکلی رخ نده.
1 2 3 4 5 6 7 8 9 10 11 |
String myString; void setup() { Serial.begin(9600); myString.reserve(26); myString = "i="; myString += "1234"; myString += ", is that ok?"; Serial.println(myString); } void loop() {} |
1 |
String() |
برای این حالت هم مثال زیر رو ببینید متوجه میشید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void setup() { Serial.begin(9600); String str1; str1 = "Hello String"; Serial.println(str1); str1 = String('a'); Serial.println(str1); String stringTwo = String("This is a string"); str1 = String(stringTwo + " with more"); Serial.println(str1); str1 = String(13); Serial.println(str1); str1 = String(45, HEX); Serial.println(str1); str1 = String(255, BIN); Serial.println(str1); str1 = String(5.698, 3); Serial.println(str1); Serial.println("PI = " + (String)3.14); } void loop() {} |
خب این مطلب هم تموم شد رفت چی کارش، خسته شدم جان داش، این مطلب رو در طول 2-3 روز فک کنم نوشتم من، حدود 3هزار و 500 واژه شده تا الان این مطلب، دوستان اگه جایی کم توضیح دادم، بد توضیح دادم بگید تا در صورت امکان درستش کنم و اگه خواستین از توابع آماده بالا استفاده نکنید و خودتون این توابع رو بنویسید بگید تا تابع رو براتون قرار بدم تا این طوری برنامه نیوسیتون هم خوب بشه – من دیگه چون حال ندارم این کار رو نمیکنم ولی اگه کسی خواست بگه تا این کار رو انجام بدم.
هزینه مطلب : صلوات برا شادی روح شهدا و امام شهدا و یه فاتحه برا افرادی که تازه از دنیا رفتن.
در ضمن اگه مطلب آموزش آردوینو چیزی مد نظرتون بود بگید – چون من چیزی به خاطرم نمیرسه.
بیش از این مزاحم نمیشم فعلا یا علی.
مهمان
با سلام و تشکر از شما برای این سایت عالی…
من یک حلقه نوشتم که یک led رو روشن و خاموش کنه بدون ایجاد تاخیر، ولی اینقدر تعداد دفعات تکرار حلقه رو زیاد کردم تا روشن و خاموش شدن led را ببینم اما قابل مشاهده نبود…
خوب عملیات جمع متغیر num رو با عدد یک این برنامه 2 میلیارد بار انجام میده بعد وضعیت چراغ رو تغییر میده و این زمان بر هست ، چطور ممکنه 2 میلیارد محاسبه رو اینقدر سریع انجام بده که من متوجه تغییر وضعیت led نشم؟ سخت افزار من esp8266 هست. ممنون
نویسنده این مطلب
سلام-فرکانس میکرو رو 16M فرض کنید، مقدار متغیر زیاد میشه، شرط بررسی میشه، هر کدوم رو فرض میکنیم 1 کلاک مصرف میکنن، 8M کار در هر ثانیه فلذا برای رسیدن به 2000000000، نیاز به 2000000000/8M = 250 ثانیه؛ محاسباتش یه چیز تو این مایه ها میشه، دقیقشو باید جستجو کنی؛ ِیه کدی تو این مایه ها، ولی فک کنم 16 میگ بشه 2-3 ثانیه، دقیقا نمیدونم
راستی یه موردی، تو این لینک از سایت آردوینو ( int ) میگه که متغیر int ها 16 بیتی هستند؛ که یه متغیر 16 بیتی بین -32,768 تا 32,767 هستش؛ مخصوص برد Arduino Un و هر بردی بر مبنای atmegaY؛ که در برد Arduino Due و بردهای smd نظیر MKR1000 و Zero برابر با 32 بیتی هستند که محدوده اش میشه : -2,147,483,648 تا 2,147,483,647؛ با فرض این که شما از uno استفاده میکنید، عملا هربار سرریز رخ میده و شمارنده ریست میشه و هیچ وقت به 2 میلیارد نمیرسه شمارنده ( کد شما )
مهمان
سلام وقت بخیر بنده یک داده استرینگ با سریال برای آردوینو می فرستم و یک مقایسه می کنم اگر شرط برقرار بود یک کاری انجام دهد و متاسفانه اصلا داخل شرط نمی شد مقدار داده هم پرینت می زنم با ارسالی یکی هست
مهمان
سلام خسته نباشید ببخشید چطور میشه یه string رو کامل خالی کرد ؟؟؟ ممنون
مهمان
دمت گرم ، یجایی گیر کرده بودم توضیحاتت کارمو راه انداخت
مهمان
ممنون از آموزش خوب تان آرزوی موفقیت برایتان دارم
مهمان
منم یه خرگوش توی حیاط خونه ام نگه میداشتم
دستشون درد نکنه نامردی نکردن پوست خرگوشمو برام فرستادن 

زمستون ها گم میشد بهار و تابستون پیداش میشد
عاغا یکی از فامیل های زن عموم مریض شد باید گوشت خرگوش میخورد
بدون اجازه از من ، خرگوش رو گردن زدن
درمورد مطالبتون واقعا خوشم اومد عشقی
مهمان
سلام
ممنون بابت مطلبت ولی
شمارش از 0 شروع میشه و نه 1 ………
با برنامه ای که نوشتی به عنوان مثال هم خوانی نداره
اگر اینجوری باشه که شما میگی که باید -Mahdi باقی بمونه نه Mahdi
یکبار دیگه چک کن لطفا
مهمان
سلام به اقای ادمین


یک سول داشتم که چیجوری صفحه ی کدتون رو میارید تو متن
با تشکر
مهمان
سلام و وقت بخیر ، من یه مشکلی دارم ممنون میشم دوستان و عزیزان راهنمایی کنند
من یک رشته رو بصورت زیر از سریال دریافت میکنم
برای مثال
“A1P1=3.5”
یا
“A2P3=59”
حالا میخام توی هر رشته ای کع دریافت میکنم ، این قسمت عدد “3.5” و “A1P1” رو جدا کنم و بدونم که عدد 3.5 برای A1P1 هست یا عدد 59 برای A2P3 هست
نویسنده این مطلب
سلام
1) اگه طراحی فرستنده گیرنده با خودته به این صورت عمل کن، روال درستش هم فک کنم همینه، حداقل برا من تا حالا جواب داده و تو خیلی جاها دیدم که از همین روش استفاده میکنن ( توضیح زیر برا وقتی هستش که چندین داده رو بخوای ارسال و دریافت کنی )
1.1) یه فرمت از پیش تعریف شده، تعریف کن، مثلا داده اول مربوط به A1 داده دوم مربوط به A2 داده سوم مربوط به A3 و…
1.2) بیت هر داده از یه کاراکتر جداکننده استفاده کن، مثلا ,
1.3) بعد اینو سرچ کن، روال تجزیه و خوندن داده فوق دستت میاد : Split String by comma
2) اگه تغییر کد گیرنده ممکن نی برات، چندین حالت با توجه به توضیحات ناقصت ممکنه رخ بده ( فرضو بر این گزاشتم که طبق توضیحاتت فقط 1 داده میخوای ارسال و دریافت کنی که نامش هم کنار مقدارش ذکر میشه ) :
2.1) نام داده ها تعداد کاراکتر یکسانی دارند، مثلا A1P1 دارای 4 کاراکتر هستش و A2P3 هم 4 کاراکتر و … : خب میای کاراکتر خونه 0 تا 3 اولو میخونی به عنوان نام داده، کاراکتر خونه 4 ام رو کاری بهش نداریم، کاراکتر خونه 5 تا آخر رو میخونی به عنوان مقدار داده ( توابع هر کدوم از اینکارا تو نت هستش، فارسی یا انگلیسی سرچ کنی توابعش میاد )
2.2) نام داده ها ممکنه تعداد کاراکترشون یکسان نباشه : خب میای موقعیت کاراکتر = رو پیدا میکنی ( اسمشو میزارم X )، از کاراکتر خونه 0ام تا خونه X-1 ام میخونه به عنوان نام داده؛ کاراکتر خونه Xام رو کاری بهش ندارم؛ کاراکتر خونه X+1 ام تا آخر رو میخونی به عنوان مقدار داده.
مهمان
سلام
در آردونیو
اگر رشته بصورت چند خطی باشه و حتی بین خطوط ،خط خالی هم داشته باشه، چطور میشه هر خط را از رشته جدا کرد و در یک آرایه رشته ای ذخیره کرد.
با readStringUntil و readBytesUntil روی n\ و 0\ و r\ امتحان کردم متاسفانه خطوط خالی بیشتری اضافه می شود.
اصلا راهی هست که از پورت سریال خط به خط خواند؟
در پایان حقیقتا سایت آموزشی عالی دارید.
در پناه امیرالمومنین
نویسنده این مطلب
سلام – میشه نمونه ای از داده هاتون ( حداقل 1 صفحه؛ 10 خط؛ 10 رکورد ) رو تو فایل txt برام بفرستید؟
مهمان
مشتی هستی دمت گرم ایولااااا
مهمان
خدا خیرت بده
مهمان
به اون بلدرچین رو قبل اینکه بکشیش بهش آب دادی؟! 😐
نویسنده این مطلب
داستان رو کامل خوندی خداییش؟
مهمان
سلام. چرا این زبانه های مطالب باز نمیشه؟
نویسنده این مطلب
سلام – دارم سایت رو ویرایش میکنم – به این دلیله – الان تست کنید – کش سایت رو هم پاک کنید قبلش
مهمان
سلام خسته نباشید
به نظر شما راهی هست ssid و pass با وایفای یا سریال مانیتور بشه تغییر داد؟
البته من بدون استفاده از at command میخواستم بدونم.
مهمان
سلام
یعنی عالیه این مطلب
رحمت به شیر همچون پاک ات
بسیار سپاس
مهمان
کتابخونه خاصی داره
مهمان
سلام یه سوال این کد ها فقط مربوط به آردوینو هست یا فقط کلا C++ همینطوریه
نویسنده این مطلب
سلام
این کدها برای آردوینو همینه ولی اگه معمولا این کتابخونه های مورد استفاده استاندارد c++ هستش تا جایی که میدونم.
مهمان
سلام ممنون از سایت بی نظیرتون سوال دارم اینکه
تو راه اندازی سیم ۸۰۰ با اردوینو میخوام وقتی یه پیام خاص بیاد یه قسمت از کدم تقییر کنه میتونم از این توابع استفاده کنم مثلا برا کنترل دما که از قبل رو ۲۰ با یه پیامک ۲۵ کنم یا اصلا بخوام کاربر سیستم عوض کنم (تقییر شماره موبایل)
مهمان
سلام. ببخشید میخواستم بدونم اگه این پروژه رو برای من کدشو بنویسین هزینش چقد میشه؟
مهمان
سلام. اقای دمرچلو.ممنون از مطالب خوبتون. ببخشید من از شما یه خواهشی داشتم. میخواستم اگه میشه این مطلبو
http://saakhtani.ir/archive/1395/09/49643
با ال سی دی کاراکتری کدشو بنویسین و بزارین توی سایت.
اگه اینکارو بکنین واقعا مدیونتون میشم. چون خیلی نیاز دارم.
با تشکر.
نویسنده این مطلب
سلام – امکان انجام رایگان این پروژه نیست برام فعلا.
مهمان
سلام
ممنون از سایت خوبتون من ازمطالب سایت شما نهایت استفاده را بردم امیدوارم همیشه موفق باشید.
مهمان
سلام اقا مهدی میشه اموزش پروگرام کردن میکرو avr رو با اردینو اموزش بدید ممنون
مهمان
کاری نداره فایل هگز رو تو تنظیمات آردوینو قابل رویت کن بعد اون فولدر و باز کن هگزو بده به پروگرمر همین
مهمان
آقا حسابی دمت گرم
واثعا خیلی خوبه مطالب… تشکر
مهمان
از كجا و چطور ياد بگيرم با كدويژن اردوينو رو كنترل كنم؟
بيچارت ميكنم انقدر سوال پيچت ميكنم????
نویسنده این مطلب
آره منم جواب دادم
برو تو سایت خود کدویژن روال کارش هستش.
ولی به نظر من از همین کامپایلر آردوینو استفاده کن.
مهمان
سلام دوست عزیز،همیشه از نوشته هات استفاده میکنم و خیلی ممنونم دستت ندرد،چنتا سوال هم دارم 1-کتابی هست در موضوع آردینو 2-با کدویژن میشه آردینو راه انداخت؟پروگرام چطور؟ 3- این لامذهب زبونش چیه؟ c مینویسم خطا میده
نویسنده این مطلب
سلام
1-به زبون انگلیسی آره ولی فارسی هم هست ولی فک نکن به اون صورت جامع باشه.
2-بله
3-سی پلاس پلاس – آموزش ها رو از اول خونده باشی و سی پلاس پلاس بلد باشی یاد میگیری.
مهمان
مهدی عزیز سلام
اردینو رو شروع کردم به کار کردن اما از آخر به اول، در واقع برای ساخت و راه اندازی یه cnc دست به کار شدم و خودم همه نمی دونم چرا از اردینو سر در اوردم.
حالا یه برد arduino mega 2560 و یه برد Ramps دارم. خیلی از راههایی که تو اینترنت هست ر اجرا کردم ولی به مشکل خوردم. مشکلم اینه که نرم افزارهای ارسال کننده کد به اردینو کد ها رو ارسال می کنند ولی اردینو هیچ عکسلعملی نشان نی دهد. کد hex که تو سایت ها گفتن روی بردم ریختم و هزار کار دیگه. خواهشم اینه که یه توضیحی در رابطه با تنظیمات سخت افزار مثلا برد اردینو ، میان افزار مانند grbl و نرم افزار ارسال جی کد در سایت قرار بدید. هر چی تلاش کردم تا حالا موفق نشدم این مشکل رو حل کنم.
نویسنده این مطلب
سلام-آقا مهدی متوجه کلیت مسئله شدم ولی دقیقا متوجه مشکلت نشدم
الان آموزش کار با قطعه ای رو میخوای؟
پروژه ای بستی و مشکل داره؟
مهمان
grblForCyclone رو تو اینترنت سرچ کن
مهمان
سلام.
خیلی عالی
راستی مرجع خوبی برای پردازش تصوی سراغ ندارید؟(کتاب باشه بهتره)
نویسنده این مطلب
سلام
OPENCV – سرچ تو گوگل – یه آموزشی تو سایت فرا درس هستش – طرف آموزش دهنش نویسنده کتاب هم هستش – من هم کتابش رو دارم و هم فیلمش رو خریدم.
مهمان
سلام جلسه بعد تقریبا کی میاد؟؟؟؟
نویسنده این مطلب
سلام
چی بزارم؟ چیزی به فکرم نمیرسه چون فکرم جاهای دیگس
مهمان
سلام خداقوت میشه بگید دیگه چه چیزایی از اموزش کامل اردویینو مونده؟؟
ی لیست تقریبا کامل
مثلاspiکامل نیست
نویسنده این مطلب
سلام
دیتاشیت مگا 16 رو ببین – سر فصل هاش رو
اونایی که تا حالا نگفتم تو سایت برا آردوینو رو بهم بگو
مشکلی بود بگو.
مهمان
slm
just tank you
مهمان
سلام
لطفا یه کتاب خوب برای آموزش سی شارپ معرفی کنین
ممنون
نویسنده این مطلب
سلام
https://dmf313.ir/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-micro-%D9%88-pc-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%AC%D9%84%D8%B3%D9%87-%DB%B1/
مهمان
سلام
مرسي از آموزشاي خوبتون.
مي خواستم پيشنهاد بدم آوزش يه پروژه كه با آردوينو مثلا براي ربات با دوربين و واي فاي و… با نرم افزار هاي آماده براى ويندوز و اندرويد ربات كنترل كرد.
نویسنده این مطلب
سلام – موضوع رو دقیقا بگید و کلی نگید- جزئی بگید تا من بزارم تو لیست کارام در صورت امکان
مهمان
سلام چرا این مطالب رو به صورت فیلم نمیذارین اینطوری یادگیریشون خیلی بهتر؟اگه امکان داره فیلم آموزشی بذارین.خسته نباشید مطالبتون عالیه
نویسنده این مطلب
سلام
مطلب بعدی رو هم به این صورت میزارم و هم فیلم آموزشش رو – تا ببینم چی میشه.
مهمان
سلام حاج مهدی، خسته نباشی. دست شما درد نکنه بابت مطالب خوبتون.
راستی اگه بخوام مطلب بزارم تو سایتتون باید چکار کنم. بفرستم براتون؟ یه سری تجربیات جالب دارم فکر کنم بدرد همه بخوره.
نویسنده این مطلب
سلام
بهترین راهش اینه که word کنید و برام بفرستید تا به اسم خودتون منتشر کنم تا درگیر سایت و درسراش نشید.
و اگه بخواین خودتون مطلب بزارین هم مشکلی نیست برا من فرقی نداره.(خواستین بگین تا اکانت بسازم براتون.)
مهمان
Word میسازم میفرستم انشاءالله