Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
arduino_cpp [2018/11/14 13:46] super_admin |
arduino_cpp [2019/06/24 20:29] (текущий) |
||
|---|---|---|---|
| Строка 114: | Строка 114: | ||
| } | } | ||
| + | </code> | ||
| + | |||
| + | ===== Traffic lights example (без использования блокировочных функций delay()) ===== | ||
| + | |||
| + | <code C++> | ||
| + | /* | ||
| + | |||
| + | * Traffic lights example | ||
| + | * | ||
| + | * Red light to pin 7 | ||
| + | * Yellow light to pin 6 | ||
| + | * Green light to pin 5 | ||
| + | * | ||
| + | * Pedestrian Red light to pin 4 | ||
| + | * Pedestrian Green light to pin 3 | ||
| + | * Pedestrian pushbutton pin 2 (it is connected to the GND, therefore internal PULLUP resistor must be ON) | ||
| + | * | ||
| + | * Arduino IDE 1.6.12 | ||
| + | */ | ||
| + | |||
| + | // Pins | ||
| + | int red = 7, yellow = 6, green = 5; | ||
| + | int p_red = 4, p_green = 3; | ||
| + | int button_1 = 2; | ||
| + | |||
| + | int butState_1 = HIGH; | ||
| + | int butDelay = 10; | ||
| + | int checkButton_1 = 0; | ||
| + | uint32_t prevButt_time_1 = 0; | ||
| + | uint32_t prevTraffic_time = 0; | ||
| + | |||
| + | // System variables | ||
| + | byte state = 0; // initial state | ||
| + | |||
| + | unsigned long i = 1; // system counter | ||
| + | unsigned int del = 100; // system delay legnth | ||
| + | boolean flag = false; | ||
| + | |||
| + | void change_traffic_lights(uint8_t r,uint8_t y, uint8_t g){ | ||
| + | digitalWrite(red, r); | ||
| + | digitalWrite(yellow, y); | ||
| + | digitalWrite(green, g); | ||
| + | } | ||
| + | |||
| + | void change_pedastrian_lights(uint8_t r,uint8_t g){ | ||
| + | digitalWrite(p_red, r); | ||
| + | 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; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void setup() { | ||
| + | pinMode(red, OUTPUT); | ||
| + | pinMode(yellow, OUTPUT); | ||
| + | pinMode(green, OUTPUT); | ||
| + | pinMode(p_red, OUTPUT); | ||
| + | pinMode(p_green, OUTPUT); | ||
| + | pinMode(button_1, INPUT_PULLUP); | ||
| + | Serial.begin(9600); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | // Check button | ||
| + | |||
| + | |||
| + | switch(state){ | ||
| + | case 0: | ||
| + | change_traffic_lights(0,0,1); | ||
| + | change_pedastrian_lights(1,0); | ||
| + | | ||
| + | if(checkButton()){ | ||
| + | prevTraffic_time = millis(); | ||
| + | state = 5; | ||
| + | Serial.println("state = 0; "); | ||
| + | } | ||
| + | break; | ||
| + | case 5: | ||
| + | change_traffic_lights(0,0,1); | ||
| + | change_pedastrian_lights(1,0); | ||
| + | if(millis() - prevTraffic_time >= 3000){ | ||
| + | prevTraffic_time = millis(); | ||
| + | state = 3; | ||
| + | Serial.println("state = 5; "); | ||
| + | } | ||
| + | break; | ||
| + | case 1: | ||
| + | |||
| + | change_traffic_lights(1,1,0); | ||
| + | change_pedastrian_lights(1,0); | ||
| + | if(millis() - prevTraffic_time >= 3000){ | ||
| + | prevTraffic_time = millis(); | ||
| + | |||
| + | Serial.println("state = 1; "); | ||
| + | state = 0; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case 2: | ||
| + | |||
| + | change_traffic_lights(1,0,0); | ||
| + | change_pedastrian_lights(0,1); | ||
| + | if(millis() - prevTraffic_time >= 5000){ | ||
| + | prevTraffic_time = millis(); | ||
| + | |||
| + | Serial.println("state = 2; "); | ||
| + | state = 1; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case 3: | ||
| + | change_traffic_lights(0,1,0); | ||
| + | change_pedastrian_lights(1,0); | ||
| + | if(millis() - prevTraffic_time >= 2000){ | ||
| + | prevTraffic_time = millis(); | ||
| + | |||
| + | Serial.println("state = 3; "); | ||
| + | state = 2; | ||
| + | } | ||
| + | break; | ||
| + | default: | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| </code> | </code> | ||