Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "painlessMesh.h"
- #include <IRremoteESP8266.h>
- #include <IRsend.h>
- #include <Wire.h>
- #define MESH_PREFIX "robatzLabMesh"
- #define MESH_PASSWORD "12345678"
- #define MESH_PORT 5555
- Scheduler runner;
- painlessMesh mesh;
- #define IR_LEDS 14
- #define NEIGHB_ATTINY_NUM 4
- #define ATTINY_RESET_PIN 16
- IRsend irsend(IR_LEDS);
- const uint32_t NEIGHB_ATTINY_ADDR[NEIGHB_ATTINY_NUM] = {0x14, 0x13, 0x10, 0x12}; // north, eaST, SOUTH, WEST
- uint32_t neighbIDs[NEIGHB_ATTINY_NUM] = {0x0, 0x0, 0x0, 0x0};
- void sendID();
- void handleIrAct();
- Task taskSendID(TASK_SECOND * 1, TASK_FOREVER, &sendID, &runner);
- Task taskHandleIrAct(TASK_SECOND * 1, TASK_FOREVER, &handleIrAct, &runner);
- void setup()
- {
- Serial.begin(115200);
- mesh.setDebugMsgTypes(ERROR | STARTUP);
- mesh.init(MESH_PREFIX, MESH_PASSWORD, &runner, MESH_PORT);
- irsend.begin();
- pinMode(ATTINY_RESET_PIN, OUTPUT);
- digitalWrite(ATTINY_RESET_PIN, LOW);
- delay(10);
- digitalWrite(ATTINY_RESET_PIN, HIGH);
- delay(2000);
- Wire.begin();
- taskSendID.enable();
- taskHandleIrAct.enable();
- }
- void loop()
- {
- runner.execute();
- mesh.update();
- }
- void sendID()
- {
- irsend.sendNEC(mesh.getNodeId(), 32); // example: e80b3a14
- }
- void handleIrAct()
- {
- for (uint32_t i = 0; i < NEIGHB_ATTINY_NUM; i++)
- {
- uint32_t tmp = requestDataFromAttiny(NEIGHB_ATTINY_ADDR[i]);
- if(tmp != mesh.getNodeId())
- {
- neighbIDs[i] = tmp;
- }
- Serial.printf("0x%X\n", neighbIDs[i]);
- }
- }
- uint32_t requestDataFromAttiny(uint32_t addr)
- {
- delay(10);
- unsigned long value;
- uint8_t returned = Wire.requestFrom(addr, 4);
- for (uint8_t i = 0; i < returned; i++)
- {
- uint8_t tmp = Wire.read();
- (i == 0) ? (value = tmp) : (value = value * 256 + tmp);
- }
- return value;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement