2 różne czasy delay w tym samym momencie

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
pentos
Majsterkowicz
Posty: 119
Rejestracja: 2 sty 2013, 21:35

2 różne czasy delay w tym samym momencie

Post autor: pentos » 4 sty 2014, 01:18

Witam
Od pewnego czasu męczy mnie pewne pytanie, otóż mamy 2 programy:

Kod: Zaznacz cały

int diodaPin = 13;             

void setup() {
  pinMode(diodaPin, OUTPUT);     
}

void loop() {
  digitalWrite(diodaPin, HIGH);  
  delay(1000);
  digitalWrite(diodaPin, LOW);   
  delay(1000);
}
oraz

Kod: Zaznacz cały

int diodaPin = 12;  
int potPin = 0;     
int pot;            
int przerwa;        
 
void setup() {
  pinMode(diodaPin, OUTPUT);
}
 
void loop() {
  pot = analogRead(potPin);
 przerwa = map(pot, 0, 1023, 50, 3000);
 
  digitalWrite(diodaPin, HIGH);
  delay(przerwa);               
  digitalWrite(diodaPin, LOW);
  delay(przerwa);               
}
Czy da się wykonać te programy w tym samym czasie na 1 uC? Prościej mówiąc: jak scalić te 2 kody aby na pinie 13 dioda mrugała ze stałym czasem i w tym samym czasie żeby dioda na pinie 12 mrugała z czasem zależnym od położenia potencjometru?

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


siwy2411
Młodszy majsterkowicz
Posty: 29
Rejestracja: 4 cze 2013, 14:56

Re: 2 różne czasy delay w tym samym momencie

Post autor: siwy2411 » 4 sty 2014, 01:53

nie da się wykonać tych dwóch programów jednocześnie w tej postaci.
rozwiązaniem Twojego problemu jest zastosowanie funkcji millis(); i sprawdzanie ile czasu minęło od zapalenia/zgaszenia diody i porównywanie tego z pożądanym czasem tych akcji.
pentos
Majsterkowicz
Posty: 119
Rejestracja: 2 sty 2013, 21:35

Re: 2 różne czasy delay w tym samym momencie

Post autor: pentos » 5 sty 2014, 23:27

Dobra dzięki, z tym millis to już sobie doczytałem http://sprae.jogger.pl/2011/10/14/wielo ... w-arduino/.
Teraz mam inny problem, mam taki kod:

Kod: Zaznacz cały

#define buttonPin2 = 2;   
#define buttonPin3 = 3;
#define  buttonPin4 = 4;
#define  ledPin = 13;      

int d2 = 50;
int d3 = 500;
int d4 = 1000;

int buttonState2 = 1;
int buttonState3 = 1;
int buttonState4 = 1;
int d = 0

void setup() {
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP); 
pinMode(buttonPin4, INPUT_PULLUP); 
}

void loop(){
  
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
  buttonState4 = digitalRead(buttonPin4);

 
  if (buttonState2 == LOW) {     
    
    (d = d2);  
  } 
  if (buttonState3 == LOW) {     
    
    (d = d3);  
}
if (buttonState4 == LOW) {     
    
    (d = d4);
} 
   digitalWrite(ledPin, HIGH);   
  delay(d);               
  digitalWrite(ledPin, LOW);   
  delay(d);  
}  
i przy kompilacji wywala:

Kod: Zaznacz cały


sketch_jan05a:8: error: expected unqualified-id before numeric constant
sketch_jan05a:16: error: expected ',' or ';' before 'void'
sketch_jan05a.ino: In function 'void loop()':
sketch_jan05a:25: error: expected primary-expression before '=' token
sketch_jan05a:25: error: expected primary-expression before ')' token
sketch_jan05a:25: error: expected `;' before ')' token
sketch_jan05a:26: error: expected primary-expression before '=' token
sketch_jan05a:26: error: expected primary-expression before ')' token
sketch_jan05a:26: error: expected `;' before ')' token
sketch_jan05a:27: error: expected primary-expression before '=' token
sketch_jan05a:27: error: expected primary-expression before ')' token
sketch_jan05a:27: error: expected `;' before ')' token
sketch_jan05a:42: error: expected primary-expression before '=' token
sketch_jan05a:42: error: expected primary-expression before ',' token
sketch_jan05a:42: error: expected `;' before ')' token
sketch_jan05a:44: error: expected primary-expression before '=' token
sketch_jan05a:44: error: expected primary-expression before ',' token
sketch_jan05a:44: error: expected `;' before ')' token
Chcę osiągnąć żeby czas delay zależał od wciśniętego przycisku. Co w tym kodzie jest źle?
Malen
Młodszy majsterkowicz
Posty: 27
Rejestracja: 2 sty 2014, 22:47

Re: 2 różne czasy delay w tym samym momencie

Post autor: Malen » 6 sty 2014, 00:09

Błędy są wynikiem błędnie zastosowanej dyrektywy #define. Należy zmienić je na taki zapis ( bez znaku równości i średnika):

Kod: Zaznacz cały

#define buttonPin2  2  
#define buttonPin3 3
#define  buttonPin4 4
#define  ledPin  13
Tutaj masz cały kod.

Kod: Zaznacz cały

#define buttonPin2  2   
#define buttonPin3  3
#define  buttonPin4  4
#define  ledPin  13     

int d2 = 50;
int d3 = 500;
int d4 = 1000;

int buttonState2 = 1;
int buttonState3 = 1;
int buttonState4 = 1;
int d = 0;

void setup() {
    pinMode(ledPin, OUTPUT);      
    pinMode(buttonPin2, INPUT_PULLUP);
    pinMode(buttonPin3, INPUT_PULLUP); 
    pinMode(buttonPin4, INPUT_PULLUP); 
}

void loop(){
  
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
  buttonState4 = digitalRead(buttonPin4);

 
  if (buttonState2 == LOW) {     
    
    (d = d2);
  } 
  if (buttonState3 == LOW) {     
    
    (d = d3) ; 
}
if (buttonState4 == LOW) {     
    
    (d = d4);
} 
   digitalWrite(ledPin, HIGH);   
  delay(d);               
  digitalWrite(ledPin, LOW);   
  delay(d);  
}
Awatar użytkownika
Marhef
Złota rączka
Posty: 1164
Rejestracja: 18 lis 2011, 02:18

Re: 2 różne czasy delay w tym samym momencie

Post autor: Marhef » 6 sty 2014, 09:40

I zapomniałeś średnika w linii int d=0;
ODPOWIEDZ

Strony partnerskie: