Parancsbeli segítség

Avatar
oliver2461
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. december 27. vasárnap, 7:11

Parancsbeli segítség

Hozzászólás Szerző: oliver2461 »

Üdv! A kérdésem a következő : Létezik e valamilyen megoldás arra hogy egy parancsból több kimenetet kapcsoljak ?

Köszi!
Avatar
oliver2461
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. december 27. vasárnap, 7:11

Re: Parancsbeli segítség

Hozzászólás Szerző: oliver2461 »

Írtam egy egyszerű de hosszó programot sok szenvedéssel és véletlenűl ki hagytam egy fontos dolgot . méghozzá hogy ne csak a D13as láb legyen magas hanem a D2 es is . Egy rövid részlet a kódból:

Kód: Egész kijelölése

 
digitalWrite(LED1, HIGH);
delay(Q);                               // ahol Q = 10000
digitalWrite(LED1, LOW); 
delay(Q);

digitalWrite(LED1, HIGH);
delay(W);                              //ahol W = 9990 **
digitalWrite(LED1, LOW);
delay(W);

**És ez csökken egészen 0 ig

Szóval elég hosszú volt megírni és remélem nem kell átírnom az egészet.
Egyébként Arduino nano panelen és a legfrissebb arduino IDE -vel készült.
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Parancsbeli segítség

Hozzászólás Szerző: csegebiga »

szia!
először is: a Robert féle 60+15 napos tanfolyam megvolt?
ha nem, sürgősen iratkozz fel rá!

a válasz szövegszerkesztői/editori ismereteket követel: keresés és csere
ajánlom figyelmedbe a notepad++ programot!
megkeresed a ledkigyújtó parancsot, és lecseréled két ledkigyújtó parancsra
és ugyanezt teszed a ledkioltó paranccsal

DE!
nem sormintát kell gyártani, hanem egészséges lustaságodat követve elgondolkozni, hogyan lehet ezt egyszerűbben megítni?
azt te is érzed, hogy az általad megvalósított megoldás nem tökéletes.
macerás beírni, macerás módosítani.
a kulcsszó a ciklus!

Kód: Egész kijelölése

beállítod w értékét 10000re
ciklus kezdete, míg w>0
    ledet kigyújt
    csinálsz bármimást
    vársz w-ig
    ledet leolt
    csinálsz bármimást
    vársz w-ig
   w-t csökkented 10-el
ciklus vége 
és ennyi
nincs sorminta, nincs módosítási mizéria
Avatar
oliver2461
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. december 27. vasárnap, 7:11

Re: Parancsbeli segítség

Hozzászólás Szerző: oliver2461 »

Sikerült valamit össze hoznom...

Kód: Egész kijelölése

int delayTime = 10000;

void setup() {
}

void loop() {

if (delayTime != 0){
   digitalWrite(13, HIGH);
    delay(20);
     digitalWrite( 13, LOW);
      delay(delayTime);
       delayTime = delayTime - 10;
  }
}
Ez így jó is lenne de nem fut folyamatosan hanem csak egyszer és vége.
Ezt hogy tudnám kiküszöbőlni?
Mert nem igazán értem mostmár végképp hogy miért és csak sejtéseim vannak.

Egyébként a 60 napos tanfolyamra feliratkoztam. A 20. Leckénél tartok .
Avatar
oliver2461
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. december 27. vasárnap, 7:11

Re: Parancsbeli segítség

Hozzászólás Szerző: oliver2461 »

Az előző hibás szóval itt van helyesen ::

Kód: Egész kijelölése

int delayTime = 10000;

void setup() {

   pinMode(13, OUTPUT);
    pinMode(2, OUTPUT);

}

void loop() {

  if (delayTime != 0){
   digitalWrite(13, HIGH);
    digitalWrite(2, HIGH);
     delay(20);
      digitalWrite( 13, LOW);
       digitalwrite (2, LOW);
        delay(delayTime);
         delayTime = delayTime - 10;
  }
}
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Parancsbeli segítség

Hozzászólás Szerző: csegebiga »

szerintem nem fut le egyszer sem

Kód: Egész kijelölése

digitalwrite (2, LOW);
az ide kisbetű-nagybetű érzékeny.

de
logikai bukfenc is van a programodban:
nem mondod meg, hogy mit csináljon a program, ha elérte a nullát?

kell az if másik ága, az else ág.
ott mondod meg, mi legyen, ha nulla lett?
(pl visszaállítani a kezdeti értékre)

másik kérdés:
az eredeti megoldásodban a változó értékéig ég a led.
a mostaniban fixen 20ms-ra van belőve
így akartad?

tanács: az induló értéket vedd le kisebbre a tesztelé idejére
pl 1000ról indulva gyorsabban elér 0-ig
(c)
Avatar
oliver2461
DrótVégénSzéndarab
Hozzászólások: 27
Csatlakozott: 2015. december 27. vasárnap, 7:11

Re: Parancsbeli segítség

Hozzászólás Szerző: oliver2461 »

Ja bocsi a hibaért csak tabrol irok és másoltam. Menet közben jött hogy így normálisabb. Igen én 500 ról szoktam probálgatni.
ccscsaba@indamail.hu
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2015. december 25. péntek, 8:30

Re: Parancsbeli segítség

Hozzászólás Szerző: ccscsaba@indamail.hu »

Próbáld meg ezt a kódot. A D2 pint nem írtam be, mert csak simán az UNO-n próbáltam, röptében....

Kód: Egész kijelölése

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

