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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2761|回復: 9
收起左側

求助想用稱重傳感器實時重量來控制直流電機啟停

[復制鏈接]
ID:910207 發表于 2021-9-6 17:45 | 顯示全部樓層 |閱讀模式
本帖最后由 ErniuSong 于 2021-9-10 18:27 編輯

求助 想用稱重傳感器實時重量 來控制直流電機啟停,目前電機在單片機打開后會不停轉,稱重顯示也對,但是不會根據實時重量啟停

源碼如下 我是哪里的問題呀?
9.10更新:目前加了發送數據函數及中斷之后 LCD會顯示 WIGHT = 0.0000KG但是壓稱重傳感器 LCD顯示還是0沒有變化 電機在一直轉。
  1. #include "main.h"
  2. #include <reg52.h>
  3. #include "LCD1602.h"
  4. #include "HX711.h"
  5. #include "EEPROM.H"
  6. #include "motor4.H"
  7. #include <stdio.h>
  8. #include <intrins.h>

  9. //定義變量
  10. #define uchar  unsigned char
  11. #define uint   unsigned int
  12. unsigned char KEY_NUM = 0;   //用來存放按鍵按下的鍵值
  13. unsigned long HX711_Buffer = 0;  //用來存放HX711讀取出來的數據
  14. unsigned long Weight_Maopi = 0; //用來存放毛皮數據
  15. long Weight_Shiwu = 0;          //用來存放實物重量

  16. long Max_Value = 0;             //用來存放設置最大值
  17. char maxValueTable[4] = {1,0,0,0};
  18. unsigned char state = 0;    //用來存放設置狀態
  19. unsigned char Blink_Speed = 0;
  20. typedef unsigned char u8;    //定義取值范圍為0-255的數
  21. #define Blink_Speed_Max 6          //該值可以改變設置指針閃爍頻率

  22. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};


  23. uchar data  RXDdata[ ] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  24.                           0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20 };
  25. uchar temp,buf,m,count,KZW;

  26. bit   playflag=0;



  27. void init_main()
  28. {
  29.   TMOD=0x20;                   //用定時器設置串口波特率           9600
  30.         TH1=0xfd;
  31.         TL1=0xfd;
  32.         TR1=1;
  33.         TI=1;
  34.         REN=1;          //串口初始化
  35.         SM0=0;
  36.         SM1=1;
  37.         EA=1;           //開啟總中斷
  38.         ES=1;
  39. }

  40. //校準參數
  41. //因為不同的傳感器特性曲線不是很一致,因此,每一個傳感器需要矯正這里這個參數才能使測量值很準確。
  42. //當發現測試出來的重量偏大時,增加該數值。
  43. //如果測試出來的重量偏小時,減小改數值。
  44. //該值可以為小數
  45. #define GapValue 3219.9

  46. //傳感器最大測量值,單位是g
  47. #define AlarmValue 20000               

  48. //****************************************************
  49. //主函數
  50. //****************************************************
  51. void main()
  52. {
  53. //        unsigned char receiveData1,receiveData2,receiveData3,receiveData4;
  54.         double temp,te;
  55. //   chuankouinit();           //串口初始化
  56.         Init_LCD1602();                                                //初始化LCD1602

  57.         LCD1602_write_com(0x80);                        //設置LCD1602指針
  58.         LCD1602_write_word("Welcome to use!");
  59.        
  60.         Get_Maopi();
  61.         Get_Maopi();
  62.         Delay_ms(2000);                 //延時2s
  63.         Get_Maopi();
  64.         Get_Maopi();                                //稱毛皮重量        //多次測量有利于HX711穩定
  65.     LCD1602_write_com(0x01);    //清屏
  66.     init_main();        //組態王通信程序初始化
  67.     while(1)
  68.         {
  69.         Get_Weight();       
  70. //                 Weight_Shiwu=39876;
  71.                 temp=(Weight_Shiwu/100+(Weight_Shiwu%100)*0.01);
  72.                 te=Weight_Shiwu;
  73.                 //顯示當前重量
  74.                 LCD1602_write_com(0x80);
  75.         LCD1602_write_word("Weight=");
  76.                 LCD1602_write_data((Weight_Shiwu/10000)%10 + 0x30);
  77.                 LCD1602_write_data((Weight_Shiwu/1000)%10 + 0x30);
  78.                 LCD1602_write_data((Weight_Shiwu/100)%10 + 0x30);
  79.                 LCD1602_write_data('.');
  80.                 LCD1602_write_data((Weight_Shiwu/10)%10 + 0x30);
  81.                 LCD1602_write_data(Weight_Shiwu%10 + 0x30);                       
  82.                 LCD1602_write_word("K");
  83.             LCD1602_write_word("g");
  84.                         Delay_ms(1000);
  85.                 printf("%.3f\r\n", temp);
  86.                 printf("%.3f\r\n", te);
  87.         }
  88.        
  89. }



  90. //****************************************************
  91. //稱重
  92. //****************************************************
  93. void Get_Weight()
  94. {
  95.         Weight_Shiwu = HX711_Read();
  96.         Delay_ms(10);
  97.        
  98.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //獲取凈重
  99.        
  100.         if(Weight_Shiwu >= 0 )                       
  101.         {       
  102.                 Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/GapValue);         //計算實物的實際重量
  103.                
  104.         }
  105.         else
  106.         {
  107.                 Weight_Shiwu = 0;
  108.                 Delay_ms(2);
  109.                
  110.         }

  111. }

  112. //****************************************************
  113. //獲取毛皮重量
  114. //****************************************************
  115. void Get_Maopi()
  116. {
  117.         Weight_Maopi = HX711_Read();
  118.         Delay_ms(2);

  119. }


  120. //****************************************************
  121. //MS延時函數(12M晶振下測試)
  122. //****************************************************
  123. void Delay_ms(unsigned int n)
  124. {
  125.         unsigned int  i,j;
  126.         for(i=0;i<n;i++)
  127.                 for(j=0;j<123;j++);
  128. }



  129. /*********************************************************

  130.   發送數據函數;目前加了發送數據函數及中斷之后 LCD會顯示 WIGHT = 0.0000KG但是壓稱重傳感器 LCD顯示還是0沒有變化 電機在一直轉。


  131. *********************************************************/
  132. //void senddata(uchar dat)
  133. //{
  134. //     SBUF =dat;
  135. //     while(!TI);
  136. //     TI = 0;
  137. //}




  138. /*********************************************************

  139.   串行中斷服務函數//
  140. *********************************************************/
  141. //void  serial() interrupt 4
  142. //{
  143. //   ES = 0;                //關閉串行中斷
  144. //   RI = 0;                //清除串行接受標志位
  145. //   buf = SBUF;            //從串口緩沖區取得數據
  146. //     
  147. //   switch(buf)
  148. //   {
  149. //      case '!':  senddata(buf);break; //接受到1,發送字符'T'給計算機         
  150. //      case '?':  senddata(buf);break;//接受到2,發送字符'X'給計算機                       
  151. //      default:    senddata('X');break;  //接受到其它數據,將其發送給計算機         
  152. //   }


  153. //   ES = 1;    //允許串口中斷
  154. //}







  155. //****************************************************
  156. //推料電機
  157. //****************************************************

  158. void zhongliangjiance()  /*重量檢測*/
  159. {
  160.         if(Weight_Shiwu <=3000)/* 需要推料,單位為g*/
  161.                 KZW='a';
  162.         if(Weight_Shiwu >3000)/* 無需推料 */
  163.                 KZW='b';
  164. }

  165. void TL()
  166. {
  167.    EN4=1;         //推料,電機運轉
  168. }
  169. void BT()
  170. {
  171.    EN4=0;         //不推料
  172. }

  173. void motor4()
  174. {
  175. while(1)        
  176.     {
  177.       zhongliangjiance();
  178.                         TL();
  179.                         Delay_ms(5);

  180.                 BT();
  181.                         Delay_ms(5);

  182.                
  183.                         temp =KZW;
  184.                                 Delay_ms(2);

  185.        if(count<16)
  186.        {         
  187.          RXDdata[count]=KZW;
  188.          count++;
  189.                  if(count>1)
  190.                          playflag=1;
  191.              }
  192.                                          Delay_ms(5);
  193.       play();

  194.     }

  195. }





  196. //void motor4()
  197. //{
  198. ////        u8 i;
  199. ////        EN4=0;
  200. //        if(Weight_Shiwu >= 1000)               
  201. //        {
  202. //               
  203. //                LCD1602_write_com(0x80+0x40+8);//寫在第二行
  204. //          LCD1602_write_word("A");
  205. //        }
  206. //        else
  207. //        {
  208. ////                if(Weight_Shiwu==0)
  209. ////                                        LCD1602_write_com(0x80+0x40+8);//寫在第二行
  210. ////                LCD1602_write_word("B");
  211. ////                else if(Weight_Shiwu<500)
  212. //                LCD1602_write_com(0x80+0x40+8);//寫在第二行
  213. //                LCD1602_write_word("C");
  214. //                Display_Weight();
  215. //        }  
  216. //    EN4 = (3<= Weight_Shiwu) && (Weight_Shiwu < 7);
  217. //      
  218. //}




  219. //void tuiliaodianji()
  220. //{
  221. //        EN4 = 0;
  222. //        Weight_Shiwu = HX711_Read();
  223. //        if (Weight_Shiwu <=50)
  224. //        {
  225. //                u8 i;
  226. //        for (i=0;i<100;i++)
  227. //                {
  228. //             EN4 = 1;
  229. //                        //LCD1602_write_word("A");

  230. //                   Delay_ms(3000);
  231. //                }
  232. //         if (Weight_Shiwu >=50)
  233. //                   EN4 = 0 ;
  234. //        }
  235. //   else
  236. //         {
  237. //          EN4 = 0 ;
  238. //        // LCD1602_write_word("B");

  239. //         }
  240. //          
  241. //}

  242. //void ShowChar()
  243. //{
  244. // //{static bit Run_Flag;
  245. //   if (Weight_Shiwu <= 1)
  246. //  {
  247. //   //     u8 i;
  248. //     //                   if(!Run_Flag)
  249. //                //    {
  250. //    //    for (i=0; i<100; i++)
  251. //      //  {
  252. //           // EN4 = 1;
  253. //                        LCD_Init();
  254. //    LCD1602_ShowChar(2,3,"A");

  255. //         Delay_ms(3000);
  256. //     }
  257. //  //      if (Weight_Shiwu >=50)
  258. //         //EN4 = 0 ;
  259. //              //                  Run_Flag = 1;
  260. //   //                     }
  261. //   // }
  262. //   else
  263. //  {
  264. //   //  EN4 = 0 ;
  265. //                LCD_Init();
  266. //      LCD1602_ShowChar(2,3,"B");
  267. //            //             Run_Flag = 0;
  268. //  }
  269. ////}



