Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <neotimer.h>
  2.  
  3. #include <RF24Network.h>
  4. #include <RF24.h>
  5. #include <SPI.h>
  6.  
  7. #define judge1_red_led    1
  8. #define judge1_white_led  2
  9. #define judge2_red_led    3
  10. #define judge2_white_led  4
  11. #define judge3_red_led    5
  12. #define judge3_white_led  6
  13. #define buzzer            7
  14. #define test_mode_switch  8
  15. #define channel           90
  16.  
  17. RF24 radio(7,8); //CE,CSN
  18. RF24Network network(radio);
  19. const uint16_t  base_station = 00;
  20. const uint16_t  judge1 = 01;
  21. const uint16_t  judge2 = 02;
  22. const uint16_t  judge3 = 03;
  23.  
  24. unsigned long judge1_send;
  25. unsigned long judge2_send;
  26. unsigned long judge3_send;
  27.  
  28. unsigned long judge1_rcv;
  29. unsigned long judge2_rcv;
  30. unsigned long judge3_rcv;
  31.  
  32. Neotimer timer_30s = Neotimer(30000);
  33. Neotimer timer_15s = Neotimer(15000);
  34. Neotimer timer_3s = Neotimer(3000);
  35.  
  36. long previous_milis;
  37. long current_milis;
  38.  
  39. bool judge1_red_call;
  40. bool judge2_red_call;
  41. bool judge3_red_call;
  42. bool judge1_white_call;
  43. bool judge2_white_call;
  44. bool judge3_white_call;
  45. bool buzzed;
  46.  
  47. void setup() {
  48.   SPI.begin();
  49.   radio.begin();
  50.   network.begin(channel, base_station);
  51.   radio.setDataRate(RF24_250KBPS);
  52.   radio.setPALevel(RF24_PA_HIGH);
  53.  
  54.   pinMode(judge1_red_led, OUTPUT);
  55.   pinMode(judge1_white_led, OUTPUT);
  56.   pinMode(judge2_red_led, OUTPUT);
  57.   pinMode(judge2_white_led, OUTPUT);
  58.   pinMode(judge3_red_led, OUTPUT);
  59.   pinMode(judge3_white_led, OUTPUT);
  60.   pinMode(buzzer, OUTPUT);
  61.   pinMode(test_mode_switch, INPUT);
  62.  
  63.   previous_milis = 0;
  64.   current_milis = 0;
  65. }
  66.  
  67.  
  68.  
  69. void loop() {
  70.   radio_comms();
  71.  
  72.   judge_decipher(judge1_rcv, judge1_red_call, judge1_white_call);
  73.   judge_decipher(judge2_rcv, judge2_red_call, judge2_white_call);
  74.   judge_decipher(judge3_rcv, judge3_red_call, judge3_white_call);
  75.  
  76.   if (digitalRead(test_mode_switch) == HIGH)  {
  77.     judge1_send = 3;
  78.     judge2_send = 3;
  79.     judge3_send = 3;    
  80.     led_outputs();        
  81.   }
  82.  
  83. //Guts of the program
  84.   else {
  85.  
  86.     //Display the lights for 15 seconds and buzz for 3 if majority fail
  87.     if (timer_15s.waiting() == true) {
  88.       led_outputs();      
  89.       if ((red_voting() == true) && (buzzed == false)) {
  90.         timer_3s.start();
  91.         buzzed = true;
  92.         digitalWrite(buzzer,HIGH);
  93.       }
  94.       if (timer_3s.done() == true) {
  95.         digitalWrite(buzzer,LOW);
  96.         timer_3s.stop();
  97.         timer_3s.reset();
  98.       }      
  99.     }
  100.     else if (timer_15s.done() == true) {
  101.       timer_15s.stop();
  102.       timer_15s.reset();
  103.       judge1_send = 0;
  104.       judge2_send = 0;
  105.       judge3_send = 0;
  106.       digitalWrite(judge1_red_led,LOW);
  107.       digitalWrite(judge1_white_led,LOW);
  108.       digitalWrite(judge2_red_led,LOW);
  109.       digitalWrite(judge2_white_led,LOW);
  110.       digitalWrite(judge3_red_led,LOW);
  111.       digitalWrite(judge3_white_led,LOW);
  112.     }
  113.  
  114.     //This is the waiting period after the first judge has submitted a call
  115.     //Alerts the other judges and waits for their call
  116.     if (timer_30s.waiting() == true) {
  117.       if (judge1_red_call || judge1_white_call ) {
  118.         judge1_send = 2;
  119.       }
  120.       if (judge2_red_call || judge2_white_call ) {
  121.         judge2_send = 2;
  122.       }
  123.       if (judge3_red_call || judge3_white_call ) {
  124.         judge3_send = 2;
  125.       }
  126.       if ((judge1_send == 2) && (judge2_send == 2) && (judge3_send == 2)) {
  127.         timer_15s.start();
  128.         timer_30s.stop();
  129.         timer_30s.reset();
  130.       }
  131.     }
  132.     else if (timer_30s.done() == true) {
  133.       timer_15s.start();
  134.       timer_30s.stop();
  135.       timer_30s.reset();
  136.     }  
  137.  
  138.     //This is the default state of the system. The system waits for a call from any judge
  139.     // and starts a 30 second timer during which period the other judges must make a call
  140.     else {
  141.       buzzed = false;
  142.       if (judge1_red_call || judge1_white_call ) {
  143.         timer_30s.start();
  144.         judge1_send = 2;
  145.         judge2_send = 1;
  146.         judge3_send = 1;
  147.       }
  148.       if (judge2_red_call || judge2_white_call ) {
  149.         timer_30s.start();
  150.         judge1_send = 1;
  151.         judge2_send = 2;
  152.         judge3_send = 1;
  153.       }
  154.       if (judge3_red_call || judge3_white_call ) {
  155.         timer_30s.start();
  156.         judge1_send = 1;
  157.         judge2_send = 1;
  158.         judge3_send = 2;
  159.       }      
  160.     }
  161.    
  162.   }
  163.  
  164. }
  165.  
  166. void radio_comms()  {
  167.   network.update();
  168.  
  169.   //RECEIVING
  170.   while (network.available()){
  171.     RF24NetworkHeader header;
  172.     unsigned long incomingData;
  173.     network.read(header, &incomingData, sizeof(incomingData));
  174.     if(header.from_node == judge1){
  175.         judge1_rcv = incomingData;
  176.     }
  177.     if(header.from_node == judge2){
  178.         judge2_rcv = incomingData;
  179.     }
  180.     if(header.from_node == judge3){
  181.         judge3_rcv = incomingData;
  182.     }
  183.     }
  184.   //SENDING
  185.   RF24NetworkHeader header1(judge1);
  186.   bool ok1 = network.write(header1, &judge1_send, sizeof(judge1_send));
  187.  
  188.   RF24NetworkHeader header2(judge2);
  189.   bool ok2 = network.write(header2, &judge2_send, sizeof(judge2_send));
  190.  
  191.   RF24NetworkHeader header3(judge3);
  192.   bool ok3 = network.write(header3, &judge3_send, sizeof(judge3_send));
  193. }
  194.  
  195. void judge_decipher(unsigned long judge_rcv, bool judge_red_call, bool judge_white_call ) {
  196.   switch(judge_rcv) {
  197.     case 0:
  198.       judge_white_call = false;
  199.       judge_red_call = false;
  200.     case 1:
  201.       judge_white_call = true;
  202.       judge_red_call = false;
  203.     case 2:
  204.       judge_white_call = false;
  205.       judge_red_call = true;
  206.     default:
  207.       judge_white_call = false;
  208.       judge_red_call = false;
  209.   }
  210. }
  211.  
  212. void led_outputs() {
  213.   if (judge1_red_call) digitalWrite(judge1_red_led, HIGH);
  214.   else digitalWrite(judge1_red_led, LOW);
  215.   if (judge2_red_call) digitalWrite(judge2_red_led, HIGH);
  216.   else digitalWrite(judge2_red_led, LOW);
  217.   if (judge3_red_call) digitalWrite(judge3_red_led, HIGH);
  218.   else digitalWrite(judge3_red_led, LOW);
  219.   if (judge1_white_call) digitalWrite(judge1_white_led, HIGH);
  220.   else digitalWrite(judge1_white_led, LOW);
  221.   if (judge2_white_call) digitalWrite(judge2_white_led, HIGH);
  222.   else digitalWrite(judge2_white_led, LOW);
  223.   if (judge3_white_call) digitalWrite(judge3_white_led, HIGH);
  224.   else digitalWrite(judge3_white_led, LOW);
  225. }
  226.  
  227. bool red_voting() {
  228.   if (judge1_red_call && judge2_red_call) return true;
  229.   else if (judge1_red_call && judge3_red_call) return true;
  230.   else if (judge2_red_call && judge3_red_call) return true;
  231.   else return false;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement