Der Code, den ich gerade ausführe, ist einfach
setup()
{
Serial.println("SET CONTROL CONFIG 103d");
}
loop()
{
Serial.println("SLEEP");
}
Ich habe aber auch den Befehl SLEEP im Setup ausprobiert und diesen Code in den ArduinoBT-Bootloader eingefügt. Ich habe den Arduino mehrere Stunden lang mit aktiviertem Ruhezustand belassen und es machte keinen Unterschied für den Verbrauch. Auch "SET CONTROL CONFIG 102d" ändert nichts. Vielleicht gebe ich die Befehle im Datenmodus aus? Ich verstehe, dass der Datenmodus ist, wenn eine Bluetooth-Verbindung besteht, und der Befehl, wenn keine Verbindung besteht, aber ich könnte mich irren.
Tut mir leid, dass ich so lange gebraucht habe, um meine Prüfungen und Ferien zu haben.
Mein Code hat sich schließlich so entwickelt:
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);
}
Was nicht funktioniert (YAY!)
Ich habe dann hier einen Code gefunden, der eine erfolgreiche iWRAP-Kommunikation hatte. Ich habe ihn so geändert, dass er den gewünschten iWRAP enthält. Ich habe mit "INFO" begonnen und herausgefunden, dass die Version von iWRAP (WRAP THOR AI 2.2.0 Build 60) das richtige Datenblatt erhalten hat Deepsleep war eine Funktion des Moduls und Sie konnten es mit dem Befehl "TEST DEEPSLEEP" testen. Ich habe diesen Befehl benutzt und das Board hat geschlafen! Ich denke ... der Strom lag bei ungefähr 36 mA, was höher ist als bei normaler, nicht verbundener Nutzung, aber das Board war nicht kommunizierbar. Der Test ergab ein OK, daher bin ich zuversichtlich, dass ich das Board jetzt schlafen lassen kann. Leider scheint die Ausgabe des Befehls "SLEEP" nichts zu bewirken, obwohl ich nicht weiß, ob meine anfänglichen Setup-Befehle noch ausgegeben werden.
Jedenfalls ist hier der (kaum) modifizierte Code, den ich jetzt verwende. Führen Sie es im Grunde aus, geben Sie "&" in den seriellen Monitor ein und es wechselt in den Befehlsmodus und gibt die Befehle aus, die Sie in den Code eingegeben haben. Geben Sie "@" ein und Sie erfahren die Antwort auf diese Befehle.
#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 epische Bearbeitung! Vielen Dank für Ihre Hilfe, es war von unschätzbarem Wert für meine Reise :)
Das Datenblatt für das BlueGiga-Modul gibt einen durchschnittlichen Versorgungsstrom von 1,5 mA an, wenn das Modul im Leerlauf ist und Deep Sleep eingeschaltet ist. Die ArduinoBT-Seite enthält zwar nur wenige Details, impliziert jedoch, dass der ArduinoBT alle Konfigurationsmodi unterstützt, zu denen die BlueGiga in der Lage ist, und das Datenblatt auf der BlueGiga-Website gibt an, dass sie den Deep Sleep-Modus unterstützt. Ich bezweifle, dass der Arduino im Leerlauf 28,5 mA verbraucht. Wenn Sie also nichts anderes in der Schaltung haben, ist es wahrscheinlich irgendwo im Code. Würden Sie Ihren Code und Ihren Schaltplan zur weiteren Überprüfung veröffentlichen?
---BEARBEITEN---
Ich habe etwas weiter in das iWire-Dokument geschaut, das ich im Kommentar unten verlinkt habe. Ihr Verständnis scheint korrekt zu sein, aber es gibt eine Überschreibung, um den Befehlsmodus zu erzwingen: Geben Sie das Escape-Zeichen dreimal aus (siehe Seite 15). Haben Sie versucht, drei Escape-Zeichen auszugeben? Auf Seite 15 steht auch das
Hören Sie auf READY-Events? Auf Seite 23 scheint es beispielsweise so zu sein, dass READY über die serielle Schnittstelle ausgegeben wird und Sie leicht darauf warten können.
Ich werde Sie auch fragen, ob Sie Ihren Setup- und Verbindungscode überprüft haben. Beispielsweise muss die serielle Kommunikation mit dem BT-Modul mit 115200 Bit / s erfolgen ( http://www.arduino.cc/en/Guide/ArduinoBT ). Ich habe diese Zeile in Ihrem Setup-Code nicht gesehen, aber Sie könnten versuchen, sie hinzuzufügen
vor der println-Anweisung in Ihrer setup () -Methode. Sie sagten, dass Sie den gesamten Code gepostet haben, daher ist dies wahrscheinlich das erste, was ich versuchen würde. Wenn Sie die Baudrate nicht richtig einstellen, senden Sie nur Müll. Halten uns auf dem Laufenden!
quelle