Interrupt not working for Sduino(STM8S103F3)

Hi,
I am using arduino-1.8.19(Tried with arduino-1.8.13 as well) portable.
Code is compiling and uploading fine. But defined interrupt is not actually working. I have tried with other PINs also as interrupt input but non of them are working.
There is one observation with this code is PA2 Pin is highly sensible to interruptby default even with human finger touch(But Not by falling/Rising edge or level 0/1) is creating call of defined interrupt subroutine. Kindly suggest solution if any.
Here is the code I am using:

#define R1 PD1 //ROW1
#define R2 PC6 //ROW2
#define R3 PC5 //ROW3
#define R4 PC3 //ROW4
#define C1 PB4 //COL1
#define C2 PC7 //COL2
#define C3 PC4 //COL3
#define RED PD4 //ACTIVE HIGH
#define GREEN PA3 //ACTIVE HIGH

#define digitalPinToInterrupt(R1) ((R1)==(R1))

volatile uint8_t flag = 0;
int blink_delay = 800;

void button_pressed(void) {
flag = 1;
}

void setup() {
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(C1, OUTPUT);
pinMode(R1, INPUT_PULLUP);
digitalWrite(C1, 0);
digitalWrite(RED, 0);
digitalWrite(GREEN, 0);
attachInterrupt(digitalPinToInterrupt(R1), button_pressed, FALLING);
}

void loop(){
if (flag){
digitalWrite(GREEN, 1);
delay(blink_delay);
digitalWrite(GREEN, 0);
delay(blink_delay);
flag = 0;
}
else {
digitalWrite(RED, 1);
delay(blink_delay);
digitalWrite(RED, 0);
delay(blink_delay);
}
}

Is this your "definition"? The interrupt number has to match the actual interrupt number in the core implementation. You can't just arbitrarily assign it. It's based on hardware assignments.

A PIN is a Phosphorus Indium Nitrate diode or something like that. A pin is a thing that sticks out of an IC.

Probably means it's "floating", high impedance and needs a connection to something. Please post a schematic.

Huh?

I thought this was sorted yesterday overhere, where you asked the same question.

Anyway, try this instead:

#define R1 PD1 //ROW1
#define R2 PC6 //ROW2
#define R3 PC5 //ROW3
#define R4 PC3 //ROW4
#define C1 PB4 //COL1
#define C2 PC7 //COL2
#define C3 PC4 //COL3
#define RED PD4 //ACTIVE HIGH
#define GREEN PA3 //ACTIVE HIGH

volatile uint8_t flag = 0;
int blink_delay = 800;

void button_pressed(void) {
  flag = 1;
}

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(C1, OUTPUT);
  pinMode(R1, INPUT_PULLUP);
  digitalWrite(C1, 0);
  digitalWrite(RED, 0);
  digitalWrite(GREEN, 0);
  attachInterrupt((R1), button_pressed, FALLING);
}

void loop() {
  if (flag) {
    digitalWrite(GREEN, 1);
    delay(blink_delay);
    digitalWrite(GREEN, 0);
    delay(blink_delay);
    flag = 0;
  }
  else {
    digitalWrite(RED, 1);
    delay(blink_delay);
    digitalWrite(RED, 0);
    delay(blink_delay);
  }
}


Yes its same,
Thank you :smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.