A report of the status that probably is the final solution for me. Pulsing at a rate of 100Hz drawing 5/270 Amps, 18.5 mA, makes the power bank supply power until being realy close to empty. Look at the very beginning of loop().
#include<arduino.h>
#include <SMT172.h>
//I2C for LCD
//boolean debug = false;
//#include <SoftwareSerial.h>
#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>
//#define BACKLIGHT_PIN 13
hd44780_I2Cexp mylcd; // declare lcd object: auto locate & config exapander chip
// LCD geometry
#define LCD_COLS 16
#define LCD_ROWS 2
// The TinyGPS++ object
uint32_t LastSensorUpdate;
unsigned long sec_1_diff_measure_time;
unsigned long sec_10_diff_measure_time;
unsigned long minute_1_diff_measure_time;
unsigned long minute_10_diff_measure_time;
float sec_1_diff_measure_data = -1.1;
float sec_10_diff_measure_data = -1.1;
float minute_1_diff_measure_data = -1.1;
float minute_10_diff_measure_data = -1.1;
//The setup function is called once at startup of the sketch
void setup() {
// unsigned long tmp_millis = 0L;
pinMode(8, INPUT_PULLUP);
pinMode(12, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);//+5 to measuring UNO
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);//+5 to measuring UNO
Serial.begin(115200);
Serial.println(F("Temperature sketch SMT172"));
// The following code fragment sets up phase-correct PWM on pins 3 and 11 (Timer 2).
// The waveform generation mode bits WGM are set to to 001 for phase-correct PWM.
// The other bits are the same as for fast PWM.
// pinMode(3, OUTPUT);
// pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
// TCCR2B = _BV(CS22); // Output frequency: 16 MHz / 64 / 255 / 2 = 490.196 Hz
TCCR2B = _BV(CS21); // Output frequency: 16 MHz / 8 / 255 / 2 = 3921.569 Hz
OCR2A = 237; // Output A duty cycle: 237 / 255 = 92.94% = 129.58 C on pin 11
OCR2B = 28; // Output B duty cycle: 28 / 255 = 10.98% = -45.06 C on pin 3
//Send temp via I2C to LCD
int status;
status = mylcd.begin(LCD_COLS, LCD_ROWS);
if (status) // non zero status means it was unsuccesful
{
status = -status; // convert negative status value to positive number
// begin() failed so blink error code using the onboard LED if possible
hd44780::fatalError(status); // does not return
}
mylcd.clear();
// initalization was successful, the backlight should be on now
// Print start message to the LCD
mylcd.print("Started");
sec_1_diff_measure_time = /*tmp_millis + */1000;
sec_10_diff_measure_time = /*tmp_millis + */10000;
minute_1_diff_measure_time = /*tmp_millis + */60000;
minute_10_diff_measure_time = /*tmp_millis + */600000;
}
// The loop function is called in an endless loop
void loop()
{
float tmp_temp;
unsigned long mill_tmp;
if ((millis() % 10) > 8)//75% > 1/4
{//waist 5/270 Amp = 18.5 mA
digitalWrite(3, LOW);
// digitalWrite(4, LOW);
// digitalWrite(5, LOW);
}
else
{
digitalWrite(3, HIGH);
// digitalWrite(4, HIGH);
// digitalWrite(5, HIGH);
}
// read the sensor every 250 millisecond
if ((unsigned long) (millis() - LastSensorUpdate) >= 500)
{
LastSensorUpdate = millis();
SMT172::startTemperature(0.002);
repeat:
switch (SMT172::getStatus()) {
case 0: goto repeat; // O Dijkstra, be merciful onto me, for I have sinned against you :)
case 1:
// Serial.print(F("Measuring time [ms]: "));
// Serial.println(SMT172::getTime() * 1e3, 2); // convert to milliseconds
// Serial.print(F("Sensor frequency [Hz]: "));
// Serial.println(SMT172::getFrequency(), 2);
// Serial.print(F("Duty cycle [%]: "));
// Serial.println(SMT172::getDutyCycle() * 100, 2);
tmp_temp = SMT172::getTemperature();
mill_tmp = millis();
// Serial.print(F("Temperature [C]: "));
// Serial.println(tmp_temp, 2);
mylcd.setCursor(0, 0);
mylcd.print(tmp_temp, 2);
// mylcd.print(F(" [C]"));
mylcd.print(" [C]");
/* if (tmp_temp > 30.0 )
{
Serial.println(tmp_temp);
mylcd.setCursor(0, 0);
mylcd.print(F("Err. [C]: "));
mylcd.print(tmp_temp, 4);
}
*/
if (sec_1_diff_measure_data < 0.0)//Initiate
{
sec_1_diff_measure_data = tmp_temp;
sec_10_diff_measure_data = tmp_temp;
minute_1_diff_measure_data = tmp_temp;
minute_10_diff_measure_data = tmp_temp;
sec_1_diff_measure_time = mill_tmp + 1000;
sec_10_diff_measure_time = mill_tmp + 10000;
minute_1_diff_measure_time = mill_tmp + 60000;
minute_10_diff_measure_time = mill_tmp + 600000;
}
else
{
if (mill_tmp > sec_1_diff_measure_time )
{
// Serial.print("1 Sec value "); Serial.print(tmp_temp);Serial .print(" ");Serial.println(mill_tmp/1000);
sec_1_diff_measure_time = mill_tmp + 1 * 1000;//Set next measure time
mylcd.setCursor(10, 0); mylcd.print(" ");
mylcd.setCursor(10, 0); mylcd.print(tmp_temp - sec_1_diff_measure_data, 2); // mylcd.print(" ");
sec_1_diff_measure_data = tmp_temp;
}
if (mill_tmp > sec_10_diff_measure_time )
{
Serial.print("10 Sec value "); Serial.print(tmp_temp); Serial .print(" "); Serial.println(mill_tmp / 1000);
sec_10_diff_measure_time = mill_tmp + 10 * 1000;//Set next measure time
mylcd.setCursor(0, 1); mylcd.print(" ");
mylcd.setCursor(0, 1); mylcd.print(tmp_temp - sec_10_diff_measure_data, 2);// mylcd.print(" ");
sec_10_diff_measure_data = tmp_temp;
}
if (mill_tmp > minute_1_diff_measure_time )
{
Serial.print("1 Min value "); Serial.print(tmp_temp); Serial .print(" "); Serial.println(mill_tmp / 1000);
minute_1_diff_measure_time = mill_tmp + 60000;//Set next measure time
mylcd.setCursor(6, 1); mylcd.print(" ");
mylcd.setCursor(6, 1); mylcd.print(tmp_temp - minute_1_diff_measure_data, 2);// mylcd.print(" ");
minute_1_diff_measure_data = tmp_temp;
}
if (mill_tmp > minute_10_diff_measure_time )
{
Serial.print("10 Min value "); Serial.print(tmp_temp); Serial .print(" "); Serial.println(mill_tmp / 1000);
minute_10_diff_measure_time = mill_tmp + 600000;//Set next measure time
mylcd.setCursor(12, 1); mylcd.print(" ");
mylcd.setCursor(12, 1); mylcd.print(tmp_temp - minute_10_diff_measure_data, 1);// mylcd.print(" ");
minute_10_diff_measure_data = tmp_temp;
}
}
// mylcd.setCursor(0, 3); mylcd.print(mill_tmp / 1000); mylcd.print(" "); mylcd.print(minute_1_diff_measure_time / 1000);
// mylcd.setCursor(16, 3); mylcd.print(mill_tmp / 1000);
// Serial.print(F("Error [mK]: "));
// Serial.println(SMT172::getError() * 1000, 2);
// Serial.println();
break;
case 2: Serial.println(F("**** Sensor disconnected ****"));
Serial.println();
}
// delay(500);
}
}