Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
arduino_cpp [2018/11/16 10:45] super_admin [Traffic lights example (модифицированная версия)] |
arduino_cpp [2019/06/24 20:29] (текущий) |
||
---|---|---|---|
Строка 115: | Строка 115: | ||
</code> | </code> | ||
+ | |||
+ | ===== Traffic lights example (без использования блокировочных функций delay()) ===== | ||
<code C++> | <code C++> | ||
Строка 127: | Строка 129: | ||
* Pedestrian Red light to pin 4 | * Pedestrian Red light to pin 4 | ||
* Pedestrian Green light to pin 3 | * Pedestrian Green light to pin 3 | ||
- | * Pedestrian pushbutton_1 pin 2 (it is connected to the GND, therefore internal PULLUP resistor must be ON) | + | * Pedestrian pushbutton pin 2 (it is connected to the GND, therefore internal PULLUP resistor must be ON) |
* | * | ||
* Arduino IDE 1.6.12 | * Arduino IDE 1.6.12 | ||
Строка 136: | Строка 138: | ||
int p_red = 4, p_green = 3; | int p_red = 4, p_green = 3; | ||
int button_1 = 2; | int button_1 = 2; | ||
+ | |||
int butState_1 = HIGH; | int butState_1 = HIGH; | ||
int butDelay = 10; | int butDelay = 10; | ||
int checkButton_1 = 0; | int checkButton_1 = 0; | ||
- | uint32_t prevButt_1_time = 0; | + | uint32_t prevButt_time_1 = 0; |
uint32_t prevTraffic_time = 0; | uint32_t prevTraffic_time = 0; | ||
Строка 158: | Строка 161: | ||
digitalWrite(p_red, r); | digitalWrite(p_red, r); | ||
digitalWrite(p_green, g); | digitalWrite(p_green, g); | ||
+ | } | ||
+ | |||
+ | uint8_t checkButton(){ | ||
+ | uint8_t newButtonState = digitalRead(button_1); | ||
+ | if(newButtonState != butState_1){ | ||
+ | Serial.print("newButtonState = "); Serial.println(newButtonState); | ||
+ | return true; | ||
+ | } else { | ||
+ | return false; | ||
+ | } | ||
} | } | ||
Строка 171: | Строка 184: | ||
void loop() { | void loop() { | ||
- | // Check button_1 | + | // Check button |
- | if(digitalRead(button_1) != butState_1 && !checkButton_1) { | + | |
- | Serial.println("checkButton_1"); | + | |
- | checkButton_1 = 1; | + | |
- | prevButt_1_time = millis(); | + | |
- | Serial.println(flag); | + | |
- | } | ||
- | if (checkButton_1 && (millis() - prevButt_1_time) >= butDelay){ | ||
- | checkButton_1 = 0; | ||
- | if (digitalRead(button_1) != butState_1){ | ||
- | flag = true; | ||
- | } | ||
- | Serial.println(flag); | ||
- | } | ||
- | | ||
- | //delay(del); | ||
switch(state){ | switch(state){ | ||
case 0: | case 0: | ||
change_traffic_lights(0,0,1); | change_traffic_lights(0,0,1); | ||
change_pedastrian_lights(1,0); | change_pedastrian_lights(1,0); | ||
- | if(flag){ | + | |
- | prevTraffic_time = millis(); | + | if(checkButton()){ |
- | flag = false; | + | prevTraffic_time = millis(); |
- | Serial.print("case 0, state = 5 ");Serial.println(flag); | + | state = 5; |
- | state = 5; | + | Serial.println("state = 0; "); |
- | } | + | } |
break; | break; | ||
case 5: | case 5: | ||
Строка 203: | Строка 202: | ||
change_pedastrian_lights(1,0); | change_pedastrian_lights(1,0); | ||
if(millis() - prevTraffic_time >= 3000){ | if(millis() - prevTraffic_time >= 3000){ | ||
- | prevTraffic_time = millis(); | + | prevTraffic_time = millis(); |
- | + | state = 3; | |
- | Serial.print("case 5, state = 3 ");Serial.println(flag); | + | Serial.println("state = 5; "); |
- | state = 3; | + | |
} | } | ||
break; | break; | ||
Строка 216: | Строка 214: | ||
prevTraffic_time = millis(); | prevTraffic_time = millis(); | ||
- | Serial.print("case 1, state = 0 ");Serial.println(flag); | + | Serial.println("state = 1; "); |
state = 0; | state = 0; | ||
} | } | ||
Строка 225: | Строка 223: | ||
change_traffic_lights(1,0,0); | change_traffic_lights(1,0,0); | ||
change_pedastrian_lights(0,1); | change_pedastrian_lights(0,1); | ||
- | if(millis() - prevTraffic_time >= 10000){ | + | if(millis() - prevTraffic_time >= 5000){ |
prevTraffic_time = millis(); | prevTraffic_time = millis(); | ||
- | Serial.print("case 2, state = 1 ");Serial.println(flag); | + | Serial.println("state = 2; "); |
- | state = 1; | + | state = 1; |
- | } | + | } |
break; | break; | ||
Строка 239: | Строка 237: | ||
prevTraffic_time = millis(); | prevTraffic_time = millis(); | ||
- | Serial.print("case 3, state = 2 ");Serial.println(flag); | + | Serial.println("state = 3; "); |
- | state = 2; | + | state = 2; |
- | } | + | } |
break; | break; | ||
default: | default: | ||
break; | break; | ||
} | } | ||
- | i++; | ||
- | |||
} | } | ||
- | |||
</code> | </code> |