여러 가지 장기 실행 섹션 (한 번에 15 분이 될 수 있음)이 있고 실행 섹션을 결정하기 위해 "IF"문을 사용하는 프로그램이 있습니다.버튼 누르기 스케치 시작 부분으로 건너 뛰기
내 문제는 버튼을 눌러 현재 섹션이 완료 될 때까지 기다리지 않고 즉시 다른 섹션으로 이동할 수 있기를 원합니다.
나는 외부 인터럽트를 사용할 수 있다고 생각했지만 인터럽트가 발생하면 프로그램이 인터럽트 코드 실행을 멈추고 인터럽트가 호출되기 전과 같은 장소에서 계속 실행됩니다.
나는 "goto"문을 사용할 수 있다고 생각했는데 레이블이 "goto"문을 사용하는 함수 밖에있을 경우 컴파일러가 불평하기 때문에 ether가 작동하지 않습니다.
나는 기본적으로 버튼을 눌러 다음 버튼을 눌렀을 때 무슨 일을 하던지 "IF"문으로 넘어갈 수 있기를 원한다.
지연은 프로그램이 수행 할 작업을 시뮬레이션하는 것입니다. 프로그램은 실제로 많은 다른 모드를 가진 로봇을위한 것입니다. 모드 1에서 주변을 탐색합니다. 모드 2에서는 컨트롤러로 제어 할 수 있습니다. 모드 3에서는 PIR 센서가 어떤 물건을 볼 때까지 앉아서 로밍을 시작합니다.
로봇이 어떤 일을하든 어떤 상태에서도있을 수 있습니다. 버튼을 누르고 중지하고 모드를 변경하려고합니다.
예 코드
volatile int state = LOW;
int mode = 0;
void setup()
{
Serial.begin(9600);
attachInterrupt(0, blink, RISING);
}
void loop()
{
Serial.println();
Serial.print("##########################");
Serial.println();
Serial.print("Start it again");
Serial.println();
Serial.print("##########################");
if(mode==0)
{Serial.println();
Serial.print("0");
Serial.println();
delay(30000);}
if(mode==1)
{Serial.println();
Serial.print("1");
Serial.println();
delay(30000);}
if(mode==2)
{Serial.println();
Serial.print("2");
Serial.println();
delay(30000);}
if(mode==3)
{Serial.println();
Serial.print("3");
Serial.println();
delay(30000);}
if(mode==4)
{Serial.println();
Serial.print("4");
Serial.println();
delay(30000);}
}
void blink()
{ delay(800); // This is just a delay to allow for the button press
if(mode >= 4)
{mode = 0;}
else{mode = ++mode ;}
}
지연은 프로그램에서 수행 할 작업을 시뮬레이션하는 것입니다. 프로그램은 실제로 많은 다른 모드를 가진 로봇을위한 것입니다. 모드 1에서 주변을 탐색합니다. 모드 2에서는 컨트롤러로 제어 할 수 있습니다. 모드 3에서는 PIR 센서가 어떤 물건을 볼 때까지 앉아서 로밍을 시작합니다. 로봇은 어떤 일을하는 데 어떤 상태에있을 수 있습니다. 나는 버튼을 누르고 정지하고 모드를 변경하려고합니다. – justinf
똑같은 사항이 적용됩니다. - 각 모드의 기능 전반에 걸쳐 정기적으로 버튼을 눌렀는지 확인한 후 돌아옵니다. 시간이 오래 걸리는 하위 함수가있는 경우에도 버튼을 눌러도 동일한 결과가 적용됩니다. –