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);
}
Vantar hjálp frá forritunar snillingum (arduino)
-
Höfundur - </Snillingur>
- Póstar: 1020
- Skráði sig: Fös 05. Apr 2013 19:01
- Reputation: 101
- Staðsetning: Reykjanesbær
- Staða: Ótengdur
-
- Of mikill frítími
- Póstar: 1794
- Skráði sig: Fim 12. Jún 2003 17:16
- Reputation: 82
- Staðsetning: DK
- Staða: Ótengdur
Re: Vantar hjálp frá forritunar snillingum (arduino)
kíktu á þetta: http://arduino.cc/en/Reference/AttachInterrupt
Electronic and Computer Engineer
-
Höfundur - </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)
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.
-
- Of mikill frítími
- Póstar: 1794
- Skráði sig: Fim 12. Jún 2003 17:16
- Reputation: 82
- Staðsetning: DK
- Staða: Ótengdur
Re: Vantar hjálp frá forritunar snillingum (arduino)
Hvaða Arduino ertu með og hvaða pinna ertu með takkann á ?
Electronic and Computer Engineer
-
Höfundur - </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)
É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.
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)
Af hverju ertu ekki að nota loopur fyrir þetta?
Kóðinn styttist um helling.
Kóðinn styttist um helling.
-
- Of mikill frítími
- Póstar: 1794
- Skráði sig: Fim 12. Jún 2003 17:16
- Reputation: 82
- Staðsetning: DK
- Staða: Ótengdur
Re: Vantar hjálp frá forritunar snillingum (arduino)
Búðu til fallið
og bætir þessu við inní setup()
Mundu að nota volatile fyrir framan breytur þegar þú skilgreinir þær í upphafi ef þú ætlar að breyta þeim þegar interrupt á sér stað.
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
-
Höfundur - </Snillingur>
- Póstar: 1020
- Skráði sig: Fös 05. Apr 2013 19:01
- Reputation: 101
- Staðsetning: Reykjanesbær
- Staða: Ótengdur
-
- 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)
Þ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);
}
}
Þ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
-
Höfundur - </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)
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.
-
- 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)
Það er gaman að heyra, vantar klárlega fleiri microcontroller áhugamenn á íslandi.
Foobar
-
- 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)
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