X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=rpi_promini%2Frpi_promini.ino;h=38d318df460b4898c64d8afedcf9600c09023609;hb=3f119f62c021a7576f999a2acd1aed430d7bf3ad;hp=1adbd5c23d1e0031b1285c03230098e8d594322a;hpb=a34d78138f1309c90eaa9c1c3a3defd3e90e7e64;p=Arduino diff --git a/rpi_promini/rpi_promini.ino b/rpi_promini/rpi_promini.ino index 1adbd5c..38d318d 100644 --- a/rpi_promini/rpi_promini.ino +++ b/rpi_promini/rpi_promini.ino @@ -5,16 +5,16 @@ RPI pin Arduino RXD TXD TXD RXD - GPIO6 RST + BCM25 RST GND GND +5V RAW 2 433Mhz receive // 3 433Mhz outdoor temperature sensor receiver # DISABLED - 8 DHT22 + 8 DHT22 (VCC from arduino VCC) 10 433Mhz send 11 DS18B20 - 12 513Mhz send + 12 315Mhz send 13 status LED */ @@ -31,17 +31,19 @@ OneWire oneWire(11); DallasTemperature sensors(&oneWire); -// 513Mhz light sockets +// 315Mhz light sockets #define TX_PIN 12 #define LED_PIN 13 +#define LED_ON digitalWrite(LED_PIN, HIGH); +#define LED_OFF digitalWrite(LED_PIN, LOW); int int_0 = 300; // ms int int_1 = 900; // ms int wait = 2000; // ms -int repeat = 10; // times (5 times seem a little low for sensors which are more than 10m away) +int repeat = 20; // times (5 times seem a little low for sensors which are more than 10m away) -void send_513(char *code) { - Serial.print("send 513Mhz "); +void send_315(char *code) { + Serial.print("send 315Mhz "); Serial.println(code); // we have to send same signal at least two times @@ -62,10 +64,11 @@ void send_513(char *code) { delayMicroseconds(i2); } + digitalWrite(LED_PIN, LOW); + delayMicroseconds(wait); // guess } - digitalWrite(LED_PIN, LOW); } @@ -73,6 +76,11 @@ void send_513(char *code) { #include "DHT.h" DHT dht; +#include "RunningAverage.h" + +RunningAverage temp_avg(10); +RunningAverage hum_avg(10); + // setup void help() { @@ -83,6 +91,7 @@ void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 mySwitch.enableTransmit(10); // with sender wired in receiving doesn't work, pin #10 + mySwitch.setRepeatTransmit(repeat); // or change to be different for 433 and 315 MHz // DS18B20 sensors.begin(); @@ -90,13 +99,31 @@ void setup() { // DHT22 dht.setup(8); + temp_avg.addValue( dht.getTemperature() ); + hum_avg.addValue( dht.getHumidity() ); + } int serial_pos = 0; char serial_data[2]; // socket (0-9), state (0-1) -char binary_data[24]; +char binary_data[32]; +unsigned int dht22_errors = 0; + +unsigned long time = millis(); void loop() { + if ( millis() - time > 2000 ) { + float t = dht.getTemperature(); + if ( dht.getStatus() == 0 ) + temp_avg.addValue( t ); + else dht22_errors++; + float h = dht.getHumidity(); + if ( dht.getStatus() == 0 ) + hum_avg.addValue( h ); + else dht22_errors++; + time = millis(); + } + if (mySwitch.available()) { Serial.print(mySwitch.getReceivedBitlength()); Serial.print(" bits "); @@ -120,28 +147,37 @@ void loop() { Serial.readBytesUntil('\n', binary_data, sizeof(binary_data)); Serial.print("# send B"); Serial.println( binary_data ); + LED_ON mySwitch.send( binary_data ); + LED_OFF } else - // light sockets at 513 Mhz + if ( input == 'R' ) { + Serial.readBytesUntil('\n', binary_data, sizeof(binary_data)); + Serial.print("# send 315 binary "); + Serial.println( binary_data ); + send_315( binary_data ); + } else + + // light sockets at 315 Mhz if (input == 'a') { - send_513("1000100110110000000000010"); + send_315("1000100110110000000000010"); } else if (input == 'b') { - send_513("1011001001011111000000010"); + send_315("1011001001011111000000010"); } else // DHT22 if (input == 'd') { Serial.print("temperature="); - Serial.print(dht.getTemperature()); + Serial.print(temp_avg.getAverage()); Serial.print(" humidity="); - Serial.print(dht.getHumidity()); - Serial.print(" status="); - Serial.println(dht.getStatusString()); + Serial.print(hum_avg.getAverage()); + Serial.print(" errors="); + Serial.println(dht22_errors); } - if ( input >= 0x30 && input <= 0x39 ) { + if ( input >= 0x30 && input <= 0x39 && serial_pos < 2 ) { input = input - 0x30; // ASCII to number serial_data[serial_pos++] = input; } else { @@ -157,6 +193,8 @@ void loop() { byte on = serial_data[1]; + LED_ON + // switches, 433 Mhz set of 3 switch ( serial_data[0] ) { case 1: @@ -175,11 +213,33 @@ void loop() { on ? mySwitch.send("001111110000000011000000") : mySwitch.send("001111110000000000000000"); break; + case 5: +/* + cca. 320Mhz 4 channel 4.8A 220V relay + + A 1101001010011010011100010 + B 1101001010011010011101000 + C 1101001010011010011100100 + D 1101001010011010011110000 + off 1101001010011010011111000 + on 1101001010011010011100110 +*/ + switch ( on ) { + case '0': send_315( "1101001010011010011111000" ); + case '1': send_315( "1101001010011010011100110" ); + case 'A': send_315( "1101001010011010011100010" ); + case 'B': send_315( "1101001010011010011101000" ); + case 'C': send_315( "1101001010011010011100100" ); + case 'D': send_315( "1101001010011010011110000" ); + default: Serial.println("# ERROR: use 0-off 1-on A B C D"); + } default: Serial.print("# invalid switch number "); Serial.println(serial_data[0], DEC); } + LED_OFF + // reset for later serial_pos = 0; }