leo72:
Prima di tutto, con le ultime versioni dell'IDE per attivare le pull-up interne puoi fare così:pinMode(pin, INPUT_PULLUP);Poi, non vedo l'attivazione della pull-up sul pin 16. Forse dipende da questo.
//voglio usare un pin analogico e uno digitale
#define PIN1 14 //A0
#define PIN2 4 //D4
#define PIN3 16 //non lo uso
#define PIN1 14 //voglio usare un pin A0 e il 4D
#define PIN2 4
#define PIN3 16 //non lo uso
uint8_t latest_interrupted_pin;
uint8_t interrupt_count[20]={0}; // 20 possible arduino pins
void quicfunc() {
latest_interrupted_pin=PCintPort::arduinoPin;
interrupt_count[latest_interrupted_pin]++;
};
void setup() {
pinMode(PIN1, INPUT); digitalWrite(PIN1, HIGH);
PCintPort::attachInterrupt(PIN1, &quicfunc, CHANGE);
pinMode(PIN2, INPUT); digitalWrite(PIN2, LOW);
PCintPort::attachInterrupt(PIN2, &quicfunc, CHANGE);
Serial.begin(115200);
Serial.println("-------------------------------");
}
uint8_t i;
void loop() {
uint8_t count;
Serial.print(".");
delay(1000);
for (i=0; i < 20; i++) {
if (interrupt_count[i] != 0) {
count=interrupt_count[i];
interrupt_count[i]=0;
Serial.print("Count for pin ");
if (i < 14) {
Serial.print("D");
Serial.print(i, DEC);
} else {
Serial.print("A");
Serial.print(i-14, DEC);
}
Serial.print(" is ");
Serial.println(count, DEC);
}
}
}
Risultato:
------------------------------------------
.....................Count for pin D4 is 12
.Count for pin D4 is 199
.Count for pin D4 is 101
......Count for pin D4 is 52
.........Count for pin D4 is 57
.Count for pin D4 is 45
....Count for pin A0 is 5
....Count for pin A0 is 5
//se premo su invio continuamente una volta aperto il monitor seriale
//continua a darmi il valore del pin analogico
.Count for pin A0 is 28
.Count for pin A0 is 15
.....Count for pin A0 is 7
.Count for pin A0 is 15
.Count for pin A0 is 25
.Count for pin A0 is 25
.Count for pin A0 is 25
.Count for pin A0 is 30
.Count for pin A0 is 24
.Count for pin A0 is 24
.Count for pin A0 is 25
.Count for pin A0 is 25
.Count for pin A0 is 25
.Count for pin A0 is 25
.Count for pin A0 is 25
.Count for pin A0 is 20
.Count for pin A0 is 25
.Count for pin A0 is 25
.Count for pin A0 is 30
.Count for pin A0 is 30
.Count for pin A0 is 25
.Count for pin A0 is 33
.Count for pin A0 is 30
.Count for pin A0 is 28
.Count for pin A0 is 30
Adesso almeno stampa il count per entrambi i pin, MA:
-funziona solo in senso antiorario PERCHE'?
-funziona altrettanto bene con lo stato dei pin settato ad HIGH e l'interrupt chiamato sul falling MENTRE con le altre combinazioni perde dei count
consigli?