A A+ A++

Program zajęć z cyklu "Rozwiń skrzydła"
Politechnika Śląska 

Temat: Rozwiń skrzydła z mechatroniką

Arduino UNO – Sygnalizator drogowo (semafor) na bazie LED podłączonych do pinu 11, 12 i 13

[Arduino UNO, 3 x LED]

				
					//ROZWIŃ SKRZYDŁA
//LED - sygnalizacja świetlna
//Adam Mańka

void setup() {
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(11,HIGH);
  delay(100);
  digitalWrite(12,HIGH);
  delay(100);
  digitalWrite(13,HIGH);
  delay(100);
delay(1000);
  digitalWrite(11,LOW);
  delay(100);
  digitalWrite(12,LOW);
  delay(100);
  digitalWrite(13,LOW);
  delay(100);
delay(1000);
}

				
			
Program do sterowania sygnalizatorem z Arduino UNO poprzez PC oraz poprzez Bluetooth (SoftwareSerial) z wykorzystaniem np. telefonu z Androidem.

[Sygnalizator / semafor Arduino UNO, sterowanie PC, komunikacja z komputerem, Bluetooth, SoftwareSerial]

				
					//ROZWIŃ SKRZYDŁA
//LED - sygnalizacja świetlna - sterowana komendami r=3, y=1, g=2, b=1 
//Adam Mańka

// Definicje pinów
const int RED = 13;
const int YEL = 12;
const int GRN = 11;

// Czasy świecenia (w milisekundach, domyślnie np. 2s)
unsigned long tRed = 2000, tYel = 1000, tGrn = 2000, tBot = 1000;
unsigned long previousMillis = 0;
int stan = 0; // 0: Czerwone, 1: Czerw+Zółte, 2: Zielone, 3: Żółte
bool d= 0;
unsigned long currentMillis;
unsigned long interval;

String komenda;

void setup() {
  Serial.begin(9600);
  pinMode(RED, OUTPUT);
  pinMode(YEL, OUTPUT);
  pinMode(GRN, OUTPUT);
  Serial.println("Rozwin skrzydla - sygnalizator [r,y,g,b,on,of np. r=200]");
}

void loop() {
  // Obsługa komend z PC (np. "r=30", "y=10", "g=50")
  if (Serial.available() > 0) {
    komenda = Serial.readStringUntil('\n');
    komenda.trim();
    komenda.toLowerCase();    
    if (komenda=="on") {
      d=true; 
      Serial.println("Demo mode on");      
    }
      else if (komenda=="off") {
      d=false;
      Serial.println("Demo mode off");            
    }
    //czasy
    if      (sscanf(komenda.c_str(), "r=%lu", &tRed)) { 
      Serial.print("Nowy czas RED: "); Serial.println(tRed);
    } 
    else if (sscanf(komenda.c_str(), "y=%lu", &tYel)) {      
      Serial.print("Nowy czas YELLOW: "); Serial.println(tYel);
    } 
    else if (sscanf(komenda.c_str(), "g=%lu", &tGrn)) {      
      Serial.print("Nowy czas GREEN: "); Serial.println(tGrn);
    }
    else if (sscanf(komenda.c_str(), "b=%lu", &tBot)) {      
      Serial.print("Nowy czas BOTH: "); Serial.println(tBot);
    }    
  }

  currentMillis = millis(); // Sygnalizacja (bez delay)
  if (d==true) demo();
  // Ustalanie czasu trwania obecnej fazy
  if (stan == 0) interval = tRed;           // Czerwone
  else if (stan == 1) interval = tBot;      // Czerw+Żółte
  else if (stan == 2) interval = tGrn;      // Zielone
  else interval = tYel;                     // Żółte (3)

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    stan++;
    if (stan > 3) stan = 0;
    // Przełączanie świateł
    digitalWrite(RED, (stan == 0 || stan == 1));
    digitalWrite(YEL, (stan == 1 || stan == 3));//3 jak chcemy żółte po zielonym
    digitalWrite(GRN, (stan == 2));
  }
}

void demo (){
bool syg[][3] = {
  {1, 0, 0}, 
  {1, 1, 0}, 
  {1, 1, 1}, 
  {1, 1, 1}, 
  {0, 1, 1}, 
  {0, 0, 1},   
  {0, 0, 1},   
  {0, 1, 1},
  {1, 1, 1},
  {1, 1, 1},
  {1, 1, 0},  
  {1, 0, 0}};
  
  if (currentMillis - previousMillis >= 150) {
    previousMillis = currentMillis;
    digitalWrite(RED, syg[stan][0]); digitalWrite(YEL, syg[stan][1]); digitalWrite(GRN, syg[stan][2]); 
    stan++;    
    if (stan >= (sizeof(syg) / sizeof(syg[0]))) stan = 0;
    }   
}

				
			
Nie ponosimy odpowiedzialności za ewentualne szkody spowodowane wykorzystaniem materiałów tu zawartych.
Adam Mańka - adam.manka(znak)polsl.pl

© Politechnika Śląska

Polityka prywatności

Całkowitą odpowiedzialność za poprawność, aktualność i zgodność z przepisami prawa materiałów publikowanych za pośrednictwem serwisu internetowego Politechniki Śląskiej ponoszą ich autorzy - jednostki organizacyjne, w których materiały informacyjne wytworzono. Prowadzenie: Centrum Informatyczne Politechniki Śląskiej (www@polsl.pl)

Deklaracja dostępności

„E-Politechnika Śląska - utworzenie platformy elektronicznych usług publicznych Politechniki Śląskiej”

Fundusze Europejskie
Fundusze Europejskie
Fundusze Europejskie
Fundusze Europejskie