lemueltra

redes1

Jun 13th, 2019
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define placa2 5
  2. #define placa3 6
  3. #define placa4 7
  4. #define tamanho 24
  5. #define duty 15
  6. int mac[] = {0, 0};
  7. float start, temp, tempo = 0;
  8. int cont, pot, val = 0;
  9. int atual_estado, ultimo_estado = 0, ler1[tamanho], ler2[tamanho], ler3[tamanho];   //física
  10. char vec[tamanho];
  11.  
  12. ISR(TIMER2_OVF_vect){
  13.   TCNT2 = 0;          // Reinicializa o registrador do Timer2
  14.   ler1[cont] = digitalRead(placa2);
  15.   ler2[cont] = digitalRead(placa3);
  16.   ler3[cont] = digitalRead(placa4);
  17.   comeca_teste();
  18.   cont++;
  19. }
  20.  
  21. ISR(TIMER1_OVF_vect){
  22.   TCNT1 = 0;
  23. }
  24.  
  25. void setup(){
  26.   pinMode(8,OUTPUT);
  27.   pinMode(9,OUTPUT);
  28.  
  29.   TCCR2A = 0x00; //Timer operando em modo normal
  30.   TCCR1A = 0x00;
  31.  
  32.   TCCR2B = 0x07; //Prescaler 1:1024
  33.   TCCR1B = 0x05; //Prescaler 1:1024
  34.  
  35.   TCNT2  = 0; //10 ms overflow
  36.   TCNT1  = 0; //4s overflow?
  37.  
  38.   TIMSK2 = 0x01; //Habilita interrupção do Timer2
  39.   TIMSK1 = 0x01; //Habilita interrupção do Timer1
  40.  
  41.   Serial.begin(9600);
  42. }
  43.  
  44. void loop(){
  45.  
  46. }
  47. void comeca_teste(){
  48.   int trabalhando = 0;
  49.   if (trabalhando == 0){
  50.     if (cont >= 3){
  51.       cont = 0;
  52.     }
  53.     if (ler1[0], ler1[1], ler1[2] == 1){
  54.       trabalhando = 1;
  55.       comeca_comunica(placa2);
  56.     }
  57.     else if (ler2[0], ler2[1], ler2[2] == 1){
  58.       trabalhando = 2;
  59.       comeca_comunica(placa3);
  60.     }
  61.     else if (ler3[0], ler3[1], ler3[2] == 1){
  62.       trabalhando = 3;
  63.       comeca_comunica(placa4);
  64.     }
  65.   }
  66.   else if (trabalhando == 1){
  67.     if (cont >= (tamanho-1)){
  68.       cont = 0;
  69.       desmonta_enlace();
  70.     }
  71.     desmonta_fisica(ler1[cont]);
  72.   }
  73.   else if (trabalhando == 2){
  74.     if (cont >= (tamanho-1)){
  75.       cont = 0;
  76.       desmonta_enlace();
  77.     }
  78.     desmonta_fisica(ler2[cont]);
  79.   }
  80.   else if (trabalhando == 3){
  81.     if (cont >= (tamanho-1)){
  82.       cont = 0;
  83.       desmonta_enlace();
  84.     }
  85.     desmonta_fisica(ler3[cont]);
  86.   }
  87. }
  88.  
  89. void comeca_comunica(int porta){
  90.   int i = 0;
  91.   while (i <= 4){
  92.     i++;
  93.     digitalWrite(porta, HIGH);
  94.  
  95.   }
  96. }
  97.  
  98. void pedido_reenvia(int porta, int ack){
  99.   int i = 0;
  100.   while (i <= 3){
  101.     i++;
  102.     digitalWrite(porta, HIGH);
  103.     delayMicroseconds(duty);
  104.   }
  105.   if (ack == 1){
  106.     digitalWrite(porta, HIGH);
  107.     delayMicroseconds(duty);
  108.   }
  109.   else{
  110.     digitalWrite(porta, LOW);
  111.     delayMicroseconds(duty);
  112.   }
  113.  
  114. }
  115.  
  116. void monta_fisica(int porta){
  117.   int i = tamanho - 1;
  118.   while (i--){
  119.     if(vec[i] == '1'){
  120.       digitalWrite(porta, HIGH);
  121.       delayMicroseconds(duty);
  122.       digitalWrite(porta, LOW);
  123.     }
  124.     else{
  125.       digitalWrite(porta, LOW);
  126.       delayMicroseconds(duty);
  127.       digitalWrite(porta, HIGH);
  128.     }
  129.   }
  130. }
  131.  
  132. void desmonta_fisica(int dado){
  133.   atual_estado = dado;    
  134.   if (atual_estado =! ultimo_estado){
  135.     if (atual_estado == HIGH){
  136.       vec[cont] = '0'; //borda de subida
  137.     }
  138.     else{
  139.       vec[cont] = '1'; //borda de descida
  140.     }
  141.   }
  142.   ultimo_estado = atual_estado;  
  143. }
  144.  
  145. void monta_enlace(int mac_env[]){
  146.   int paridade = 0;
  147.   int i = tamanho - 1;
  148.   while (i--){
  149.     if(int(vec[i]) % 2 != 1){
  150.       paridade++;
  151.     }
  152.   }
  153.   if(paridade % 2 != 1){
  154.     vec[tamanho-1] = '1';
  155.   }
  156.   else{
  157.     vec[tamanho-1] = '0';
  158.   }
  159.   vec[tamanho] = '\0';
  160.   vec[11] = mac[0];
  161.   vec[12] = mac[1];
  162. }
  163.  
  164. void desmonta_enlace(){
  165.   int paridade = 0, mac_rec[2], i = tamanho - 1;
  166.   mac_rec[0] = vec[11];
  167.   mac_rec[1] = vec[12];
  168.   while (i--){
  169.     if(int(vec[i]) % 2 != 1){
  170.       paridade++;
  171.     }
  172.   }
  173.   if (paridade % 2 != 1){
  174.     paridade = '1';
  175.   }
  176.   else{
  177.     paridade = '0';
  178.   }
  179.   if (paridade != vec[tamanho-1]){ //MUDA CONFORME A PLACA!
  180.     if (mac_rec[0] == 0){
  181.       pedido_reenvia(placa2, vec[0]);
  182.     }
  183.     else if (mac_rec[1] == 0){
  184.       pedido_reenvia(placa3, vec[0]);
  185.     }
  186.     else if (mac_rec[1] == 1){
  187.       pedido_reenvia(placa4, vec[0]);
  188.     }
  189.   }
  190.   if (mac_rec[0] != mac[0] or mac_rec[1] != mac[1]){ //MUDA CONFORME A PLACA!
  191.     if (mac_rec[0] == 0){
  192.       monta_fisica(placa2);
  193.     }
  194.     else if (mac_rec[1] == 0){
  195.       monta_fisica(placa3);
  196.     }
  197.     else if (mac_rec[1] == 1){
  198.       monta_fisica(placa4);
  199.     }
  200.   }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment