Mã tôi đang chạy hiện tại chỉ là
setup()
{
Serial.println("SET CONTROL CONFIG 103d");
}
loop()
{
Serial.println("SLEEP");
}
nhưng tôi cũng đã thử lệnh SLEEP trong thiết lập và đưa mã này vào bộ tải khởi động ArduinoBT. Tôi rời khỏi Arduino với chế độ ngủ được kích hoạt trong vài giờ và nó không có gì khác biệt so với mức tiêu thụ, cũng như "SET CONTROL CONFIG 102d" không tạo ra bất kỳ thay đổi nào. Có lẽ tôi đang ban hành các lệnh trong chế độ dữ liệu? Tôi hiểu rằng chế độ dữ liệu là khi có kết nối Bluetooth và lệnh là khi không có kết nối nhưng tôi có thể bị nhầm.
Xin lỗi tôi đã mất quá lâu để có kỳ thi và ngày lễ của tôi.
Mã của tôi cuối cùng đã phát triển thành một cái gì đó như thế này:
int input = 0;
int resetPin = 7;
int ledPin = 13;
void setup()
{
pinMode(resetPin, OUTPUT);
Serial.begin(115200);
Serial.println("SET CONTROL ESCAPE 43 00 0");
Serial.println("SET CONTROL CONFIG 103D");
digitalWrite(ledPin, HIGH);
}
void loop()
{
if (!input)
{
delay(2000);
Serial.print("+++");
delay(2000);
Serial.println("TEST DEEPSLEEP");
delay(10000);
Serial.print("+++");
delay(2000);
input = 1;
digitalWrite(ledPin, LOW);
}
Mà không hoạt động (YAY!)
Sau đó tôi đã tìm thấy một số mã ở đây đã giao tiếp iWRAP thành công, tôi đã sửa đổi nó để bao gồm iWRAP tôi muốn, bắt đầu với "INFO" và tìm ra phiên bản iWRAP (WRAP THOR AI 2.2.0 build 60) có được biểu dữ liệu chính xác được tìm thấy ngủ sâu là tính năng của mô-đun và bạn có thể kiểm tra nó bằng lệnh "TEST DEEPSLEEP". Tôi đã sử dụng lệnh đó và bảng đã ngủ! Tôi nghĩ rằng ... hiện tại ngồi ở khoảng 36mA, cao hơn so với sử dụng không kết nối bình thường nhưng bảng không thể truyền thông. Bài kiểm tra đã trả lại OK vì vậy tôi tự tin rằng tôi có thể làm cho bảng ngủ ngay bây giờ. Thật không may, việc ban hành lệnh "SLEEP" dường như không làm gì cả, mặc dù tôi không biết liệu các lệnh thiết lập ban đầu của mình đã được ban hành chưa.
Anyhoo ở đây là mã sửa đổi (hầu như) tôi đang sử dụng. Về cơ bản chạy nó sau đó nhập "&" vào màn hình nối tiếp và nó chuyển sang chế độ lệnh và đưa ra các lệnh bạn đặt trong mã, nhập "@" và nó cho bạn biết phản ứng với các lệnh đó.
#include <EEPROM.h>
int ledPin = 13; // LED connected to digital pin 13
int resetPin = 7; // BT module uses pin 7 for reset
char inByte = 0; // incoming serial byte
int infoSize = 0 ;
void setup() // run once, when the sketch starts
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(resetPin, OUTPUT);
Serial.begin(115200); // start serial at 115200 kbs
Serial.println("SET CONTROL ESCAPE 43 00 0");
Serial.println("SET CONTROL CONFIG 103D");
}
void loop()
{
// if we get a valid byte, read analog ins:
if (Serial.available() > 0) {
inByte = getbyte(); // get incoming byte
if (inByte == '&' ) { // look for a &
Serial.print("Got an & ");
infoSize = getInfo();
Serial.println("Done");
}
else if (inByte == '@' ) { // look for a 0
digitalWrite(ledPin, LOW); // set led LOW
Serial.print("Get string: ");
for(int i=0;i<infoSize;i++)
{
Serial.print(EEPROM.read(i));
}
Serial.println();
Serial.print("Cleared string size: ");
Serial.println(infoSize);
}
}
}
int getInfo()
{
int j=0;
digitalWrite(ledPin, HIGH); // set led HIGH
delay(2000);
Serial.print("+++");
delay(2000);
Serial.println("SLEEP"); //THIS IS WHERE YOU ENTER THE COMMANDS
//"INFO" and "TEST DEEPSLEEP" are both successful
//"SLEEP" isn't successful yet
for (int i=0; i <= 10; i++){
delay(1000);
while (Serial.available() > 0 && j <512) {
inByte = getbyte(); // get incoming byte
EEPROM.write(j, inByte);
j++;
}
delay(1000);
}
delay(2000);
Serial.print("+++");
delay(2000);
digitalWrite(ledPin, LOW); // set led low
return j;
}
char getbyte()
{
while (Serial.available() == 0) { //look for aviable data
// do nothing, wait for incoming data
}
return Serial.read(); //return data if aviable
}
Yay sử thi chỉnh sửa! Cảm ơn rất nhiều vì sự giúp đỡ của bạn, nó là vô giá đối với hành trình của tôi :)