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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求教使用Arduino+scoop庫實現(xiàn)多線程的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:578917 發(fā)表于 2020-6-8 11:05 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
近來想用Arduino做個工控版,必須用到多線程處理,    程序?qū)懲炅?nbsp; 在Protues里面仿真都沒有問題    下載到板子上就不能正常運行


  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   Serial.print("setup");
  5.   attachInterrupt(1, counter, LOW); //脈沖輸入
  6.   attachInterrupt(0, Stop, HIGH); //急停
  7.   pinMode(4, OUTPUT);         //音波測試
  8.   pinMode(5, OUTPUT);         //電磁閥
  9.   pinMode(6, INPUT_PULLUP); //啟動
  10.   pinMode(7, OUTPUT);         //復(fù)位
  11.   pinMode(13, OUTPUT);        //led
  12.   digitalWrite(13,HIGH);
  13.   digitalWrite(7,HIGH);
  14.   Scheduler.startLoop(loop2);
  15.   Scheduler.startLoop(loop3);
  16.   Scheduler.startLoop(loop4);
  17.   Scheduler.startLoop(loop5);
  18.   Scheduler.start();
  19.   Serial.print(2);
  20. }
  21. void loop()
  22. {
  23.   //yield();
  24.    Serial.print(3);
  25.    Scheduler.delay(1000);
  26. }
復(fù)制代碼

這個是SETUP的程序    仿真的時候從串口接收到 setup2  邏輯都是正常的  


下載到板子上  用串口助手  只接收到  se


隨后板子就像死機一樣   其他線程任務(wù)都無法執(zhí)行

實在頭疼找不到問題    仿真都行   下載到板子上就出問題了

