/*
驗證和驗證 SI4735 Arduino 函式庫以及 ESP32。
請注意:在測試期間,避免使用連接到市電的電腦。
使用此草圖的主要優點是:
1) 這是檢測您的電路是否正常運作的簡單方法。
2) 您不需要連接任何顯示設備,才能讓您的無線電正常工作。
3) 您不需要連接任何按鈕或編碼器來調整音量和頻率。
4) 您只需要使用 Arduino IDE 就可以控制無線電。
此設計已成功在以下環境中進行測試:
1) Pro Mini 3.3V;
2) 使用電壓轉換器(UNO)
3) Arduino Yún;
4) 使用電壓轉換器,連接 Arduino Mega。
5) ESP32 (LOLIN32 WEMOS)
| Si4732 | Function | ESP LOLIN32 WEMOS (GPIO) |
| 針 09 | RESET | 42 (GPIO12) |
| 第 12 腳 | SDIO | 15 (SDA / GPIO15) |
| 第 11 針 | SCLK | 16 (SCL / GPIO16) |
我強烈建議您從這個草稿開始。
原型文件說明: https://pu2clr.github.io/SI4735/
PU2CLR Si47XX API 文件: https://pu2clr.github.io/SI4735/extras/apidoc/html/
作者:里卡多·利馬·卡阿蒂,2019年11月。
*/
包含<Arduino.h>
包含<Wire.h>
包含<SI4735.h>
```cpp
#define RESET_PIN 42 // 使用 GPIO12
```
```
#define TOUCH_BAND_BUTTON_UP 13 // 下一個頻段
``` (GPIO13)
```
#define TOUCH_BAND_BUTTON_DOWN 14 // 前一組按鈕
``` (GPIO14)
// ESP32 的 I2C 總線上的引腳
```
#define ESP32_I2C_SDA 15 // 使用 GPIO21
```
#define ESP32_I2C_SCL 16 // 使用 GPIO22 連線 I2C 的 SCL 線
#define 容積 30
#定義 AM_FUNCTION 為 1
#define FM_FUNCTION 0
uint16\_t 目前頻率;
uint16\_t 之前的頻率;
uint8_t bandwidthIdx = 0;
const char *bandwidth[] = {“6”, “4”, “3”, “2”, “1”, “1.8”, “2.5”};
SI4735,si4735;
void showHelp()
{
使用 Serial.println() 輸出:「請輸入 F 以進行 FM 頻率;A 以進行 MW 頻率;L 以進行 LW 頻率;以及 1 以進行 SW 頻率」
使用 "U" 鍵增加頻率,使用 "D" 鍵減少頻率。
Serial.println("請輸入 S 或 s,以尋找上或下站");
使用 Serial.println("按下 + 或 - 按鍵來調整音量")
使用 Serial.println("輸入 0 以顯示目前狀態")。
使用 Serial.println("輸入 'B' 來更改頻寬過濾器")
使用 `Serial.println("Type ? to this help.");`。
Serial.println("==================================================");
delay(1000);
}
// 顯示目前頻率
void showStatus()
{
si4735.getStatus();
si4735.取得接收到的訊號品質。
`Serial.print("您已設定為:");`
如果 (si4735.isCurrentTuneFM() 為 true)
{
使用 `Serial.print()` 輸出 (當前頻率 / 100.0) 的字串,小數後保留兩位。
輸出:`Serial.print("MHz ");`
Serial.print((si4735.getCurrentPilot()) ? "STEREO" : "MONO");
}
else
{
使用 `Serial.print(currentFrequency);` 輸出當前的頻率。
輸出「kHz」
}
`Serial.print(" [SNR:`
使用 `Serial.print(si4735.getCurrentSNR());` 輸出目前的 SNR 值。
輸出「dB」
`Serial.print(" 訊號:");`
使用 `Serial.print(si4735.getCurrentRSSI())` 輸出當前的 RSSI 值。
Serial.println("dBuV]");
}
int touchUp, touchDown;
int readX(int pin) {
整數型變數 val;
val = 0;
對於 (int i = 0; i < 50;i++ )
val += touchRead(pin);
返回 (val / 50);
}
void setup()
{
Serial.begin(115200);
當 Serial 為 false 時,執行以下程式碼。
digitalWrite(RESET\_PIN, HIGH);
Serial.println("AM 和 FM 頻道調整測試。");
顯示說明。
// 下面的程式碼可能需要設定 ESP32 的 I2C 引腳。
Wire.setPins(ESP32_I2C_SDA, ESP32_I2C_SCL);
Wire.開始();
delay(500);
si4735.setup(RESET_PIN, 0, FM_FUNCTION, SI473X_ANALOG_AUDIO, 1, 0);
// 啟動預設的無線電功能和頻段(FM;範圍為 84 到 108 مي赫茲; 103.9 مي赫茲;步長為 100 kHz)
si4735.setFM(8400, 10800, 10390, 10);
delay(500);
目前的頻率 = 之前的頻率 = si4735.getFrequency();
si4735.setVolume(55);
顯示狀態。
}
// 主要
void loop()
{
touchUp = readX(TOUCH_BAND_BUTTON_UP);
touchDown = readX(TOUCH_BAND_BUTTON_DOWN);
如果 (Serial.available()) > 0)
{
字串變數 key 儲存從序列埠讀取的資料。
切換 (按鍵)
{
情況:+
si4735.音量增加();
停止;
情況:-
將音量降低。
停止;
情況:'a'
情況:'A'
si4735.setAM(570, 1710, 810, 10);
停止;
情況:'f'
情況:'F'
設定 si4735 為 8600、10800、10390 和 10 頻率。
停止;
情況:'1'
si4735.setAM(9400, 9990, 9600, 5);
停止;
情況:'U'
情況:'u'
設定頻率為 si4735。
停止;
情況:'D'
情況:'d'
設定頻率降低。
停止;
情況:'b'
情況:'B'
如果 `si4735` 的 `isCurrentTuneFM()` 方法返回 true。
{
Serial.println("不適用於 FM");
}
else
{
如果 (bandwidthIdx > 6)
bandwidthIdx = 0;
si4735.設定頻寬 (bandwidthIdx, 1);
`Serial.print("過濾器 - 頻寬: ")`
使用 `Serial.print()` 函數,將 `bandwidth` 陣列中的特定索引 (`bandwidthIdx`) 處的值轉換為字串後輸出。
Serial.println(" 千赫茲");
bandwidthIdx++;
}
停止;
情況:'S'
si4735.seekStationUp();
停止;
情況:'s'
si4735.停止尋找站點。
停止;
情況:'0'
顯示狀態。
停止;
情況:'?
顯示說明。
停止;
預設值:
停止;
}
} 否則,如果 (touchUp < (電容值) ) // 前進到下一個頻段
{
si4735.seekStationUp();
delay(100);
}
否則,如果 (touchDown < 電容值) ) // 返回上一頻段
{
si4735.停止尋找站點。
delay(100);
}
delay(100);
當前頻率 = si4735.getCurrentFrequency();
如果 (當前頻率 ≠ 上次頻率)
{
先前頻率 = 當前頻率;
顯示狀態。
delay(300);
}
}