復制代碼




回復

使用道具 舉報

ID:161164 發表于 2021-9-6 19:11 | 顯示全部樓層
沒注釋,不知道什么時候想啟,什么時侯想停
純推理一下
  1. void tuiliaodianji()
  2. {static bit Run_Flag;
  3.     if (Weight_Shiwu <=50)
  4.     {
  5.         u8 i;
  6.                         if(!Run_Flag)
  7.                         {
  8.         for (i=0; i<100; i++)
  9.         {
  10.             EN4 = 1;
  11.             //LCD1602_write_word("A");

  12.             Delay_ms(3000);
  13.         }
  14.         //if (Weight_Shiwu >=50)
  15.         //    EN4 = 0 ;
  16.                                 Run_Flag = 1;
  17.                         }
  18.     }
  19.     else
  20.     {
  21.         EN4 = 0 ;
  22.         // LCD1602_write_word("B");
  23.                                 Run_Flag = 0;
  24.     }
  25. }
復制代碼
回復

使用道具 舉報

ID:910207 發表于 2021-9-6 19:21 | 顯示全部樓層
lkc8210 發表于 2021-9-6 19:11
沒注釋,不知道什么時候想啟,什么時侯想停
純推理一下

您好 是想在稱重傳感器顯示比如3kg時開始運轉 顯示7kg時電機停
回復

