03-06-2018, 16:21
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 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ć
Działa mi miganie paskiem w prawo ale nie działa w lewo, nie mam pojęcia czemu 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ć
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 :)