Vantar hjálp frá forritunar snillingum (arduino)

Skjámynd

Höfundur
I-JohnMatrix-I
</Snillingur>
Póstar: 1020
Skráði sig: Fös 05. Apr 2013 19:01
Reputation: 101
Staðsetning: Reykjanesbær
Staða: Ótengdur

Vantar hjálp frá forritunar snillingum (arduino)

Pósturaf I-JohnMatrix-I » Þ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);
}




axyne
Of mikill frítími
Póstar: 1777
Skráði sig: Fim 12. Jún 2003 17:16
Reputation: 72
Staðsetning: DK
Staða: Ótengdur

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

Pósturaf axyne » Þri 12. Ágú 2014 12:23



Electronic and Computer Engineer

Skjámynd

Höfundur
I-JohnMatrix-I
</Snillingur>
Póstar: 1020
Skráði sig: Fös 05. Apr 2013 19:01
Reputation: 101
Staðsetning: Reykjanesbær
Staða: Ótengdur

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

Pósturaf I-JohnMatrix-I » Þri 12. Ágú 2014 13:24

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. :)




axyne
Of mikill frítími
Póstar: 1777
Skráði sig: Fim 12. Jún 2003 17:16
Reputation: 72
Staðsetning: DK
Staða: Ótengdur

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

Pósturaf axyne » Þri 12. Ágú 2014 14:36

Hvaða Arduino ertu með og hvaða pinna ertu með takkann á ?


Electronic and Computer Engineer

Skjámynd

Höfundur
I-JohnMatrix-I
</Snillingur>
Póstar: 1020
Skráði sig: Fös 05. Apr 2013 19:01
Reputation: 101
Staðsetning: Reykjanesbær
Staða: Ótengdur

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

Pósturaf I-JohnMatrix-I » Þri 12. Ágú 2014 14:42

É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.



Skjámynd

Frantic
FanBoy
Póstar: 797
Skráði sig: Mið 04. Mar 2009 17:43
Reputation: 6
Staða: Ótengdur

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

Pósturaf Frantic » Þri 12. Ágú 2014 17:39

Af hverju ertu ekki að nota loopur fyrir þetta?
Kóðinn styttist um helling.




axyne
Of mikill frítími
Póstar: 1777
Skráði sig: Fim 12. Jún 2003 17:16
Reputation: 72
Staðsetning: DK
Staða: Ótengdur

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

Pósturaf axyne » Þri 12. Ágú 2014 18:20

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ð.


Electronic and Computer Engineer

Skjámynd

Höfundur
I-JohnMatrix-I
</Snillingur>
Póstar: 1020
Skráði sig: Fös 05. Apr 2013 19:01
Reputation: 101
Staðsetning: Reykjanesbær
Staða: Ótengdur

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

Pósturaf I-JohnMatrix-I » Þri 12. Ágú 2014 20:01

Snilld takk fyrir hjálpina :D




starionturbo
Gúrú
Póstar: 542
Skráði sig: Mán 24. Des 2007 11:23
Reputation: 8
Staðsetning: localhost
Staða: Ótengdur

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

Pósturaf starionturbo » Mið 13. Ágú 2014 16:05

Þ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);
  }
}


Foobar

Skjámynd

Höfundur
I-JohnMatrix-I
</Snillingur>
Póstar: 1020
Skráði sig: Fös 05. Apr 2013 19:01
Reputation: 101
Staðsetning: Reykjanesbær
Staða: Ótengdur

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

Pósturaf I-JohnMatrix-I » Mið 13. Ágú 2014 16:45

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




starionturbo
Gúrú
Póstar: 542
Skráði sig: Mán 24. Des 2007 11:23
Reputation: 8
Staðsetning: localhost
Staða: Ótengdur

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

Pósturaf starionturbo » Fim 14. Ágú 2014 10:26

Það er gaman að heyra, vantar klárlega fleiri microcontroller áhugamenn á íslandi.


Foobar

Skjámynd

Jon1
Geek
Póstar: 843
Skráði sig: Sun 20. Jan 2008 04:25
Reputation: 15
Staðsetning: Rvk
Staða: Ótengdur

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

Pósturaf Jon1 » Fim 14. Ágú 2014 11:48

starionturbo skrifaði:Það er gaman að heyra, vantar klárlega fleiri microcontroller áhugamenn á íslandi.

+1


i7 6700k @ 4.0 GHz | Custom Loop Water Cooling| AsRock z170 extreme 6+ | G.skill trident z 16 GB DDR4 @ 3200 MHz | Gigabyte Aorus GTX 1080ti| Wallmount | BeQuiet Darkpower pro 850+ | Samsung 950 pro nvme m.2 512gb + Samsung SSD 850 evo 2.5'' 2x250GB SATA3|Acer X34a - BenQ G2450 24'' | W10 x64