Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
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> | ||