在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創作
電子發燒友網>電子資料下載>電子資料>微型能源轉型第2部分之軟件介紹

微型能源轉型第2部分之軟件介紹

2023-06-19 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

上周,我們討論了“微型能源轉換”演示的硬件本周我們將介紹軟件。對于那些關注過我以前的項目的人,您可能會知道我傾向于關注事物的教學方面,而不是代碼效率。對于 Arduino Mega,這通常不是什么大問題。因此,我傾向于僅使用 C++ 對象將代碼拆分為功能模塊,如下圖所示:

pYYBAGOIFYmASle-AABGuX8B_fE683.png
模塊化架構
?

這些模塊中的大多數將具有一個setup()和一個loop()功能,這些功能在層次結構更高層的模塊的setup()和中使用。loop()頂層(能量)演示了這種方法:

...
#include "Wizard.h"
#include "Interrupts.h"
#include "Model.h"
...
static Interrupts interrupt;
static Wizard wizard;
static Model model;
...
void setup() {
 Serial.begin(9600);
 Serial.println(F("SETUP ENERGY TRANSITION DEMO"));
 interrupt.setup();
 model.setup();
 wizard.setup();
 ...
}
void loop() {
 wizard.loop();
 if ( interrupt.getSecondsFlank()) {
   interrupt.clear();
   ...
   switch ( balance ) {
     case 0:
       wizard.update();
       break;
     case 1:
       ...
       break;
     default:
       break;
   }
 }
}

很明顯,該架構大致遵循模型-視圖-控制器 (MVC) 模式, Adafruit 的 2.8 英寸 LCD 屏幕使用向導我將在下一篇博客中介紹這部分內容。

現在我們將專注于模型;中斷主要用于創建一個穩定的 0.1 秒(秒和分鐘)計時器,用于為電機提供穩定的類似 PWM 的輸出,因為它們連接到多路復用器,而不是直接連接到輸出阿杜諾。

 //Activate interrupt Timer2 (0.1 sec)
ISR(TIMER2_COMPA_vect) {
 loopCounter++;
 motors.handleInterrupt(200);
 lights.handleInterrupt();
 interrupt.flank = true;
 if ( interrupt.getLock() )
   return;
 int_counter++;
 int_counter %= SECONDS;
 if ( int_counter == 0 )
   interrupt.sec_flank = true;
 else
   return;
 interrupt.min_flank = false;
 interrupt.tensec_flank = false;
 min_counter++;
 interrupt.checkInitialisation();
 min_counter %= MINUTES;
 if ( min_counter == 0)
   interrupt.min_flank = true;
 if (( min_counter % TEN_SEC ) == 0)
   interrupt.tensec_flank = true;
}

粗略地說,該模型由三類模塊組成:

  • 環境,包括時間(日歷)和天氣模擬
  • 輸入和輸出,讀取太陽能電池板并控制 LED 和電機
  • 公園布局,將輸入和輸出重新計算為對實際太陽能公園有意義的數字。

大多數這些模塊都相當簡單,所以我不會深入研究代碼本身。唯一需要注意的是SparkFun 的兩個 16 通道模擬/數字多路復用器,一個用于輸入(太陽能電池板),一個用于輸出(LED 和電機)。多路復用器非常適合輸入,因此太陽能電池板的代碼非常簡單:

 Solar::Solar() {}
