With this code I try to send a measurement over 443MHz using RadioHead. All parts work but when combined they fail. This chip used is an ATtiny85.
The function 'measure' torpedoes the entire program. If it is used, it will compile but it will never run Setup or Loop. I know this because I use a Logic Analyzer and Software Serial. I can see the Serial Port, PB1, hanging high.
I would like to know what is so wrong about function measure
that it undermines all code..
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <RH_ASK.h> // local libs at
#include <powernap.h> // /home/thijs/.platformio/lib
#define TICKLE_ID 192
#define SENSOR1_PIN 2
#define SENSOR1_PWR 4
#define SENSOR2_PIN -1
#define SENSOR2_PWR -1
#define SOFTWARE_SERIAL_TX_PIN 1
#define SOFTWARE_SERIAL_RX_PIN -1
#define RADIOHEAD_BAUD 2000
#define RADIOHEAD_TX_PIN 0
#define RADIOHEAD_RX_PIN -1
struct tickle {
uint16_t id = TICKLE_ID;
uint16_t value1;
uint16_t value2;
};
Napper napper;
SoftwareSerial mySerial(SOFTWARE_SERIAL_RX_PIN, SOFTWARE_SERIAL_TX_PIN);
RH_ASK driver(RADIOHEAD_BAUD, RADIOHEAD_RX_PIN, RADIOHEAD_TX_PIN);
void senddata(int hygro) {
mySerial.print("Senddata");
struct tickle package; // make a Tickle package
package.id = TICKLE_ID; // hard-coded device ID
package.value1 = 0; // any positive int up to 2^16
package.value2 = hygro; // any positive int up to 2^16
driver.send((uint8_t *)&package, sizeof(package));
driver.waitPacketSent(); // wait for it ~Barney
}
int measure() {
mySerial.print("Measure");
pinMode(SENSOR1_PWR, OUTPUT); // enable sensor
pinMode(SENSOR1_PWR, HIGH); // turn on sensor
delay(100); // wait for sensor to settle
int i; // int for counter
int data = 0; // data container
for (i = 0; i < 5; i++){ // cumulate 5 measurements
data = data + analogRead(SENSOR1_PIN);
}
data = data / 5; // avg of measurements
pinMode(SENSOR1_PWR, LOW); // turn off sensor
pinMode(SENSOR1_PWR, INPUT); // disable sensor
mySerial.print(data);
return data; // return avg measured value
}
void setup() {
mySerial.begin(600); // 600 baud serial
mySerial.print("Setup"); // logging the start
driver.init(); // initialize the RadioHead library
napper.setup_sleep(); // initialize the Napper library
}
void loop() {
mySerial.print("Loop"); // start of loop
int measurement = measure(); // measure data
senddata(measurement); // send data
napper.napminutes(1); // deep sleep for 1 minute
}
[EDIT]
I thought the problem to be this, and then to be that. This is how I debug, I start somewhere and work my way back. Currently it looks like my own library PowerNap is the culprit, I have tested with other Sleep code and it works. I can only be sure after more tests and isolated code running.