以下是全部代碼


  1. #include #include double analog; char buff[10]; unsigned char a, addr; unsigned int delay_time, work_time, cold_time; volatile unsigned char count = 0, temp = 0, start_flag = 0, display_flag = 0, shake_flag = 0, text_flag = 0; volatile unsigned long frq, run_time = 0, time_now = 0, time_old = 0; static unsigned char Frq_buff[7] = {0X6E, 0X30, 0X2E, 0X76, 0X61, 0X6C, 0X3D}; //ASCLL碼 n0.val= static unsigned char Analog_buff[7] = {0X78, 0X30, 0X2E, 0X76, 0X61, 0X6C, 0X3D}; //ASCLL碼 x0.val= static unsigned char End_buff[3] = {0XFF, 0XFF, 0XFF}; //結(jié)束符 /********************************主程序區(qū)*****************************************/ void setup() { Serial.begin(9600); Serial.print("setup"); attachInterrupt(1, counter, LOW); //脈沖輸入 attachInterrupt(0, Stop, HIGH); //急停 pinMode(4, OUTPUT); //音波測試 pinMode(5, OUTPUT); //電磁閥 pinMode(6, INPUT_PULLUP); //啟動 pinMode(7, OUTPUT); //復(fù)位 pinMode(13, OUTPUT); //led digitalWrite(13,HIGH); digitalWrite(7,HIGH); Scheduler.startLoop(loop2); Scheduler.startLoop(loop3); Scheduler.startLoop(loop4); Scheduler.startLoop(loop5); Scheduler.start(); Serial.print(2); } void loop() { //yield(); Serial.print(3); Scheduler.delay(1000); } /********************************任務(wù)1程序區(qū)*****************************************/ // 顯示屏數(shù)據(jù)更新 //defineTaskLoop(Task1) void loop2() { if (display_flag) { Serial.write("task1"); analog = (double)(analogRead(A0) / 1023.00) * 5; //計算模擬量 frq = 2000 / (double)(run_time / 1000.00) * 1000; //頻率計算 PrintFrq(); PrintAnalog(); Scheduler.delay(100); //刷新間隔 } } /********************************任務(wù)2程序區(qū)*****************************************/ //控制程序 //defineTaskLoop(Task2) void loop3() { if (!digitalRead(6)) { Serial.write("task2"); //LEDshake(); digitalWrite(5, HIGH); //開電磁閥 Scheduler.delay(delay_time*10); //延時啟動 //sleep(100); digitalWrite(4, HIGH); //開超聲 display_flag = 1; //顯示更新允許 Scheduler.delay(work_time*10); //焊接延時 //sleep(200); display_flag = 0; //顯示更新禁止 digitalWrite(4, LOW); //關(guān)超聲 Scheduler.delay(cold_time*10); //冷卻延時 //sleep(100); if (shake_flag) { for (int i = 10; i > 0; i--) { digitalWrite(5, HIGH); Scheduler.delay(200); //振動 digitalWrite(5, LOW); Scheduler.delay(200); } shake_flag = 0; } else { digitalWrite(5, LOW); //關(guān)電磁閥 } start_flag = 0; //清除標(biāo)志 } } /********************************任務(wù)3程序區(qū)*****************************************/ //defineTaskLoop(Task3) //通訊 void loop4() { if (Serial.available()) { Serial.write("tesk3"); a = Serial.available(); Serial.readBytes(buff, a); switch (buff[0]) { case 0x66 : text_flag = 1; break; //音波測試 case 0x99 : addr = buff[1]; break; //確定參數(shù)序號 case 0xaa : Data_change(); break; //修改參數(shù) case 0xbb : Updata(); break; //參數(shù)上傳更新 case 0xcc : shake(); break; //振落開關(guān) } } Data_handle(); //數(shù)據(jù)轉(zhuǎn)化 //Scheduler.delay(100); //通訊數(shù)據(jù)處理間隔 } /********************************任務(wù)4程序區(qū)*****************************************/ //defineTaskLoop(Task4) //音波測試 void loop5() { if (text_flag) { Serial.write("task4"); digitalWrite(4, HIGH); //開超聲 display_flag = 1; //開頻率更新 Scheduler.delay(1000); display_flag = 0; digitalWrite(4, LOW); text_flag = 0; } } /********************************中斷程序區(qū)*****************************************/ //脈沖定時 下降沿 void counter() { count++; //脈沖計數(shù) if (count == 20) //以20Khz為標(biāo)準(zhǔn)0.1S 20*100=2000個脈沖更新一次頻率 { temp++; time_now = micros(); //讀時間 count = 0; //計數(shù)清零 run_time = time_now - time_old; //時間差 time_old = time_now; //時間移位 } } //急停動作 上升沿 void Stop() { digitalWrite(4, LOW); //關(guān)超聲 digitalWrite(5, LOW); //關(guān)電磁閥 digitalWrite(7, LOW); //復(fù)位 delay(999999); //如果復(fù)位失敗,則假死機 } /********************************函數(shù)程序區(qū)*****************************************/ void PrintFrq() { unsigned char data[5]; data[4] = frq % 10 + 0x30; data[3] = frq / 10 % 10 + 0x30; data[2] = frq / 100 % 10 + 0x30; data[1] = frq / 1000 % 10 + 0x30; data[0] = frq / 10000 % 10 + 0x30; Serial.write(Frq_buff, 7); Serial.write(data, 5); Serial.write(End_buff, 3); } void PrintAnalog() { unsigned char data[3]; data[2] = (unsigned int)(analog * 100) % 10 + 0x30; data[1] = (unsigned int)(analog * 100) / 10 % 10 + 0x30; data[0] = (unsigned int)(analog * 100) / 100 % 10 + 0x30; Serial.write(Analog_buff, 7); Serial.write(data, 3); Serial.write(End_buff, 3); } void Data_change() { while (1) { if (a == 6) { EEPROM.write(addr * 10 , buff[1]); //規(guī)定 延時數(shù)據(jù)三位HEX 范圍 0.00s~9.99s EEPROM.write(addr * 10 + 1, buff[3]); EEPROM.write(addr * 10 + 2, buff[4]); break; } if (a == 5) { EEPROM.write(addr * 10 , buff[1]); EEPROM.write(addr * 10 + 1 , buff[3]); EEPROM.write(addr * 10 + 2 , 0); break; } if (a == 3) { EEPROM.write(addr * 10 , buff[1]); EEPROM.write(addr * 10 + 1, 0); EEPROM.write(addr * 10 + 2, 0); break; } } } void Updata() { int i, j; for (i = 1; i < 4; i++) { Serial.write(Frq_buff, 7); Frq_buff[1] += 1; for (j = 0; j < 3; j++) { Serial.write(EEPROM.read(i * 10 + j)); //數(shù)據(jù)地址 10 11 12 20 21 22 30 31 32 } Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); } Frq_buff[1] = 0x30; } void Data_handle() //數(shù)據(jù)處理 規(guī)定delaytime 10 11 12 worktime 20 21 22 coldtime 30 31 32 { delay_time = (unsigned int)(EEPROM.read(10) - 0x30) * 100 + (unsigned int)(EEPROM.read(11) - 0x30) * 10 + (unsigned int)(EEPROM.read(12) - 0x30); work_time = (unsigned int)(EEPROM.read(20) - 0x30) * 100 + (unsigned int)(EEPROM.read(21) - 0x30) * 10 + (unsigned int)(EEPROM.read(22) - 0x30); cold_time = (unsigned int)(EEPROM.read(30) - 0x30) * 100 + (unsigned int)(EEPROM.read(31) - 0x30) * 10 + (unsigned int)(EEPROM.read(32) - 0x30); } void shake() { if (buff[1] == 0x00) { shake_flag = 1; } else { shake_flag = 0; } } void EEPROMwrite() { EEPROM.write(10,0x32); EEPROM.write(11,0x30); EEPROM.write(12,0x30); EEPROM.write(20,0x34); EEPROM.write(21,0x30); EEPROM.write(22,0x30); EEPROM.write(30,0x32); EEPROM.write(31,0x30); EEPROM.write(32,0x30); }
復(fù)制代碼





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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人小视频在线免费观看 | 草草影院ccyy | 中文成人无字幕乱码精品 | 九九久久久 | 别c我啊嗯国产av一毛片 | 国产精品美女在线观看 | 日韩免费高清视频 | 亚洲欧美精品在线观看 | 一区二区三区四区毛片 | 亚洲欧美中文字幕在线观看 | 91精品久久久久 | 欧美久久久久 | 成人午夜免费在线视频 | 亚洲一区二区av | 久久久久久网站 | 久久精品黄色 | 午夜寂寞影院列表 | 亚洲一区视频 | 日日夜精品视频 | 国内自拍真实伦在线观看 | 精品在线播放 | 久久精品一区二区 | 亚洲欧美综合精品另类天天更新 | 成年人在线观看视频 | 黄色av网站免费看 | 日韩中文字幕 | 懂色av色香蕉一区二区蜜桃 | 能免费看的av | 一区二区三区精品视频 | 一级毛片免费视频 | 中文字幕一区二区三区四区五区 | 欧美精品一区二区在线观看 | av超碰| 日韩h | 国产精品一区二区三区免费观看 | 久久精品一 | 亚洲福利网站 | 激情一区二区三区 | 天天干天天干 | 毛片综合 | 九九色综合 |