void loop() {
  for (int i=1000; i>0;) // menjen 1000-től 0-ig
  {
   digitalWrite(13, HIGH);
   delay(20);
   digitalWrite(13, LOW);
   delay(i);
   i-=10; // a következő delay(i) legyen 10-el kisebb
  }
}
CCS
keurus
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2016. április 6. szerda, 19:55

Re: Parancsbeli segítség

Hozzászólás Szerző: keurus »

Sziasztok!


Adott egy feszültség mérő progi arduinora.
Hogy tudom megoldani programon belül, hogy ha egy mért érték bizonyos szint alatt van akkor x kimeneten a led villogjon, ha felette akkor világítson, de ne álljon ott meg a program?

erre a kódrészletre gondoltam:
if (( ( _ABVAR_7_S1VCC ) <= ( 4.5 ) ))
{
tone(2, 1);
}
else
{
__ardublockDigitalWrite(2, HIGH);
}
if (( ( _ABVAR_9_S2VCC ) <= ( 4.5 ) ))
{
tone(3, 1);


A teljes kód:



void __ardublockDigitalWrite(int pinNumber, boolean status)
{
pinMode(pinNumber, OUTPUT);
digitalWrite(pinNumber, status);
}

int _ABVAR_1_BATT = 0 ;
int __ardublockAnalogRead(int pinNumber)
{
pinMode(pinNumber, INPUT);
return analogRead(pinNumber);
}


double _ABVAR_2_VBATT = 0.0 ;
int _ABVAR_3_V1 = 0 ;
int _ABVAR_4_V1S = 0 ;
int _ABVAR_5_V2 = 0 ;
int _ABVAR_6_V2S = 0 ;
double _ABVAR_7_S1VCC = 0.0 ;
double _ABVAR_8_S1SEN = 0.0 ;
double _ABVAR_9_S2VCC = 0.0 ;
double _ABVAR_10_V2SEN = 0.0 ;
double _ABVAR_11_S2SEN = 0.0 ;

void setup()
{
Serial.begin(9600);
__ardublockDigitalWrite(2, LOW);

__ardublockDigitalWrite(3, LOW);

__ardublockDigitalWrite(4, LOW);

__ardublockDigitalWrite(5, LOW);

__ardublockDigitalWrite(12, LOW);

__ardublockDigitalWrite(13, HIGH);

_ABVAR_1_BATT = __ardublockAnalogRead(A4) ;

_ABVAR_2_VBATT = ( ( _ABVAR_1_BATT * 15.0 ) / 1024.0 ) ;

Serial.print("Test kit";
Serial.print(" ";
Serial.println();

if (( ( _ABVAR_2_VBATT ) <= ( 3.75 ) ))
{
Serial.print("BATT LOW!:";
Serial.print(" ";
Serial.print(_ABVAR_2_VBATT);
Serial.print(" ";
Serial.println();
}
else
{
__ardublockDigitalWrite(13, LOW);
__ardublockDigitalWrite(12, HIGH);
Serial.print("BATT:";
Serial.print(" ";
Serial.print(_ABVAR_2_VBATT);
Serial.print(" ";
Serial.println();
__ardublockDigitalWrite(13, HIGH);
__ardublockDigitalWrite(12, LOW);
}

}

void loop()
{
_ABVAR_3_V1 = __ardublockAnalogRead(A0) ;
_ABVAR_4_V1S = __ardublockAnalogRead(A1) ;
_ABVAR_5_V2 = __ardublockAnalogRead(A2) ;
_ABVAR_6_V2S = __ardublockAnalogRead(A3) ;
_ABVAR_7_S1VCC = ( ( _ABVAR_3_V1 * 15.0 ) / 1024.0 ) ;
_ABVAR_8_S1SEN = ( ( _ABVAR_4_V1S * 15.0 ) / 1024.0 ) ;
_ABVAR_9_S2VCC = ( ( _ABVAR_5_V2 * 15.0 ) / 1024.0 ) ;
_ABVAR_10_V2SEN = ( ( _ABVAR_6_V2S * 15.0 ) / 1024.0 ) ;
if (( ( _ABVAR_7_S1VCC ) <= ( 4.5 ) ))
{
tone(2, 1);
}
else
{
__ardublockDigitalWrite(2, HIGH);
}
if (( ( _ABVAR_9_S2VCC ) <= ( 4.5 ) ))
{
tone(3, 1);
}
else
{
__ardublockDigitalWrite(3, HIGH);
}
if (( ( _ABVAR_8_S1SEN ) >= ( 4.5 ) ))
{
__ardublockDigitalWrite(4, HIGH);
}
else
{
__ardublockDigitalWrite(4, LOW);
}
if (( ( _ABVAR_11_S2SEN ) >= ( 4.5 ) ))
{
__ardublockDigitalWrite(5, HIGH);
}
else
{
__ardublockDigitalWrite(5, LOW);
}
Serial.print("S1 V:";
Serial.print(" ";
Serial.print(_ABVAR_7_S1VCC);
Serial.print(" ";
Serial.print("S1S V:";
Serial.print(" ";
Serial.print(_ABVAR_8_S1SEN);
Serial.print(" ";
Serial.print("S2 V:";
Serial.print(" ";
Serial.print(_ABVAR_9_S2VCC);
Serial.print(" ";
Serial.print("S2S V:";
Serial.print(" ";
Serial.print(_ABVAR_10_V2SEN);
Serial.print(" ";
Serial.println();
}
Válasz küldése