Síða 1 af 1

Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 11:36
af I-JohnMatrix-I
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);
}

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 12:23
af axyne

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 13:24
af I-JohnMatrix-I
axyne skrifaði:kíktu á þetta: http://arduino.cc/en/Reference/AttachInterrupt


Ég þakka ábendinguna en ég var búinn að skoða þetta og lesa í gegn örugglega 5 sinnum en fæ ekki interruptið til að virka. :)

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 14:36
af axyne
Hvaða Arduino ertu með og hvaða pinna ertu með takkann á ?

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 14:42
af I-JohnMatrix-I
Ég er að vinna með arduino uno duemilanove og ég er með takkann á digital pin2. En ég hef ekki komist svo langt að láta compilerinn samþyggja interruptið því ég veit ekki hvernig eða hvar ég bæti honum inn.

Var búinn að reyna

attachinterrupt(2, veit ekki hvað fer hér?, CHANGE)

bæði hjá void setup og efst uppi.

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 17:39
af Frantic
Af hverju ertu ekki að nota loopur fyrir þetta?
Kóðinn styttist um helling.

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 18:20
af axyne
Búðu til fallið

Kóði: Velja allt

void toggle()
{
    //það sem þú vilt að gerist þegar ýtt er að takkann.
}

og bætir þessu við inní setup()

Kóði: Velja allt

attachinterrupt(2, toggle, Rising)

Mundu að nota volatile fyrir framan breytur þegar þú skilgreinir þær í upphafi ef þú ætlar að breyta þeim þegar interrupt á sér stað.

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Þri 12. Ágú 2014 20:01
af I-JohnMatrix-I
Snilld takk fyrir hjálpina :D

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Mið 13. Ágú 2014 16:05
af starionturbo
Það er sniðugt að venja sig á að endurtaka hlutina sem minnst, sérstaklega í arduino þar sem maður er með takmarkað pláss.

Þetta gæti litið svona út t.d.

int pinLeds[4] = {1, 4, 11, 12};
int pinButton = 2;

int mode = 0;
int mode_1_map[2][4] = {{1, 1, 0, 0}, {0, 0, 1, 1}};
int mode_2_map[6][4] = {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 1, 0, 0}};

void setup()
{
  for (int i = 0; i < 4; i++)
  {
    pinMode(pinLeds[i], OUTPUT);
  }

  pinMode(pinButton, INPUT);
  attachInterrupt(pinButton, toggle, RISING);
}

void loop() {}

void toggle()
{
  mode++;

  if (mode % 2 == 0) ledMap(5000, mode_1_map);
  if (mode % 2 == 1) ledMap(100, mode_2_map);
}

void ledMap (int ms, int map[][4])
{
  for (int x = 0; x < sizeof(map); x++)
  {
    for (int y = 0; y < 4; y++)
    {
      digitalWrite(pinLeds[y], map[x][y] == 1 ? HIGH : LOW);
    }

    delay(ms);
  }
}

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Mið 13. Ágú 2014 16:45
af I-JohnMatrix-I
Já sé þetta er mun snyrtilegra. Málið er að ég hafði aldrei séð forritun áður og svo fékk ég bara þetta verkefni og kennarinn fór hehe. Varð svo heillaður af þessu öllu saman að ég pantaði mér Arduino starter kit frá kína. :D

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Fim 14. Ágú 2014 10:26
af starionturbo
Það er gaman að heyra, vantar klárlega fleiri microcontroller áhugamenn á íslandi.

Re: Vantar hjálp frá forritunar snillingum (arduino)

Sent: Fim 14. Ágú 2014 11:48
af Jon1
starionturbo skrifaði:Það er gaman að heyra, vantar klárlega fleiri microcontroller áhugamenn á íslandi.

+1