delay between rf433ctl commands that works
[svn42.git] / rf433ctl / rf433ctl.pde
index b1aca33..7c327d3 100644 (file)
 #define ONE_WIRE_PIN 8
 #define PANIC_BUTTON_PIN 7
 #define BLUELED_PWM_PIN 6
-#define BLUELED2_PWM_PIN 10
+#define BLUELED2_PWM_PIN 11
 #define PHOTO_ANALOGPIN 0
 //movement is reported if during IR_SAMPLE_DURATION at least IR_TRESHOLD ir signals are detectd
-#define IR_SAMPLE_DURATION 15000
+#define IR_SAMPLE_DURATION 12000
 #define IR_TRESHOLD 10000
 //duration PanicButton needs to be pressed before status change occurs (i.e. for two PanicButton Reports, the buttons needs to be pressed 1000 cycles, releases 1000 cycles and again pressed 1000 cycles)
 #define PB_TRESHOLD 1000
@@ -23,7 +23,7 @@
 OneWire  onewire(ONE_WIRE_PIN);
 DallasTemperature dallas_sensors(&onewire);
 DeviceAddress onShieldTemp = { 0x10, 0xE7, 0x77, 0xD3, 0x01, 0x08, 0x00, 0x3F };
-#define TEMPC_OFFSET_ARDUINO_GENEREATED_HEAT -4.0
+#define TEMPC_OFFSET_ARDUINO_GENEREATED_HEAT 
 
 typedef struct {
   byte offset;
@@ -141,9 +141,9 @@ void init_word(const word_t w)
   bit_cnt = 0;
 
   if(bit_defs[current_word[bit_cnt]][chunk_cnt].state)
-    digitalWrite(RF_DATA_OUT_PIN, HIGH);
+    digitalWrite(RF_DATA_OUT_PIN, LOW); //neue 12V MosFET Verstärkung invertiert Logik !
   else
-    digitalWrite(RF_DATA_OUT_PIN, LOW);
+    digitalWrite(RF_DATA_OUT_PIN, HIGH);
 
   start_timer();
 }
@@ -157,9 +157,9 @@ ISR(TIMER1_COMPA_vect)
   chunk_cnt++;
   if(bit_defs[current_word[bit_cnt]][chunk_cnt].offset != 0) {
     if(bit_defs[current_word[bit_cnt]][chunk_cnt].state)
-      digitalWrite(RF_DATA_OUT_PIN, HIGH);
+      digitalWrite(RF_DATA_OUT_PIN, LOW); //neue 12V MosFET Verstärkung invertiert Logik !
     else
-      digitalWrite(RF_DATA_OUT_PIN, LOW);
+      digitalWrite(RF_DATA_OUT_PIN, HIGH);
     return;
   }
   
@@ -168,19 +168,19 @@ ISR(TIMER1_COMPA_vect)
     alpha_cnt = 0;
     chunk_cnt = 0;
     if(bit_defs[current_word[bit_cnt]][chunk_cnt].state)
-      digitalWrite(RF_DATA_OUT_PIN, HIGH);
+      digitalWrite(RF_DATA_OUT_PIN, LOW); //neue 12V MosFET Verstärkung invertiert Logik !
     else
-      digitalWrite(RF_DATA_OUT_PIN, LOW);
+      digitalWrite(RF_DATA_OUT_PIN, HIGH);
     return;
   }
   stop_timer();
-  digitalWrite(RF_DATA_OUT_PIN, LOW);
+  digitalWrite(RF_DATA_OUT_PIN, HIGH);
 
   word_cnt++;
   if(word_cnt < FRAME_LEN)
     init_word(current_word);
-
-  frame_finished = 1;
+  else
+    frame_finished = 2;
 }
 
 //***********//
@@ -188,15 +188,25 @@ ISR(TIMER1_COMPA_vect)
 
 void send_frame(const word_t w)
 {
+  if (frame_finished == 0)
+    for(;;)
+      if (frame_finished)
+      {
+        delay(150);
+        break;
+      }
   word_cnt = 0;
   frame_finished = 0;
-  init_word(w);
-
-  for(;;)
-    if(frame_finished)
-      break;
+  init_word(w);      
+}
 
-  Serial.println("Ok");
+void check_frame_done()
+{
+  if (frame_finished==2)
+  {
+    Serial.println("Ok");
+    frame_finished=1;
+  }
 }
 
 //********************************************************************//
@@ -205,7 +215,7 @@ void printTemperature(DeviceAddress deviceAddress)
 {
   dallas_sensors.requestTemperatures();
   float tempC = dallas_sensors.getTempC(deviceAddress);
-  Serial.print("Temp C: ");
+  //Serial.print("Temp C: ");
   Serial.println(tempC TEMPC_OFFSET_ARDUINO_GENEREATED_HEAT);
   //Serial.print(" Temp F: ");
   //Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
@@ -228,15 +238,15 @@ void updateLightLevel(unsigned int pin)
     return;
   
   unsigned int diff = abs(value - light_level_mean_);
-  if (light_level_mean_ < 6 || diff > 250)
+  if (diff > 100)
     light_level_mean_ = value;
   else
-      light_level_mean_=(unsigned int) ( ((float) light_level_mean_) * 0.98 + ((float)value)*0.02 );
+      light_level_mean_=(unsigned int) ( ((float) light_level_mean_) * 0.90 + ((float)value)*0.10 );
 }
 
 void printLightLevel()
 {
-  Serial.print("Photo: ");
+  //Serial.print("Photo: ");
   Serial.println(light_level_mean_);
 }
 
@@ -274,13 +284,13 @@ void calculate_led_level(unsigned int pwm_pin)
   flash_led_time_--;
   int c = abs(sin(float(flash_led_time_) / 100.0)) * flash_led_brightness_;
   //int d = abs(sin(float(flash_led_time_) / 100.0)) * flash_led_brightness_;
-  analogWrite(BLUELED2_PWM_PIN,255-c);
+  analogWrite(BLUELED2_PWM_PIN, 255-c);
   if (flash_led_brightness_ == 255)
   {
     if (flash_led_time_)
-      analogWrite(BLUELED_PWM_PIN,255-c);
+      analogWrite(BLUELED_PWM_PIN, 255-c);
     else
-      analogWrite(BLUELED_PWM_PIN,c);
+      analogWrite(BLUELED_PWM_PIN, c);
   }
 }
 
@@ -300,7 +310,7 @@ void flash_led(unsigned int times, unsigned int brightness_divisor, unsigned int
 void setup()
 {
   pinMode(RF_DATA_OUT_PIN, OUTPUT);
-  digitalWrite(RF_DATA_OUT_PIN, LOW);
+  digitalWrite(RF_DATA_OUT_PIN, HIGH);
   pinMode(IR_MOVEMENT_PIN, INPUT);      // set pin to input
   digitalWrite(IR_MOVEMENT_PIN, LOW);  // turn off pullup resistors  
   pinMode(PANIC_BUTTON_PIN, INPUT);      // set pin to input
@@ -372,6 +382,7 @@ void loop()
   
   updateLightLevel(PHOTO_ANALOGPIN);
   calculate_led_level(BLUELED_PWM_PIN);
+  check_frame_done();
   
   if(Serial.available()) {
     char command = Serial.read();