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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8692|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

關(guān)于arduino使用spintf來(lái)格式化輸出

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
【聲明】本貼當(dāng)前介紹  %d  %s %f 的使用方法
我們?cè)诰毩?xí)C語(yǔ)言的時(shí)候使用 printf 來(lái)輸出字符,使用占位符(百度百科稱作 【規(guī)定符】如: %d , %f)來(lái)輸出變量。
在arduino 中 Serial.print 和 Serial.println 無(wú)法像 C語(yǔ)言編譯器中那樣直接使用占位符進(jìn)行輸出。
但是 arduino 可以 使用 sprintf 來(lái)輸出。
舉例:
你想用 Arduino在串行監(jiān)視器上顯示多個(gè)變量,而不必使用一堆單獨(dú)的Serial. print()語(yǔ)句,
如果是這樣,那么使用 sprintf()函數(shù)。
假設(shè)您要將這行文本打印到串行監(jiān)視器:
numBurritos  = 3
tempStr = 147.7
“The 3 burritos are 147.7 degrees F”
  1. Serial.print("The ");  
  2. Serial.print(numBurritos);  
  3. Serial.print(" burritos are ");  Serial.print(tempStr);  
  4. Serial.println(" degrees F");
復(fù)制代碼
事實(shí)上,對(duì)于添加到輸出中的每個(gè)變量,您都會(huì)在代碼中添加兩個(gè)串行打印。
如果你想打印一行 多個(gè)變量插入到這樣的字符串中怎么辦就需要長(zhǎng)長(zhǎng)的代碼量。

而使用 sprintf 就可以簡(jiǎn)化,這一輸出。我們可以根據(jù)需要將盡可能多的變量打印到我們的字符串中,所需的代碼量保持在 3 行。

這里你需要的三行代碼:
  1. char buffer[40];
  2. sprintf(buffer, "The %d burritos are %s degrees F", numBurritos, tempStr);
  3. Serial.println(buffer);
復(fù)制代碼
讓我們仔細(xì)看看每一行代碼。
  char buffer[40];
字符數(shù)組需要與最終輸出字符串一樣大或更大。因此,計(jì)算你計(jì)劃在該字符串中存儲(chǔ)的字符數(shù),并確保緩沖區(qū)至少有那么大。用于存儲(chǔ)輸出的字符。

  sprintf(buffer, "The %d burritos are %s degrees F", numBurritos, tempStr);


sprintf 用于將輸出的字符存儲(chǔ)到 buffer 數(shù)組中
  Serial.println(buffer);
打印
我們用一個(gè)程序來(lái)驗(yàn)證一下   使用 %d 使用方法


  1. void setup() {
  2.   Serial.begin(9600);
  3.   for(int i=0;i<8;i++ ){
  4.     char jinoas[100];
  5.     sprintf(jinoas,"打印 i 的值為:%d , i+1= %d,i+2= %d",i,i+1,i+2);
  6.     Serial.println(jinoas);
  7.   }
  8. }

  9. void loop() {


  10. }
復(fù)制代碼




我們用一個(gè)程序來(lái)驗(yàn)證一下   使用 %s 使用方法


  1. char nun[] = "nufdsfsd";
  2. void setup() {
  3.   Serial.begin(9600);
  4.   char jinoas[100];
  5.   sprintf(jinoas,"num2的值為%s",nun);
  6.   Serial.println(jinoas);
  7. }

  8. void loop() {

  9. }
復(fù)制代碼




使用 %f 使用方法

%f 不能直接 輸出,要先轉(zhuǎn)化為 字符數(shù)組 然后使用 %s 的方式進(jìn)行輸出,使用dtostrf()函數(shù)進(jìn)行轉(zhuǎn)換
我們先看轉(zhuǎn)化程序

  1.    char str_temp[6];   //浮點(diǎn)類型轉(zhuǎn)化存儲(chǔ)緩沖數(shù)組
  2.    dtostrf(num2, 4,2, str_temp);  // 4,2 表示轉(zhuǎn)化的精度
復(fù)制代碼

我們用一個(gè)程序來(lái)驗(yàn)證一下

  1. float num2 = 321.12345;
  2. void setup() {
  3.   Serial.begin(9600);
  4.    char jinoas[100];   //打印字符緩沖數(shù)組
  5.    char str_temp[6];   //浮點(diǎn)類型轉(zhuǎn)化存儲(chǔ)緩沖數(shù)組
  6.    dtostrf(num2, 4,2, str_temp);  // 4,2 表示轉(zhuǎn)化的精度
  7.     sprintf(jinoas,"num2的值為%s",str_temp);
  8.     Serial.println(jinoas);

  9. }

  10. void loop() {
  11. }
復(fù)制代碼





以上,就是我關(guān)于 格式化輸出的心得,后期有能力的話,更新其他占位符輸出格式。盡量基于本貼去更新。
覺(jué)得有用,就留個(gè)言吧



評(píng)分

參與人數(shù) 2黑幣 +105 收起 理由
WFX777888 + 5 贊一個(gè)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:74069 發(fā)表于 2021-8-20 01:20 | 只看該作者
你不知道:Serial.printf 也是這功能么,連數(shù)組都省了
回復(fù)

使用道具 舉報(bào)

板凳
ID:584195 發(fā)表于 2021-8-20 09:40 | 只看該作者
直接%.2f 這樣寫(xiě)不行嗎?樓主
回復(fù)

使用道具 舉報(bào)

地板
ID:268736 發(fā)表于 2024-3-17 05:19 | 只看該作者
zyluglugl 發(fā)表于 2021-8-20 09:40
直接%.2f 這樣寫(xiě)不行嗎?樓主

我試了,還真的不行 ! 不過(guò)用版主的的方式真的農(nóng)動(dòng)作喔!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品播放 | 紧缚调教一区二区三区视频 | 日韩精品一二三 | 精品综合 | 九九综合 | 久草电影网 | 国产成人高清 | 久久国产精品视频 | 精品国产伦一区二区三区观看体验 | 欧美群妇大交群中文字幕 | 99re在线视频 | 色综合久久久久 | 日韩在线视频一区 | 成人精品在线观看 | 婷婷精品 | 国产精品久久久久一区二区三区 | 一道本不卡视频 | 香蕉一区 | 亚洲性视频网站 | 国产在线不卡视频 | 国产黄色在线 | 成年网站在线观看 | 韩日一区二区 | 中文在线a在线 | 波霸ol一区二区 | 亚洲人在线 | 麻豆成人在线视频 | 成人精品免费视频 | 精品久久久久久亚洲综合网站 | 欧美一区二区成人 | 欧美成人影院 | 欧美日韩在线免费 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 欧美日韩精品中文字幕 | 国内自拍视频在线观看 | 欧美日韩精品中文字幕 | 中文字幕日韩欧美一区二区三区 | 天天操夜夜爽 | 一级网站| 色婷婷国产精品 | 国产蜜臀97一区二区三区 |