void Solar::setup( int smpl) {
 pinMode(A15, INPUT);
 for ( int i = 0; i < 3; i++) {
   pinMode(SS0 + i, OUTPUT);
   digitalWrite(SS0 + i, LOW);
 }
 samples = smpl;
 counter = 0;
}
uint16_t Solar::read(byte number) {
 switch ( number ) {
   case 0:
     digitalWrite(SS0, LOW);
     digitalWrite(SS1, LOW);
     digitalWrite(SS2, LOW);
     digitalWrite(SS3, LOW);
     break;
   case 1:
     digitalWrite(SS0, HIGH);
     digitalWrite(SS1, LOW);
     digitalWrite(SS2, LOW);
     digitalWrite(SS3, LOW);
     break;
   case 2:
     digitalWrite(SS0, LOW);
     digitalWrite(SS1, HIGH);
     digitalWrite(SS2, LOW);
     digitalWrite(SS3, LOW);
     break;
   case 3:
     digitalWrite(SS0, HIGH);
     digitalWrite(SS1, HIGH);
     digitalWrite(SS2, LOW);
     digitalWrite(SS3, LOW);
     break;
   case 4:
     digitalWrite(SS0, LOW);
     digitalWrite(SS1, LOW);
     digitalWrite(SS2, HIGH);
     digitalWrite(SS3, LOW);
     break;
   case 5:
     digitalWrite(SS0, HIGH);
     digitalWrite(SS1, LOW);
     digitalWrite(SS2, HIGH);
     digitalWrite(SS3, LOW);
     break;
   case 6:
     digitalWrite(SS0, LOW);
     digitalWrite(SS1, HIGH);
     digitalWrite(SS2, HIGH);
     digitalWrite(SS3, LOW);
     break;
   case 7:
     digitalWrite(SS0, HIGH);
     digitalWrite(SS1, HIGH);
     digitalWrite(SS2, HIGH);
     digitalWrite(SS3, LOW);
     break;
   case 8:
     digitalWrite(SS0, LOW);
     digitalWrite(SS1, LOW);
     digitalWrite(SS2, LOW);
     digitalWrite(SS3, HIGH);
     break;
   case 15:
     digitalWrite(SS0, HIGH);
     digitalWrite(SS1, HIGH);
     digitalWrite(SS2, HIGH);
     digitalWrite(SS3, HIGH);
     break;
   default:
     digitalWrite(A15, LOW);
     digitalWrite(SS0, LOW);
     digitalWrite(SS1, LOW);
     digitalWrite(SS2, LOW);
     digitalWrite(SS3, LOW);
     break;
 }
 int result = 0;
 for ( int i = 0; i < samples; i++) {
   delay( READ_DELAY );
   result += analogRead(A15);
 }
 values[number]=result/samples; 
 return values[number];
}
uint16_t Solar::get(byte number) {
 return values[number];
}
void Solar::loop() {
 read( counter++ );
 counter%=NR_OF_PANELS;
}

遺憾的是,這些多路復用器沒有鎖存功能,因此它們不太適合輸出,至少在我們這里使用它們的方式上是這樣。基本上它們一次只能控制一個輸出,因此組合多個輸出需要您非常快速地迭代它們,并且接受您想要的輸出越多,最大輸出將必須由所有輸出共享。對于電機來說,這不是一個大問題,因為它們無論如何都必須緩慢轉動,并且附加質量的慣性允許某種脈沖寬度調制 (PWM)類方法,其中各種電機將其所需的輸出分配給總時間(一秒)。這需要由中斷處理程序來控制(另見上面的代碼):

void Motors::handleInterrupt( uint16_t total ) {
 if (!enable)
   return;
 uint16_t results[3];
 calcSpeed( results, total );
 if ( counter < results[0]) {
   if ( results[0] > 0 ) {
     motor(WALRUS, HIGH);
   }
 } else if ( counter < results[0] + results[1] ) {
   if ( results[1] > 0 ) {
     motor(WATERMILL, HIGH);
   }
 } else if ( counter < results[0] + results[1] + results[2]) {
   if ( results[2] > 0 ) {
     motor(WINDMILL, HIGH);
   }
 }
 if ( counter >= total ) {
   motor(WALRUS, LOW);
   motor(WATERMILL, LOW);
   motor(WINDMILL, LOW);
   counter = 0;
 } else {
   counter++;
 }
} 

由于這些限制,決定僅在電機關閉時運行 LEDS,而不是同時運行太多。這些由 16 位掩碼控制:

 void Lights::handleInterrupt() {
 if (!enable)
   return;
 uint16_t shift = 1;
 if ( mask == 0 ) {
   led(15, LOW);
 } else {
   for (int i = 0; i < 7; i++) {
     bool result = shift & mask;
     if ( result )
       led(i, result);
     shift <<= 1;
   }
 }
}

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 欧美色图色就是色| 美女免费视频是黄的| 日韩亚洲欧洲在线rrrr片| 午夜免费观看_视频在线观看| 农村三级毛片| 色偷偷888欧美精品久久久| 大黄蕉| 亚洲第一成人在线| 丁香六月色婷婷| 久久精品屋| 欧美一级片手机在线观看| 亚洲午夜久久久久久噜噜噜| 2021国产成人精品久久| 手机看片自拍自自拍日韩免费| aaa一级片| 成年人一级毛片| 好爽~~~~嗯~~~再快点明星| 女人扒开腿让男人桶到爽| 看全色黄大色大片免费久久 | 奇米精品| 又粗又爽又色男女乱淫播放男女| 久久极品| 久久五月网| 成人看片免费无限观看视频| 天天爽夜夜爽一区二区三区| 夜夜爽8888| 97av免费视频| 日日草夜夜草| 清纯唯美亚洲综合一区| 亚洲人成在线精品不卡网| 大黄网站色多多| 天天翘夜夜洗澡天天做| 日本一区二区三区不卡在线视频| 亚洲男人天堂2021| 一女被两男吃奶玩乳尖口述| 国产黄在线观看| 啪啪免费视频网站| gay超刺激污文| 亚洲香蕉影院| 欧美一级片在线视频| 9久久9久久精品|