Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Este sketch usa a facilidade de pinChage interrupt de todos ports do arduino
- // Copiado parcialmente de http://playground.arduino.cc/Main/PinChangeInterrupt
- byte minhaMatriz[12]; // Matriz pra guardar os valores lidos do port apos um interrupt
- unsigned long countMatriz[12]; // Matriz pra acumular os valores lidos do port apos um interrupt
- bool count = LOW; // Controle para imprimir só se houve alteração do port
- //----------------------------------------------
- void pciSetup(byte pin) // Definição de para qual port deve ser definido o interrupt
- {
- *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin)); // enable pin
- PCIFR |= bit (digitalPinToPCICRbit(pin)); // clear any outstanding interrupt
- PCICR |= bit (digitalPinToPCICRbit(pin)); // enable interrupt for the group
- }
- //----------------------------------------------
- ISR (PCINT0_vect) // handle pin change interrupt for D8 to D13 here
- {
- for (int i = 2; i <= 12; i++) // Se houve interrupt dos ports de 8 a 12
- {
- minhaMatriz[i] = digitalRead(i); // Salva valores dos ports na matriz
- count = HIGH; // Habilita impressao
- }
- }
- //----------------------------------------------
- ISR (PCINT2_vect) // handle pin change interrupt for D0 to D7 here
- {
- for (int i = 2; i <= 12; i++) // Se houve interrupt dos ports de 2 a 7
- {
- minhaMatriz[i] = digitalRead(i); // Salva valores dos ports na matriz
- count = HIGH; // Habilita impressao
- }
- }
- //----------------------------------------------
- void setup()
- {
- Serial.begin(9600); // Inicializa a serial
- for (int i = 0; i <= 12; i++) // Define pinMode INPUT e em PULLUP para os ports (PULLUP e opcional)
- {
- pinMode(i, INPUT_PULLUP); // pinMode
- }
- pciSetup(2); // enable interrupt for 10 pins
- pciSetup(3);
- pciSetup(4);
- pciSetup(5);
- pciSetup(6);
- pciSetup(7);
- pciSetup(8);
- pciSetup(9);
- pciSetup(10);
- pciSetup(11);
- for (int i = 2; i <= 12; i++) // Endereca ports
- {
- minhaMatriz[i] = digitalRead(i); // Le condicao inicial dos ports e salva na matriz
- }
- }
- //----------------------------------------------
- void loop()
- {
- if (count == HIGH) // Se impressao esta habilitada
- {
- for (int i = 2; i <= 11; i++) // Endereca matriz
- {
- countMatriz[i] = countMatriz[i] + minhaMatriz[i];
- Serial.print(i); Serial.print(" : "); // Imprime
- Serial.println(countMatriz[i]);
- }
- count = LOW; // Desabilita impressao
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement