arduino 分享
===
- [arduino分享](https://hackmd.io/@use-j/arduino分享)
# 1 //--- Serial
---
## 1-1 硬體 Serial
- `EX: Arduino Due 多UART`
```cpp=
char code2 = '0', code3 = '0';
void setup(){
Serial.begin(9600);
//
Serial2.begin(9600);
Serial3.begin(9600);
}
void loop(){
Serial.print("s2=");
Serial.println(code2);
Serial2.println("2 OK 222");
Serial.print("s3=");
Serial.println(code3);
Serial3.println("3 OK 333");
}
//---
void serialEvent2(){
while (Serial2.available() > 0) {
code2 = Serial2.read();
}
}
void serialEvent3(){
while (Serial3.available()) {
code3 = Serial3.read();
}
}
```
## 1-2 SoftwareSerial
```cpp=
#include <SoftwareSerial.h>
SoftwareSerial portOne(10, 11);
SoftwareSerial portTwo(8, 9);
void setup() {
Serial.begin(9600);
while (!Serial) {;}
// Start each software serial port
portOne.begin(9600);
portTwo.begin(9600);
}
void loop() {
//---
portOne.listen();
Serial.println("Data from port one:");
// while there is data coming in, read it
// and send to the hardware serial port:
while (portOne.available() > 0) {
char inByte = portOne.read();
Serial.write(inByte);
}
Serial.println();
//---
portTwo.listen();
// while there is data coming in, read it
// and send to the hardware serial port:
Serial.println("Data from port two:");
while (portTwo.available() > 0) {
char inByte = portTwo.read();
Serial.write(inByte);
}
Serial.println();
}
```
- [SoftwareSerial](https://www.arduino.cc/en/Reference/SoftwareSerial)
-- [SoftwareSerialExample](https://www.arduino.cc/en/Tutorial/SoftwareSerialExample)
-- [TwoPortReceive](https://www.arduino.cc/en/Tutorial/TwoPortReceive)
- 中文
-- [软件模拟串口通信](https://www.arduino.cn/thread-47262-1-1.html)
-- [軟體串列埠](http://yhhuang1966.blogspot.com/2015/09/arduino.html)
# 2 //--- Timer
---
- `Timer ex1`
```c=
#include "Timer.h"
Timer t;
Timer t2;
Timer t3;
void setup(){
Serial.begin(9600);
int tickEvent = t.every(100, doSomething);
Serial.print("s1");
Serial.println(tickEvent);
tickEvent = t2.every(100, doSomething2);
Serial.print("s2");
Serial.println(tickEvent);
tickEvent = t3.every(100, doSomething3);
Serial.print("s3");
Serial.println(tickEvent);
}
void loop(){
t.update();
t2.update();
t3.update();
}
void doSomething(){
Serial.println("ds1");
}
void doSomething2(){
Serial.println("ds2");
}
void doSomething3(){
Serial.println("ds3");
}
```
- `Timer ex2`
```c=
#include "Timer.h"
Timer t;
int ledEvent;
void setup(){
Serial.begin(9600);
int tickEvent = t.every(2000, doSomething);
Serial.print("2 second tick started id=");
Serial.println(tickEvent);
pinMode(13, OUTPUT);
ledEvent = t.oscillate(13, 50, HIGH);
Serial.print("LED event started id=");
Serial.println(ledEvent);
int afterEvent = t.after(10000, doAfter);
Serial.print("After event started id=");
Serial.println(afterEvent);
}
void loop(){
t.update();
}
void doSomething(){
Serial.print("2 second tick: millis()=");
Serial.println(millis());
}
void doAfter(){
Serial.println("stop the led event");
t.stop(ledEvent);
t.oscillate(13, 500, HIGH, 5);
}
```
- [Arduino 入門教學:Timer 使用](https://lolikitty.pixnet.net/blog/post/168715383-arduino-%E5%85%A5%E9%96%80%E6%95%99%E5%AD%B8%EF%BC%9Atimer-%E4%BD%BF%E7%94%A8)
- [Arduino一個好用的計時器程式庫](http://yehnan.blogspot.com/2012/03/arduino.html)
- [arduino Timer 中文API解釋](http://tnuazyy.blogspot.com/2014/02/arduinotimer.html)
- [Arduino Timer Library](http://www.doctormonk.com/2012/01/arduino-timer-library.html)
- [JChristensen/Timer](https://github.com/JChristensen/Timer#installation)
## 2-1 Timer+function =>multithreading
## 2-2 Timer+SoftwareSerial =>multi Serial
## 2-3 Timer+GPIO =>Software外部中斷
## 2-4 其他(我沒用過)達到相同效果的 Timer lib
- [#include <SimpleTimer.h>](https://playground.arduino.cc/Code/SimpleTimer/#Usage)
- [#include "timer.h"
#include "timerManager.h"](https://github.com/brunocalou/Timer)
# 3 //--- 多設備&任務
---
- I2C ? SPI ?
- [RTOS](https://www.hackster.io/feilipu/using-freertos-multi-tasking-in-arduino-ebc3cc)
# 4 //--- 程式記憶體寫爆?
---
## 4-1 程式優化
- [F()](https://vmaker.tw/archives/13258)
- PROGMEM
-- [Arduino:關於記憶體之二三事](http://yehnan.blogspot.com/2013/08/arduino.html)
-- [Arduino 淺談記憶體](http://pizgchen.blogspot.com/2017/03/arduino-1.html)
## 4-2 EEPROM
### 內部 EEPROM
- [可讀寫任何資料的 EEPROM 函式](http://coopermaa2nd.blogspot.com/2011/03/eeprom.html)
- [自訂整組資料讀寫EEPROM](http://yehnan.blogspot.com/2014/03/arduinoeeprom.html)
### 外接 EEPROM
- [Arduino I2C 超頻 & I2C 外部擴充 EEPROM](http://blog.udn.com/awei0905/28767312)
- [AT24C256 EEPROM 儲存模組/記憶體模組 Arduino 擴充儲存記憶體專用](
https://www.taiwaniot.com.tw/product/at24c256-eeprom-%E5%84%B2%E5%AD%98%E6%A8%A1%E7%B5%84%E8%A8%98%E6%86%B6%E9%AB%94%E6%A8%A1%E7%B5%84-arduino-%E6%93%B4%E5%85%85%E5%84%B2%E5%AD%98%E8%A8%98%E6%86%B6%E9%AB%94%E5%B0%88%E7%94%A8/)
# 5 //--- Arduino Bootloader
---
- [將Bootloader寫進ATMega晶片](http://gcyrobot.blogspot.com/2011/06/diy-arduino-bootloaderatmega3.html)
- [Arduino bootloader 燒錄](https://iammic.pixnet.net/blog/post/63686476-arduino-bootloader-%E7%87%92%E9%8C%84)
- [ATmega328P 燒錄 Bootloader ](http://wyj-learning.blogspot.com/2018/11/arduino-08-atmega328p-bootloader.html)
- [自製 Arduino](http://www.powenko.com/wordpress/3-%E8%87%AA%E8%A3%BD-arduino-%E6%9D%BF%E5%AD%90/)