Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.93 KB | None | 0 0
  1. #include "painlessMesh.h"
  2. #include <IRremoteESP8266.h>
  3. #include <IRsend.h>
  4. #include <Wire.h>
  5.  
  6. #define   MESH_PREFIX                 "robatzLabMesh"
  7. #define   MESH_PASSWORD               "12345678"
  8. #define   MESH_PORT                   5555
  9. Scheduler runner;
  10. painlessMesh mesh;
  11.  
  12. #define   IR_LEDS                     14
  13. #define   NEIGHB_ATTINY_NUM           4
  14. #define   ATTINY_RESET_PIN            16
  15. IRsend irsend(IR_LEDS);
  16. const uint32_t NEIGHB_ATTINY_ADDR[NEIGHB_ATTINY_NUM] = {0x14, 0x13, 0x10, 0x12}; // north, eaST, SOUTH, WEST
  17. uint32_t neighbIDs[NEIGHB_ATTINY_NUM] = {0x0, 0x0, 0x0, 0x0};
  18. void sendID();
  19. void handleIrAct();
  20. Task taskSendID(TASK_SECOND * 1, TASK_FOREVER, &sendID, &runner);
  21. Task taskHandleIrAct(TASK_SECOND * 1, TASK_FOREVER, &handleIrAct, &runner);
  22.  
  23.  
  24. void setup()
  25. {
  26.   Serial.begin(115200);
  27.   mesh.setDebugMsgTypes(ERROR | STARTUP);
  28.   mesh.init(MESH_PREFIX, MESH_PASSWORD, &runner, MESH_PORT);
  29.  
  30.   irsend.begin();
  31.   pinMode(ATTINY_RESET_PIN, OUTPUT);
  32.   digitalWrite(ATTINY_RESET_PIN, LOW);
  33.   delay(10);
  34.   digitalWrite(ATTINY_RESET_PIN, HIGH);
  35.   delay(2000);
  36.   Wire.begin();
  37.   taskSendID.enable();
  38.   taskHandleIrAct.enable();
  39. }
  40.  
  41. void loop()
  42. {
  43.   runner.execute();
  44.   mesh.update();
  45. }
  46.  
  47.  
  48. void sendID()
  49. {
  50.     irsend.sendNEC(mesh.getNodeId(), 32); // example: e80b3a14
  51. }
  52.  
  53. void handleIrAct()
  54. {
  55.     for (uint32_t i = 0; i < NEIGHB_ATTINY_NUM; i++)
  56.     {
  57.         uint32_t tmp = requestDataFromAttiny(NEIGHB_ATTINY_ADDR[i]);
  58.         if(tmp != mesh.getNodeId())
  59.         {
  60.             neighbIDs[i] = tmp;
  61.         }
  62.         Serial.printf("0x%X\n", neighbIDs[i]);
  63.     }
  64. }
  65.  
  66. uint32_t requestDataFromAttiny(uint32_t addr)
  67. {
  68.     delay(10);
  69.     unsigned long value;
  70.     uint8_t returned = Wire.requestFrom(addr, 4);
  71.     for (uint8_t i = 0; i < returned; i++)
  72.     {
  73.         uint8_t tmp = Wire.read();
  74.         (i == 0) ? (value = tmp) : (value = value * 256 + tmp);
  75.     }
  76.     return value;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement