Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define placa2 5
- #define placa3 6
- #define placa4 7
- #define tamanho 24
- #define duty 15
- int mac[] = {0, 0};
- float start, temp, tempo = 0;
- int cont, pot, val = 0;
- int atual_estado, ultimo_estado = 0, ler1[tamanho], ler2[tamanho], ler3[tamanho]; //física
- char vec[tamanho];
- ISR(TIMER2_OVF_vect){
- TCNT2 = 0; // Reinicializa o registrador do Timer2
- ler1[cont] = digitalRead(placa2);
- ler2[cont] = digitalRead(placa3);
- ler3[cont] = digitalRead(placa4);
- comeca_teste();
- cont++;
- }
- ISR(TIMER1_OVF_vect){
- TCNT1 = 0;
- }
- void setup(){
- pinMode(8,OUTPUT);
- pinMode(9,OUTPUT);
- TCCR2A = 0x00; //Timer operando em modo normal
- TCCR1A = 0x00;
- TCCR2B = 0x07; //Prescaler 1:1024
- TCCR1B = 0x05; //Prescaler 1:1024
- TCNT2 = 0; //10 ms overflow
- TCNT1 = 0; //4s overflow?
- TIMSK2 = 0x01; //Habilita interrupção do Timer2
- TIMSK1 = 0x01; //Habilita interrupção do Timer1
- Serial.begin(9600);
- }
- void loop(){
- }
- void comeca_teste(){
- int trabalhando = 0;
- if (trabalhando == 0){
- if (cont >= 3){
- cont = 0;
- }
- if (ler1[0], ler1[1], ler1[2] == 1){
- trabalhando = 1;
- comeca_comunica(placa2);
- }
- else if (ler2[0], ler2[1], ler2[2] == 1){
- trabalhando = 2;
- comeca_comunica(placa3);
- }
- else if (ler3[0], ler3[1], ler3[2] == 1){
- trabalhando = 3;
- comeca_comunica(placa4);
- }
- }
- else if (trabalhando == 1){
- if (cont >= (tamanho-1)){
- cont = 0;
- desmonta_enlace();
- }
- desmonta_fisica(ler1[cont]);
- }
- else if (trabalhando == 2){
- if (cont >= (tamanho-1)){
- cont = 0;
- desmonta_enlace();
- }
- desmonta_fisica(ler2[cont]);
- }
- else if (trabalhando == 3){
- if (cont >= (tamanho-1)){
- cont = 0;
- desmonta_enlace();
- }
- desmonta_fisica(ler3[cont]);
- }
- }
- void comeca_comunica(int porta){
- int i = 0;
- while (i <= 4){
- i++;
- digitalWrite(porta, HIGH);
- }
- }
- void pedido_reenvia(int porta, int ack){
- int i = 0;
- while (i <= 3){
- i++;
- digitalWrite(porta, HIGH);
- delayMicroseconds(duty);
- }
- if (ack == 1){
- digitalWrite(porta, HIGH);
- delayMicroseconds(duty);
- }
- else{
- digitalWrite(porta, LOW);
- delayMicroseconds(duty);
- }
- }
- void monta_fisica(int porta){
- int i = tamanho - 1;
- while (i--){
- if(vec[i] == '1'){
- digitalWrite(porta, HIGH);
- delayMicroseconds(duty);
- digitalWrite(porta, LOW);
- }
- else{
- digitalWrite(porta, LOW);
- delayMicroseconds(duty);
- digitalWrite(porta, HIGH);
- }
- }
- }
- void desmonta_fisica(int dado){
- atual_estado = dado;
- if (atual_estado =! ultimo_estado){
- if (atual_estado == HIGH){
- vec[cont] = '0'; //borda de subida
- }
- else{
- vec[cont] = '1'; //borda de descida
- }
- }
- ultimo_estado = atual_estado;
- }
- void monta_enlace(int mac_env[]){
- int paridade = 0;
- int i = tamanho - 1;
- while (i--){
- if(int(vec[i]) % 2 != 1){
- paridade++;
- }
- }
- if(paridade % 2 != 1){
- vec[tamanho-1] = '1';
- }
- else{
- vec[tamanho-1] = '0';
- }
- vec[tamanho] = '\0';
- vec[11] = mac[0];
- vec[12] = mac[1];
- }
- void desmonta_enlace(){
- int paridade = 0, mac_rec[2], i = tamanho - 1;
- mac_rec[0] = vec[11];
- mac_rec[1] = vec[12];
- while (i--){
- if(int(vec[i]) % 2 != 1){
- paridade++;
- }
- }
- if (paridade % 2 != 1){
- paridade = '1';
- }
- else{
- paridade = '0';
- }
- if (paridade != vec[tamanho-1]){ //MUDA CONFORME A PLACA!
- if (mac_rec[0] == 0){
- pedido_reenvia(placa2, vec[0]);
- }
- else if (mac_rec[1] == 0){
- pedido_reenvia(placa3, vec[0]);
- }
- else if (mac_rec[1] == 1){
- pedido_reenvia(placa4, vec[0]);
- }
- }
- if (mac_rec[0] != mac[0] or mac_rec[1] != mac[1]){ //MUDA CONFORME A PLACA!
- if (mac_rec[0] == 0){
- monta_fisica(placa2);
- }
- else if (mac_rec[1] == 0){
- monta_fisica(placa3);
- }
- else if (mac_rec[1] == 1){
- monta_fisica(placa4);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment