Skip to content

Instantly share code, notes, and snippets.

@kinosang
Last active August 29, 2015 14:02
Show Gist options
  • Save kinosang/47db1cd92fdf1edb28b4 to your computer and use it in GitHub Desktop.
Save kinosang/47db1cd92fdf1edb28b4 to your computer and use it in GitHub Desktop.
Project-Geek Cook Arduino 第一次聚會 整理

OK

看來還是有人喜歡玩這個的……

所以……今天大概講一講如何用 proteus 模擬 Arduino

Proteus http://pan.baidu.com/share/link?shareid=588774&uk=1379348432&third=15

Arduino 是基於 AVR 的開發板,有一個很好用的 IDE

在這裡推薦下載 0023 和1.x 兩個版本備用

因為 1.x 進行了很大的改動,導致 0023 上的許多函式都失去了作用

下載 IDE 在這裡 http://arduino.cc/en/Main/Software

下載 Arduino 1.0.5 就好

Windows ZIP file (for non-administrator install)

先說怎麼用 Proteus

這裡 http://tieba.baidu.com/p/2366848283 是一個小教程

因為 Arduino 是基於 AVR 的,因此,只要搭建一個 AVR 的最小系統就好

當然,要顧及到 IO 口的兼容問題

因此,這裡使用 ATMEGA328P

和 Arduino UNO 的芯片是一樣的

然後,設置 Arduino IDE,讓 IDE 現實出編譯好的 bin 放到哪裡了

這樣就可以在 proteus 裡面載入了

具體該怎麼做,那個帖子裡面說的很詳細

然後是 閃爍的小燈

根據帖子裡面的連線鏈接好 D1 R1

然後,在 Arduino IDE 打開 blink 的範例

File ﹣ Examples ﹣01.Basic - Blink

編譯(對號 按鈕)

然後把 hex 載入 proteus

就可以看到效果了

現在我們來講一下 Arduino IDE

五個按鈕,從左到右,是 編譯、下載、新建、打開、保存

下載,就是寫入到 Arduino 上的過程(如果是模擬,就不必使用這個)

當然,下載前需要安裝驅動程式(在 Windows 下需要)

還需要在 Tools Board 選擇正確地目標板

在 Tools - Serial Port 選擇正確的端口(win 下是 COM*,Linux/Uninx/Mac 下是 tty./cu.

如果是模擬,剛才說的這些無視就好(關於 Serial Port 的問題),只要選 board 為 UNO 就行了,port 就不用管了(用手工載入 hex 的方法,就是帖子中提到的 Program File

好了,讓我們回到 IDE 看一下 blink 的內容

File ﹣ Examples ﹣01.Basic - Blink

int led = 13;
/ the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}
/ the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

void setup(),初始化函式,是在 Arduino 開機時,Arduino 內置的初始化過程之後,執行一次;

void loop(),循環體函式,是在 Arduino 運行過程中重複執行的。

在 setup 之前的是其他的初始化語句,比如常量和全局變量等

當然,你也可以自己創建其他函數,然後在 setup、loop 中調用

具體看一下 Arduino 背後的機制

#include <Arduino.h>
 
int main(void)
{
    init();
 
#if defined(USBCON)
    USBDevice.attach();
#endif
     
    setup();
     
    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }
         
    return 0;
}

上面這段來自 <Arduino IDE 根目錄>/hardware/arduino/cores/arduino/main.cpp

我們可以看出,在 main() 函式中,首先調用了 Arduino 內部的一個 init() 函式,然後再調用了你的 setup() 函式。

在之後,有一個無窮迴圈,在其中調用 loop() 和 serialEventRun()。

值得注意的是,在使用 Arduino 時,應避免一切可能導致 Arduino 的 bootloader 或者 main() 函式出現問題的行為,包括中斷、看門狗等(當然,這裡是指在裸的 AVR 單片機上使用的方法,對於這些方法,Arduino 提供了可供使用的替代用的函式)。

唔……今天大概就這麼多,之後我們討論下流水燈還有按鈕之類的東西。

@bramblex
Copy link

请问,中途加入课程可以么? OwO

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment