Vantar hjálp frá forritunar snillingum (arduino)
Sent: Þri 12. Ágú 2014 11:36
Sælir vaktarar, ég er að gera verkefni í arduino í skólanum og er í vandræðum með kóðan minn. Ég á sem sagt að geta látið tvær perur lýsa í 5sek og svo aðrar tvær í 10 sek í fyrsta kerfinum svo þegar ég ýti á takkann eiga ljósin að mynda flæðimynstur í anda knight rider, það er s.s. kerfi 2. málið er að ég verð að leyfa kerfi 1 að klárast áður en það skiptist yfir, ég er að leytast eftir að geta skipt á milli kerfa óháð því hvort það sé búið að klára loopið.
Ég er búinn að komast að því afhverju takkinn virkar bara þegar kerfið er búið og það er vegna þess að ég er að nota delay skipun til að stilla tíman á perunum og ég veit að lausnin á þessu liggur í að setja upp interrupt á takkann þannig að hann hafi forgang yfir delay-inu. Málið er að ég var að forrita í fyrsta sinn í gær og veit ekki hvernig ég á að setja inn þetta interrupt.
Hér er kóðinn. Væri snilld ef einhver vissi um lausn. Google hefur ekki náð að hjálpa mér enþá.
const int buttonPin = 2;
int operatingMode = 0;
int buttonState = 0;
void setup()
{
pinMode(1,OUTPUT);
pinMode(4,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop()
{
delay(100);
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
operatingMode = operatingMode + 1;
}
if( operatingMode == 0)
{
digitalWrite(1, LOW);
digitalWrite(4, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
if( operatingMode == 1)
{
digitalWrite(1,HIGH);
digitalWrite(4,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(5000);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
delay(10000);
digitalRead(buttonPin);
}
if( operatingMode == 2)
{
digitalWrite(1,HIGH);
digitalWrite(4,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(5);
}
Ég er búinn að komast að því afhverju takkinn virkar bara þegar kerfið er búið og það er vegna þess að ég er að nota delay skipun til að stilla tíman á perunum og ég veit að lausnin á þessu liggur í að setja upp interrupt á takkann þannig að hann hafi forgang yfir delay-inu. Málið er að ég var að forrita í fyrsta sinn í gær og veit ekki hvernig ég á að setja inn þetta interrupt.
Hér er kóðinn. Væri snilld ef einhver vissi um lausn. Google hefur ekki náð að hjálpa mér enþá.
const int buttonPin = 2;
int operatingMode = 0;
int buttonState = 0;
void setup()
{
pinMode(1,OUTPUT);
pinMode(4,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop()
{
delay(100);
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
operatingMode = operatingMode + 1;
}
if( operatingMode == 0)
{
digitalWrite(1, LOW);
digitalWrite(4, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
if( operatingMode == 1)
{
digitalWrite(1,HIGH);
digitalWrite(4,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(5000);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
delay(10000);
digitalRead(buttonPin);
}
if( operatingMode == 2)
{
digitalWrite(1,HIGH);
digitalWrite(4,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(100);
digitalWrite(1,LOW);
digitalWrite(4,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
delay(5);
}