Arduino 有限状态机对数字计数器建模
我必须用Arduino C中的enum和switch/case属性编码创建一个有限状态机FSM来创建一个数字计数器。我应该有16个州:0-7倒计时和7-0倒计时。每当用户单击键盘上的一个键时,计数就会反转。例如,它应该打印0,1,2,3,4,5,6,7,0,1,2,3,4,…,然后在按下一个键后,打印4,3,2,1,0,7,6,5。。。等等都是打印出来的。我完全卡住了,需要一些帮助。谢谢 我有一个代码的总体框架:Arduino 有限状态机对数字计数器建模,arduino,Arduino,我必须用Arduino C中的enum和switch/case属性编码创建一个有限状态机FSM来创建一个数字计数器。我应该有16个州:0-7倒计时和7-0倒计时。每当用户单击键盘上的一个键时,计数就会反转。例如,它应该打印0,1,2,3,4,5,6,7,0,1,2,3,4,…,然后在按下一个键后,打印4,3,2,1,0,7,6,5。。。等等都是打印出来的。我完全卡住了,需要一些帮助。谢谢 我有一个代码的总体框架: enum State { 0; 1; 2; //
enum State {
0;
1;
2;
// 16 of these...
}
void setup() {
Serial.begin(9600);
Serial.println("FSM Forwards & Backwards");
}
void loop() {
state = nextState(state);
switch (state) {
case 0:
// more states(cases) here
// create a FSM to determine the next state of the machine.
}
State nextState(State state){
char input = Serial.read();
// more states(cases) here
}
bool checkReverse(){
// which reverses the direction of the counter if a key on the
keyboard has been pressed
}
对我来说好像是家庭作业。
ARDUNO使用的是实际的C++语言。它包含了许多不同的图书馆思想
您可能想要这样做,注意它的内部状态是由变量state和direction组成的。它将每秒更新自动机的状态。同时,它将扫描输入数据中的“r”字符并反转方向
struct FSM {
enum state_t {
step0,
step1,
...
step8,
step9,
...
};
state_t state;
bool direction;
FSM() {state = step0;}
void nextState(bool toggle) {
state_t oldState = state;
state_t ret;
if(direction) {
switch(oldState) {
case step0:
ret = step8;
break;
case step1:
ret = step8;
break;
...
}
else {
case step0:
ret = step1;
break;
case step1:
ret = step2;
break;
...
}
state = ret; // Update state
direction = toggle ? !direction: direction; // Update toggle
}
int getOutput() {
switch(state) {
case step0:
return 0;
...
case 8:
return 7;
case 9:
return 6;
...
};
FSM fsm;
bool toggle = false;
unsigned intlastTime;
void setup() {
lastTime = millis();
}
void loop() {
int c = Serial.read();
if(c == 'r') toggle = ! toggle;
bool timeToCount = false;
if(lastTime + 1000 < millis()) { // Every second
timeToCount = true;
lastTime = millis();
fsm.nextState(toggle); //
Serial.println(fsm.getOutput());
toggle = false;
}
}
状态=下一个状态状态;foward声明的函数原型在哪里?什么是国家?显示问题的位置在哪里?这个网站是关于具体的C代码问题,而不是我该怎么做?状态为枚举类型枚举状态C区分大小写。无论如何,Arduino不是C,但与之类似。状态是FSM的状态