Why does my sketch stop after a custom void?


hello all!  have knock sensor keep attached door.  uses piezo element detect knocks , rf transmitter beam code when knock detected.  can see in code block under "// voltmeter", updates every 10 minutes.  #1 below verified working properly.  #2 has issues once gets batterylevel().  instead of going through entire block of code in #1, custom "void batterylevel()" called can see.  once interval reached in #2 , batterylevel() triggered, rf transmitter no longer transmits upon detecting knock (even though still detects knocks , executes "serial.println(sensorreading)").  why happen?  thanks!

#1
code: [select]
const int knocksensor = a6;
const int threshold = 1;
int sensorreading = 0;

#include <rcswitch.h>
rcswitch myswitch = rcswitch();

// voltmeter
float vpow = 5.21;
float r1 = 100000;
float r2 = 10000;
long previousmillis = 0;
long interval = 600000;

// rgb led
int redpin = 7;
int greenpin = 6;
int bluepin = 5;
#define common_anode

void setcolor(int red, int green, int blue)
{
  #ifdef common_anode
    red = 255 - red;
    green = 255 - green;
    blue = 255 - blue;
  #endif
  analogwrite(redpin, red);
  analogwrite(greenpin, green);
  analogwrite(bluepin, blue); 
}

void setup() {
  serial.begin(9600);
  myswitch.enabletransmit(3);

  pinmode(redpin, output);
  pinmode(greenpin, output);
  pinmode(bluepin, output);

  float v = (analogread(7) * vpow) / 1024.0;
  float v2 = v / (r2 / (r1 + r2));
  char battery[7];
  dtostrf(v2,7,1,battery);
  serial.println(v2);
  if (v2 > 7.5) {
    setcolor(0,130,0);
  }
  else if (v2 >= 7.1 && v2 < 7.4) {
    setcolor(128,120,0);
  }
  else if (v2 <= 7.0) {
    setcolor(128,0,0);
  }
}

void loop() {
  unsigned long currentmillis = millis();
  if(currentmillis - previousmillis > interval) {
    // save last time blinked led
    previousmillis = currentmillis;
    float v = (analogread(7) * vpow) / 1024.0;
    float v2 = v / (r2 / (r1 + r2));
    char battery[7];
    dtostrf(v2,7,1,battery);
    serial.println(v2);
    if (v2 > 7.5) {
      setcolor(0,130,0);
    }
    else if (v2 >= 7.1 && v2 < 7.4) {
      setcolor(128,120,0);
    }
    else if (v2 <= 7.0) {
      setcolor(128,0,0);
    }
  }
 
  sensorreading = analogread(knocksensor);
  if (sensorreading >= threshold) {
    serial.println("knock!");
    serial.println(sensorreading);
    myswitch.send(127001, 24);
    delay(1000);  // have make delay avoid overloading serial port
  }

   
}


#2
code: [select]
// #include <lowpower.h>

const int knocksensor = a6;
const int threshold = 1;
int sensorreading = 0;

#include <rcswitch.h>
rcswitch myswitch = rcswitch();

// voltmeter
float vpow = 5.21;
float r1 = 100000;
float r2 = 10000;
long previousmillis = 0;
long interval = 600000;

// rgb led
int redpin = 7;
int greenpin = 6;
int bluepin = 5;
#define common_anode

void setcolor(int red, int green, int blue)
{
  #ifdef common_anode
    red = 255 - red;
    green = 255 - green;
    blue = 255 - blue;
  #endif
  analogwrite(redpin, red);
  analogwrite(greenpin, green);
  analogwrite(bluepin, blue); 
}

void batterylevel() {
  float v = (analogread(7) * vpow) / 1024.0;
  float v2 = v / (r2 / (r1 + r2));
  char battery[7];
  dtostrf(v2,7,1,battery);
  serial.println(v2);
  if (v2 > 7.5) {
    setcolor(0,130,0);
  }
  else if (v2 >= 7.1 && v2 < 7.4) {
    setcolor(128,120,0);
  }
  else if (v2 <= 7.0) {
    setcolor(128,0,0);
  }
}

void setup() {
  serial.begin(9600);
  myswitch.enabletransmit(3);

  pinmode(redpin, output);
  pinmode(greenpin, output);
  pinmode(bluepin, output);

  batterylevel();
}

void loop() {
  unsigned long currentmillis = millis();
  if(currentmillis - previousmillis > interval) {
    previousmillis = currentmillis;
    batterylevel();
  }
 
  sensorreading = analogread(knocksensor);
  if (sensorreading >= threshold) {
    //serial.println("knock!");
    serial.println(sensorreading);
    myswitch.send(127001, 24);
    delay(500);  // have make delay avoid overloading serial port
    //lowpower.powerdown(sleep_60ms, adc_on, bod_on);
  }

   
}

#1 works fine , have no problem using sketch instead.  vaguely recall having issue in sketch had custom "void something()" (replace "something" actual command).  means i'm continuously doing wrong i'd learn future sketches can execute "void something()" properly.


Arduino Forum > Using Arduino > Programming Questions > Why does my sketch stop after a custom void?


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor