久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

Arduino在串口讀取多個字符串,并且轉(zhuǎn)換為數(shù)字?jǐn)?shù)組

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2014年04月03日   【字體:

功能如題目。
在串口收到逗號分割的6串?dāng)?shù)字比如
100,200,45,4,87,99
然后在6個PWM端口3, 5, 6, 9, 10, 11輸出對應(yīng)PWM值

代碼注釋很詳細(xì),就不再說明了。
//定義一個comdata字符串變量,賦初值為空值
String comdata = "";
//numdata是分拆之后的數(shù)字?jǐn)?shù)組
int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;
void setup()
{
//定義0~6腳是輸出
for(int i = 0; i < 6; i++) pinMode(PWMPin[i], OUTPUT);
Serial.begin(9600);
}
void loop()
{
//j是分拆之后數(shù)字?jǐn)?shù)組的位置記數(shù)
int j = 0;
//不斷循環(huán)檢測串口緩存,一個個讀入字符串,
while (Serial.available() > 0)
{
//讀入之后將字符串,串接到comdata上面。
comdata += char(Serial.read());
//延時一會,讓串口緩存準(zhǔn)備好下一個數(shù)字,不延時會導(dǎo)致數(shù)據(jù)丟失,
delay(2);
//標(biāo)記串口讀過數(shù)據(jù),如果沒有數(shù)據(jù)的話,直接不執(zhí)行這個while了。
mark = 1;
}
if(mark == 1) //如果接收到數(shù)據(jù)則執(zhí)行comdata分析操作,否則什么都不做。
{
//顯示剛才輸入的字符串(可選語句)
Serial.println(comdata);
//顯示剛才輸入的字符串長度(可選語句)
Serial.println(comdata.length());
/*******************下面是重點(diǎn)*******************/
//以串口讀取字符串長度循環(huán),
for(int i = 0; i < comdata.length() ; i++)
{
//逐個分析comdata[i]字符串的文字,如果碰到文字是分隔符(這里選擇逗號分割)則將結(jié)果數(shù)組位置下移一位
//即比如11,22,33,55開始的11記到numdata[0];碰到逗號就j等于1了,
//再轉(zhuǎn)換就轉(zhuǎn)換到numdata[1];再碰到逗號就記到numdata[2];以此類推,直到字符串結(jié)束
if(comdata[i] == ',')
{
j++;
}
else
{
//如果沒有逗號的話,就將讀到的數(shù)字*10加上以前讀入的數(shù)字,
//并且(comdata[i] - '0')就是將字符'0'的ASCII碼轉(zhuǎn)換成數(shù)字0(下面不再敘述此問題,直接視作數(shù)字0)。
//比如輸入數(shù)字是12345,有5次沒有碰到逗號的機(jī)會,就會執(zhí)行5次此語句。
//因?yàn)樽筮叺臄?shù)字先獲取到,并且numdata[0]等于0,
//所以第一次循環(huán)是numdata[0] = 0*10+1 = 1
//第二次numdata[0]等于1,循環(huán)是numdata[0] = 1*10+2 = 12
//第三次是numdata[0]等于12,循環(huán)是numdata[0] = 12*10+3 = 123
//第四次是numdata[0]等于123,循環(huán)是numdata[0] = 123*10+4 = 1234
//如此類推,字符串將被變成數(shù)字0。
numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
}
}
//comdata的字符串已經(jīng)全部轉(zhuǎn)換到numdata了,清空comdata以便下一次使用,
//如果不請空的話,本次結(jié)果極有可能干擾下一次。
comdata = String("");
//循環(huán)輸出numdata的內(nèi)容,并且寫到PWM引腳
for(int i = 0; i < 6; i++)
{
Serial.print("Pin ");
Serial.print(PWMPin[i]);
Serial.print(" = ");
Serial.println(numdata[i]);
analogWrite(PWMPin[i], numdata[i]);
numdata[i] = 0;
}
//輸出之后必須將讀到數(shù)據(jù)的mark置0,不置0下次循環(huán)就不能使用了。
mark = 0;
}
}

關(guān)閉窗口

相關(guān)文章

推薦文章
主站蜘蛛池模板: av网站在线免费观看 | 免费av网站在线观看 | 色婷婷在线视频 | 久久久久国产精品夜夜夜夜夜 | 亚洲国产成人精品女人 | 五月婷婷激情综合 | 国产一区二区三区免费 | 中文字幕在线观看一区二区三区 | 久久一区二区三区四区 | 久久机热这里只有精品 | 国产精品成人免费视频 | 免费一级全黄少妇性色生活片 | 国产精品一二 | 亚洲免费二区 | 毛片导航 | аⅴ资源新版在线天堂 | 国产网址| 国产毛片一级 | 成人涩涩视频 | 久久精品福利视频 | 亚洲国产成人av | 国产主播av | 欧美在线视频观看 | 中国黄色录像 | 狠狠狠干 | 一区二区三区在线看 | 欧美色综合网 | 亚洲色欲色欲www在线观看 | 亚洲欧美乱综合图片区小说区 | 中文字幕亚洲一区 | 国产三级免费观看 | 欧美视频免费 | 午夜久久久久久久 | 国产伦精品一区二区三区视频我 | 国产三级视频在线播放 | 成人爱爱 | 久久久久久久 | 天天操夜夜干 | 久久成人毛片 | 久久亚洲一区二区 | 精品久久一区二区 |