• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Dynamiczne paski LED
#1
Napisałem taki oto programik, ktory ma za zadanie w sposob dynamiczny zapalać diody - tak jak to ma miejsce w kierunkowskazach nowszych Audi (jeśli ktoś nie wie o co chodzi - wygooglujcie). Użyłem biblioteki obsługującej wielowątkowość i timery - Timers.h, którą znalazłem tutaj.
Działa mi miganie paskiem w prawo ale nie działa w lewo, nie mam pojęcia czemu  Sad  Możliwe że jest to jakiś prosty błąd ale nie umiem nic znaleźć. Ponadto jeśli ktoś jest w stanie wytknąć jakieś niedopatrzenia w kodzie lub po prostu ma jakies zastrzeżenia prosze śmiało pisać Smile

Kod:
//Project of dynamic LED's similar to Audi indicators
//Arduino Leonardo

//----PINS----//
//2,3,4,5,6 - red LED's//
//10,12 - push buttons//

#include <Timers.h>

Timers <4> t;
unsigned int start;
int led;
bool right = false;
bool left = false;


//method checks if right key is pressed
void buttonR() {
 if(digitalRead(12) == LOW) {
   right = !right;
   left = false;
   led = 2;
   Serial.println("right"); //added to help debugging
 }
}

//method checks if left key is pressed
void buttonL() {
 if(digitalRead(10) == LOW) {
   left = !left;
   right = false;
   led = 6;
   Serial.println("left"); //added to help debugging
 }
}

//method set voltage to HIGH on picked LED pin
void blinkR() {
 if(led <= 6) {
   digitalWrite(led, HIGH);
   Serial.println(led);
   led++;
 } else if (led == 7) {
   turn_off();
   led = 1;
 }
}

//method set voltage to HIGH on picked LED pin - reversed way
void blinkL() {
 if(led >= 2) {
   digitalWrite(led, HIGH);
   Serial.println(led);
   led--;
 } else if (led == 1) {
   turn_off();
   led = 7;
 }
}

//method set LOW voltage to all LED pins
void turn_off() {
 for(int i=2; i<=6; i++)
   digitalWrite(i, LOW);
 led = 0;
}

void setup() {
 pinMode(12, INPUT_PULLUP); //right button
 pinMode(10, INPUT_PULLUP); //left button
 
 for(int i=2; i<=6; i++)
   pinMode(i, OUTPUT);

 start = millis(); //not used yet

 t.attach(0, 200, buttonR); //timer interval used fo buttonR method
 t.attach(1, 0, blinkR);   //timer interval turned off(yet) for blinkR
 
 t.attach(2, 200, buttonL); //similar methods for blinking in opposite way
 t.attach(3, 0, blinkL);

 Serial.begin(9600);
}

void loop() {
 t.process(); //timer update
 
 if(right == true)
   t.updateInterval(1, 75); //setting interval for 75ms for blinkR method
 else if(right == false) {
   t.updateInterval(1, 0); //turning off interval
   turn_off();
 }
 else if(left == true) {
   t.updateInterval(3, 75); //setting interval for 75ms for blinkL method
 }
 else if(left == false) {
   t.updateInterval(3, 0); //turning off interval
   turn_off();
 }
   
}

Mam nadzieje, że pisze w odpowiednim dziale :)
 
Odpowiedź
  


Wiadomości w tym wątku
Dynamiczne paski LED - przez qbic - 03-06-2018, 16:21
RE: Dynamiczne paski LED - przez error105 - 03-06-2018, 17:18
RE: Dynamiczne paski LED - przez es2 - 03-06-2018, 23:56
RE: Dynamiczne paski LED - przez qbic - 04-06-2018, 00:14
RE: Dynamiczne paski LED - przez es2 - 04-06-2018, 00:33
RE: Dynamiczne paski LED - przez kaczakat - 23-10-2018, 23:10
RE: Dynamiczne paski LED - przez es2 - 24-10-2018, 19:58
RE: Dynamiczne paski LED - przez Robson Kerman - 24-10-2018, 20:00
RE: Dynamiczne paski LED - przez es2 - 24-10-2018, 20:07

Skocz do:


Przeglądający: 1 gości