Инструменты пользователя

Инструменты сайта


arduino_cpp

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
arduino_cpp [2018/11/14 13:46]
super_admin
arduino_cpp [2018/11/16 18:00]
super_admin [Traffic lights example (без использования блокировочных функций delay())]
Строка 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>​
arduino_cpp.txt · Последние изменения: 2019/06/24 20:29 (внешнее изменение)