使用道具 舉報

ID:420836 發表于 2021-9-7 08:26 | 顯示全部樓層
代碼中,重量檢測的IF語句被注釋了。
回復

使用道具 舉報

ID:161164 發表于 2021-9-7 22:10 | 顯示全部樓層
ErniuSong 發表于 2021-9-6 19:21
您好 是想在稱重傳感器顯示比如3kg時開始運轉 顯示7kg時電機停

void tuiliaodianji()
{
    EN4 = (3<= Weight_Shiwu) && (Weight_Shiwu < 7);
        //不知道是高電平啟動還是低電平啟動,就當是高電平啟動吧
        //不知道是Weight_Shiwu的單位是什么,就當是kg吧
}
回復

使用道具 舉報

ID:910207 發表于 2021-9-8 10:11 | 顯示全部樓層
TTQ001 發表于 2021-9-7 08:26
代碼中,重量檢測的IF語句被注釋了。

您好,取消注釋還是一樣不行
回復

使用道具 舉報

ID:910207 發表于 2021-9-8 17:31 | 顯示全部樓層
lkc8210 發表于 2021-9-7 22:10
void tuiliaodianji()
{
    EN4 = (3

您好 ,編譯沒問題但是還是 沒有在3kg時開始轉 電機還是一直再轉
回復

使用道具 舉報

ID:161164 發表于 2021-9-8 17:46 來自手機 | 顯示全部樓層
ErniuSong 發表于 2021-9-8 17:31
您好 ,編譯沒問題但是還是 沒有在3kg時開始轉 電機還是一直再轉

把你改好的代碼放上來吧~
再加一些注釋,如高低電平的含意,模擬量的單位等
回復

使用道具 舉報

ID:910207 發表于 2021-9-10 18:28 | 顯示全部樓層
lkc8210 發表于 2021-9-8 17:46
把你改好的代碼放上來吧~
再加一些注釋,如高低電平的含意,模擬量的單位等

您好 已經放上去啦,麻煩您幫忙看看,謝謝您。
回復

使用道具 舉報

ID:851629 發表于 2022-3-17 14:18 | 顯示全部樓層
lkc8210 發表于 2021-9-6 19:11
沒注釋,不知道什么時候想啟,什么時侯想停
純推理一下


代碼中,重量檢測的IF語句被注釋了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人高清 | 精品久久久久久 | 国产一区三区在线 | 91九色在线观看 | 午夜精品久久久久久久星辰影院 | 亚洲品质自拍视频网站 | 在线播放一区二区三区 | 看真人视频一级毛片 | 亚洲国产精品一区二区三区 | 91精品国产91久久久久久吃药 | 欧美日韩在线成人 | 日韩在线看片 | 亚洲精品视频在线看 | 91久久精品一区二区三区 | 夫妻午夜影院 | 日韩最新网址 | 亚洲+变态+欧美+另类+精品 | 国产精品欧美一区二区三区不卡 | av国产精品 | 爱爱免费视频 | www.久久艹 | 精国产品一区二区三区四季综 | 午夜性色a√在线视频观看9 | 日本黄色不卡视频 | 波多野结衣中文字幕一区二区三区 | 国产91亚洲精品一区二区三区 | 亚洲精品久久久一区二区三区 | h视频免费在线观看 | 98成人网| 91精品国产综合久久久久久漫画 | 91黄色片免费看 | 91久久久久 | 欧美一区视频 | 亚洲欧美精| 中文字幕乱码一区二区三区 | 国产一区二区三区久久久久久久久 | 国产精品亚洲一区二区三区在线 | 韩日在线视频 | 国产精品毛片av | a看片| 日韩av一区在线观看 |