
Originally Posted by
PaulStoffregen
Any use of pinMode will do this. It completely reconfigures the pin, overwriting the previously set interrupt config.
Maybe pinMode should check for this case? I'm also considering adding a pinModeFast function, which would omit some of the pinMode features.
So pinMode (pin#, INPUT) doesn't interfere with the interrupt config? it would be best practice to set the interrupt at the end of the setup?
I have problem which relates to the hat switches (which is why is asked about the hat switch command).
for some reason, the computer/joystick, thinks that the UP & RIGHT buttons on the hat switch are always on.
I couldn't understand how that's possible since i checked the pin status with the serial monitor and everything is in order.
I also found a post stating that there is a bug on the hat switch API. https://forum.pjrc.com/threads/60620...ght=hat+switch
Could it be a bug?
I've also checked on my Mac (not trusting windows 10) and sure enough both buttons are turned on....
Here's the code (i've shortened the code to the relevant section).
Am i doing anything wrong?
Code:
#include <Arduino.h>
int Hat14Down = 0; // F14A
int Hat14Right = 1; // F14B
int Hat14Up = 2; // F14C
int Hat14Left = 3; // F14D
int Hat9Up = 5; // F9A
int Hat9Left = 6; // F9B
int Hat9Down = 7; // F9C
int Hat9Right = 8; // F9D
int hat14Switch = 0;
int hat9Switch = 0;
int angle = -1;
int angle2 = -1;
/*-------------setup-----------------*/
void setup() {
//rotary encoder
//Fanky9
pinMode (encoderF9A, INPUT);
pinMode (encoderF9B, INPUT);
//Fanky14
pinMode (encoderF14A, INPUT);
pinMode (encoderF14B, INPUT);
//Encoder 17
pinMode (enc17A, INPUT);
pinMode (enc17B, INPUT);
//Encoder 16
pinMode (enc16A, INPUT);
pinMode (enc16B, INPUT);
attachInterrupt(digitalPinToInterrupt(enc16A), Stateof16A, CHANGE);
attachInterrupt(digitalPinToInterrupt(enc17A), Stateof17A, CHANGE);
attachInterrupt(digitalPinToInterrupt(encoderF14B), StateofF14B, CHANGE);
attachInterrupt(digitalPinToInterrupt(encoderF9A), StateofF9A, CHANGE);
//Fanky SW
for (uint8_t i1 = 0; i1 <= 9; i1++){
pinMode(i1, INPUT_PULLUP);
}
Hat14Down = HIGH; // F14A
Hat14Right = HIGH; // F14B
Hat14Up = HIGH; // F14C
Hat14Left = HIGH; // F14D
Hat9Up = HIGH; // F9A
Hat9Left = HIGH; // F9B
Hat9Down = HIGH; // F9C
Hat9Right = HIGH; // F9D
Serial.begin(115200);
}
/*-----------------------------------------loop---------------------------------------*/
void loop() {
// ---------------hat switch F14
// pin 0 - A - Up
// pin 1 - B - Left
// pin 2 - C - Down
// pin 3 - D - Right
// pin PB - [4]
// Read pin values
Hat14Up = !digitalRead(0); // A
Hat14Left = !digitalRead(1); // B
Hat14Down = !digitalRead(2); // C
Hat14Right = !digitalRead(3); // D
hat14Switch = digitalRead(4); // switch.
if ((Hat14Down == 0)
&& (Hat14Right == 0)
&& (Hat14Up == 0)
&& (Hat14Left == 0)) {
Joystick.hat(1,-1);
if (hat14Switch )
{
Joystick.button(25, LOW);
Serial.println( "Button No No NO No :");
Serial.print ("14 up ");Serial.print ("14 Left ");Serial.print ("14 Down ");Serial.print ("14 Right "); Serial.print ("14 Switch "); Serial.println ("");
/*Serial.print("\t");*/Serial.print (" ");Serial.print (Hat14Up);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Left);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Down);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Right);Serial.print("\t\t"); /*Serial.print(" "); */Serial.print (hat14Switch); Serial.println ("");
Serial.println("");
}
else {
Joystick.button(25, HIGH);
Serial.println( "Button Pressed:");
Serial.print ("14 up ");Serial.print ("14 Left ");Serial.print ("14 Down ");Serial.print ("14 Right "); Serial.print ("14 Switch "); Serial.println ("");
/*Serial.print("\t");*/Serial.print (" ");Serial.print (Hat14Up);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Left);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Down);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Right);Serial.print("\t\t"); /*Serial.print(" "); */Serial.print (hat14Switch); Serial.println ("");
Serial.println("");
}
}
if (Hat14Up == 1 && Hat14Right == 0 && Hat14Left == 0 && Hat14Down == 0) {
Joystick.hat(1,0);
Serial.println( "Up Dir:");
Serial.print ("14 up ");Serial.print ("14 Left ");Serial.print ("14 Down ");Serial.print ("14 Right "); Serial.print ("14 Switch "); Serial.println ("");
/*Serial.print("\t");*/Serial.print (" ");Serial.print (Hat14Up);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Left);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Down);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Right);Serial.print("\t\t"); /*Serial.print(" "); */Serial.print (hat14Switch); Serial.println ("");
Serial.println("");
}
// if (Hat14Right == 1 && Hat14Up == 1 ) {
// Joystick.hat(1,45);
// }
if (Hat14Right == 1 && Hat14Down == 0 && Hat14Up == 0 && Hat14Left == 0) {
Joystick.hat(1,90);
Serial.println( "Right Dir:");
Serial.print ("14 up ");Serial.print ("14 Left ");Serial.print ("14 Down ");Serial.print ("14 Right "); Serial.print ("14 Switch "); Serial.println ("");
/*Serial.print("\t");*/Serial.print (" ");Serial.print (Hat14Up);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Left);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Down);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Right);Serial.print("\t\t"); /*Serial.print(" "); */Serial.print (hat14Switch); Serial.println ("");
Serial.println("");
}
// if (Hat14Down == 1 && Hat14Right == 1) {
// Joystick.hat(1,135);
// }
if (Hat14Down == 1 && Hat14Left == 0 && Hat14Right == 0 && Hat14Up ==0) {
Joystick.hat(1,180);
Serial.println( "Down Dir:");
Serial.print ("14 up ");Serial.print ("14 Left ");Serial.print ("14 Down ");Serial.print ("14 Right "); Serial.print ("14 Switch "); Serial.println ("");
/*Serial.print("\t");*/Serial.print (" ");Serial.print (Hat14Up);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Left);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Down);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Right);Serial.print("\t\t"); /*Serial.print(" "); */Serial.print (hat14Switch); Serial.println ("");
Serial.println("");
}
// if (Hat14Down == 1 && Hat14Left == 1) {
// Joystick.hat(1,225);
// }
if (Hat14Left == 1 && Hat14Down == 0 && Hat14Up == 0 && Hat14Right == 0) {
Joystick.hat(1,270);
Serial.println( "Left Dir:");
Serial.print ("14 up ");Serial.print ("14 Left ");Serial.print ("14 Down ");Serial.print ("14 Right "); Serial.print ("14 Switch "); Serial.println ("");
/*Serial.print("\t");*/Serial.print (" ");Serial.print (Hat14Up);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Left);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Down);Serial.print("\t"); Serial.print(" ");Serial.print (Hat14Right);Serial.print("\t\t"); /*Serial.print(" "); */Serial.print (hat14Switch); Serial.println ("");
Serial.println("");
}
// if (Hat14Left == 1 && Hat14Up == 1) {
// Joystick.hat(1,315);
// }
// ---------------hat switch F9
// pin 0 - A - [5] Up
// pin 1 - B - [6] Left
// pin 2 - C - [7] Down
// pin 3 - D - [8] Right
// pin PB - [9]
// Read pin values
Hat9Up = !digitalRead(5); // A
Hat9Right = !digitalRead(6); // B
Hat9Down = !digitalRead(7); // C
Hat9Left = !digitalRead(8); // D
if ((Hat9Up == 0)
&& (Hat9Left == 0)
&& (Hat9Down == 0)
&& (Hat9Right == 0)) {
Joystick.hat(2,-1);
if (digitalRead(9) )
{
Joystick.button(26, LOW);
}
else Joystick.button(26, HIGH);
}
if (Hat9Up == 1 && Hat9Left == 0 && Hat9Right == 0) {
Joystick.hat(2,0);
}
// if (Hat9Left == 1 && Hat9Up == 1 ) {
// Joystick.hat(2,45);
// }
if (Hat9Left == 1 && Hat9Up == 0 && Hat9Down == 0) {
Joystick.hat(2,90);
}
// if (Hat9Down == 1 && Hat9Left == 1) {
// Joystick.hat(2,135);
// }
if (Hat9Down == 1 && Hat9Right == 0 && Hat9Left == 0) {
Joystick.hat(2,180);
}
// if (Hat9Down == 1 && Hat9Right == 1) {
// Joystick.hat(2,225);
// }
if (Hat9Right == 1 && Hat9Up == 0 && Hat9Down == 0) {
Joystick.hat(2,270);
}
// if (Hat9Right == 1 && Hat9Up == 1) {
// Joystick.hat(2,315);
// }
}// loop