#include #include #include #ifdef __AVR__ #include #endif #define NEOPIN 0 //=wemos D1 //define the pins used by the transceiver module #define ss 6 #define rst 7 #define dio0 8 //the Wemos WS2812B RGB shield has 1 LED connected to pin 2 tinyNeoPixel pixels = tinyNeoPixel(7, NEOPIN, NEO_GRB + NEO_KHZ800); // this is the ID of the node!!!! int mySelf = 1; int ledPin = 3; int speakerPin = 1; int motorPin = 2; int startThings = 0; //int startTimer = 0; typedef struct message { int red; int green; int blue; int node; int timer; } message; message myMessage; unsigned long previousMillis = 0; //simple function which takes values for the red, green and blue led and also //a delay void setColor(int led, int redValue, int greenValue, int blueValue, int delayValue) { pixels.setPixelColor(led, pixels.Color(redValue, greenValue, blueValue)); pixels.show(); Serial.println("set Pixel color"); delay(delayValue); pixels.clear(); pixels.show(); } void breathe(int redValue, int greenValue, int blueValue) { int TOTAL_LEDS = 7; float MaximumBrightness = 200;//255; float SpeedFactor = 0.010; // 0.008 I don't actually know what would look good float StepDelay = 5; // ms for a step delay on the lights //for (int a = 0; a < 5; a++) { // Serial.print("a ="); // Serial.println(a); // Make the lights breathe for (int i = 0; i < 3000; i++) {//for (int i = 0; i < 65535; i++) { // Serial.print("i ="); // Serial.println(i); // Intensity will go from 10 - MaximumBrightness in a "breathing" manner float intensity = MaximumBrightness / 2.0 * (1.0 + sin(SpeedFactor * i)); pixels.setBrightness(intensity); // Now set every LED to that color for (int ledNumber = 1; ledNumber < TOTAL_LEDS; ledNumber++) { pixels.setPixelColor(ledNumber, redValue, greenValue, blueValue); } pixels.show(); //Wait a bit before continuing to breathe delay(StepDelay); } //return; //} } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for (uint16_t i = 0; i < pixels.numPixels(); i++) { pixels.setPixelColor(i, c); pixels.show(); delay(wait); } } void makeNoise() { int thisPitch = random(120, 800); tone(speakerPin, thisPitch, 500); delay(100); } void vibrate() { digitalWrite(motorPin, HIGH); delay(500); digitalWrite(motorPin, LOW); delay(500); digitalWrite(motorPin, HIGH); delay(500); digitalWrite(motorPin, LOW); } void setup() { pinMode(ledPin, OUTPUT); pinMode(motorPin, OUTPUT); pinMode(speakerPin, OUTPUT); Serial.begin(9600); LoRa.setPins(ss, rst, dio0); while (!Serial); Serial.println("LoRa Receiver"); //setup LoRa transceiver module if (!LoRa.begin(866E6)) { Serial.println("Starting LoRa failed!"); while (1); } LoRa.setSyncWord(0xF3); pixels.begin(); } void loop() { unsigned long currentMillis = millis(); // try to parse packet int packetSize = LoRa.parsePacket(); if (packetSize) { myMessage.red = LoRa.read(); myMessage.green = LoRa.read(); myMessage.blue = LoRa.read(); myMessage.node = LoRa.read(); myMessage.timer = LoRa.read(); // received a packet // debug // Serial.print("Received packet for '"); // debug //Serial.print(myMessage.node); digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); digitalWrite(ledPin, LOW); /* // read packet while (LoRa.available()) { Serial.print((char)LoRa.read()); } */ // Serial.print((char)LoRa.read()); // print RSSI of packet Serial.print("' with RSSI "); Serial.println(LoRa.packetRssi()); // wait for a second } //Serial.print("timer = "); //erial.println((currentMillis - previousMillis)); if ((startThings == 0) && (myMessage.node == mySelf)) { setColor(0, myMessage.red, myMessage.green, myMessage.blue, 500); // debug //Serial.print("it's for me, node = "); // debug //Serial.println(myMessage.node); previousMillis = currentMillis; startThings = 1; // debug // Serial.print("timer started!"); } if (startThings == 1) { if ((currentMillis - previousMillis) >= (myMessage.timer * 1000)) { //Serial.print("timer = "); //Serial.println((currentMillis - previousMillis)); previousMillis = currentMillis; startThings = 0; //startTimer(myMessage.timer); doStuff(); } } } void doStuff() { //colorWipe(pixels.Color(255, 0, 0), 50); // Red //colorWipe(pixels.Color(0, 255, 0), 50); // Green //colorWipe(pixels.Color(0, 0, 255), 50); // Blue //setColor(0, myMessage.red, myMessage.green, myMessage.blue, 100); vibrate(); breathe(myMessage.red, myMessage.green, myMessage.blue); //makeNoise(); vibrate(); myMessage.node = 0; myMessage.timer = 0; //startThings = 0; pixels.clear(); pixels.show(); // debug //Serial.println(myMessage.red); // debug // Serial.println(myMessage.green); // debug //Serial.println(myMessage.blue); // debug //Serial.println(myMessage.node); // debug //Serial.println(myMessage.timer); return; }