Arduino programozás segítség

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2012. január 22. vasárnap, 7:00
Tartózkodási hely: Budapest

Re: Arduino programozás segítség

HozzászólásSzerző: aaszabo » 2020. szeptember 24. csütörtök, 22:01

Arra érdemes figyelni, hogy a sprintf egy költséges utasítás. Ha kicsi a hely, akkor kerülendő, mert pár sprintf és el is fogyott a hely.

Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: Arduino programozás segítség

HozzászólásSzerző: Attila79 » 2020. október 19. hétfő, 19:26

Sziasztok,
Egy másik téma lenne.
Ha shift registert használok, akkor van e lehetőség arra, hogy a for ciklus tömbből vegye ki az értékeket.
Találtam példát arra, hogy ledeket villogtat, de mindig csak olyanra, ahol sorban villogtak a ledek, én egy meghatározott rendben de nem sorban akarom villogtatni a ledeket, de nem megy.
Segítsetek ha kell beirom ide a kódot : :|

vargham
Chipgyilok
Hozzászólások: 287
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Arduino programozás segítség

HozzászólásSzerző: vargham » 2020. október 20. kedd, 5:04

Írd be, megnézzük.

Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: Arduino programozás segítség

HozzászólásSzerző: Attila79 » 2020. október 20. kedd, 19:57

Tehát erről lenne szó. A netről néztem le, és működik is, csak mint mondtam nem úgy, ahogy én szeretném.

int latchPin = 5; //a lanch változó kimenethez rendelése
int clockPin = 6; //idő változó kimenethez rendelése
int dataPin = 4; //adat változó kimenethez rendelése

byte leds = 0; //8bit-es változó létrehozása és kezdeti értékadása

void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT); // kimenetek beállítása
pinMode(clockPin, OUTPUT);
}

void loop()
{
leds = 0;// minden kimenet (led) kikapcsolása
updateShiftRegister(); //függvény meghívása, leds értéke elküldve shift regiszternek
delay(500); //1/2 sec várakozás
for (int i = 0; i < 8; i++) //i értékének növelése 8-ig
{
bitSet(leds, i); // leds változó i-edik értéke 1 , a többi 0
updateShiftRegister(); // függvény meghívása, leds értéke elküldve shift regiszternek
delay(500); //várakozás 1/2sec-ig aztán vissza a for ciklusig
}
}
void updateShiftRegister()
{
digitalWrite(latchPin, LOW); //latch alacsony szinten
shiftOut(dataPin, clockPin, LSBFIRST, leds);

//shift regiszterbe kiíratás, első két paraméter adat és az idő pin, a harmadik paraméter a kiolvasás

//iránya jobb szélső bittől kezdi (LSB), negyedik paraméter a tényleges bit adat a 'leds' változóban

digitalWrite(latchPin, HIGH); //latch magas szinten(kiíratás a kimenetekre)
}

vargham
Chipgyilok
Hozzászólások: 287
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Arduino programozás segítség

HozzászólásSzerző: vargham » 2020. október 21. szerda, 5:55

Kérhetnénk egy kis odafigyelést? A program forrását kódként formázva illeszd be! Kösz.
Valahogy így:

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

int latchPin = 5; //a lanch változó kimenethez rendelése
int clockPin = 6; //idő változó kimenethez rendelése
int dataPin = 4; //adat változó kimenethez rendelése

byte leds = 0; //8bit-es változó létrehozása és kezdeti értékadása

void setup()
{
   pinMode(latchPin, OUTPUT);
   pinMode(dataPin, OUTPUT); // kimenetek beállítása
   pinMode(clockPin, OUTPUT);
}

void loop()
{
   leds = 0;// minden kimenet (led) kikapcsolása
   updateShiftRegister(); //függvény meghívása, leds értéke elküldve shift regiszternek
   delay(500); //1/2 sec várakozás
   for (int i = 0; i < 8; i++) //i értékének növelése 8-ig
   {
      bitSet(leds, i); // leds változó i-edik értéke 1 , a többi 0
      updateShiftRegister(); // függvény meghívása, leds értéke elküldve shift regiszternek
      delay(500); //várakozás 1/2sec-ig aztán vissza a for ciklusig
   }
}

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW); //latch alacsony szinten
   shiftOut(dataPin, clockPin, LSBFIRST, leds);

   //shift regiszterbe kiíratás, első két paraméter adat és az idő pin, a harmadik paraméter a kiolvasás

   //iránya jobb szélső bittől kezdi (LSB), negyedik paraméter a tényleges bit adat a 'leds' változóban

   digitalWrite(latchPin, HIGH); //latch magas szinten(kiíratás a kimenetekre)
}

vargham
Chipgyilok
Hozzászólások: 287
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Arduino programozás segítség

HozzászólásSzerző: vargham » 2020. október 21. szerda, 9:37

Például így:
https://www.tinkercad.com/things/lOV4isgpCgM-arduino-shift-register

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

int latchPin = 5; //a lanch változó kimenethez rendelése
int clockPin = 6; //idő változó kimenethez rendelése
int dataPin = 4; //adat változó kimenethez rendelése

byte leds = 0; //8bit-es változó létrehozása és kezdeti értékadása

uint8_t const length = 5;
uint8_t pattern[length];

void setup()
{
   pattern[0]=B00110011;
   pattern[1]=B10010010;
   pattern[2]=B00101001;
   pattern[3]=B11001110;
   pattern[4]=B01100111;
   pattern[5]=B01011100;
   
   pinMode(latchPin, OUTPUT);
   pinMode(dataPin, OUTPUT); // kimenetek beállítása
   pinMode(clockPin, OUTPUT);
}

void loop()
{
   leds = 0;// minden kimenet (led) kikapcsolása
   updateShiftRegister(); //függvény meghívása, leds értéke elküldve shift regiszternek
   delay(500); //1/2 sec várakozás
   for (int i = 0; i < length; i++) //i értékének növelése length-ig
   {
      leds = pattern[i];
      updateShiftRegister(); // függvény meghívása, leds értéke elküldve shift regiszternek
      delay(500); //várakozás 1/2sec-ig aztán vissza a for ciklusig
   }
}

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW); //latch alacsony szinten
   shiftOut(dataPin, clockPin, LSBFIRST, leds);

   //shift regiszterbe kiíratás, első két paraméter adat és az idő pin, a harmadik paraméter a kiolvasás

   //iránya jobb szélső bittől kezdi (LSB), negyedik paraméter a tényleges bit adat a 'leds' változóban

   digitalWrite(latchPin, HIGH); //latch magas szinten(kiíratás a kimenetekre)
}

Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: Arduino programozás segítség

HozzászólásSzerző: Attila79 » 2020. október 22. csütörtök, 6:15

Köszönöm a segítséget.
Nem tudtam, hogy kell kódot beilleszteni. Biztos valamit nem olvastam el, vagy elkerülte a figyelmem

vargham
Chipgyilok
Hozzászólások: 287
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Arduino programozás segítség

HozzászólásSzerző: vargham » 2020. október 22. csütörtök, 9:19

Próbáltad már? Szimulátorban is megnézheted, linkeltem azt is.

Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: Arduino programozás segítség

HozzászólásSzerző: Attila79 » 2020. október 22. csütörtök, 17:18

Köszönöm,

Látom, működik. Nem nagyon értem sajnos a működését. Összeszedem a gondolataimat és a kérdéseimet, aztán kérdeznék párat :)

Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: Arduino programozás segítség

HozzászólásSzerző: Attila79 » 2020. október 24. szombat, 8:48

Nem jegeltem a témát de sajnos nem értem. Próbáltam videókat keresni a témában és egyet találtam, az is olasz nyelvű.
Az uint8_t változó típussal sem találkoztam még.... és a program többi része is bonyolult nekem.
De azért köszi a fáradozást. :)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3358
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2020. október 24. szombat, 22:56

Itt találsz bővebb infót:
This header was originally in the C standard library as <stdint.h>.
https://en.cppreference.com/w/cpp/header/cstdint

Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: Arduino programozás segítség

HozzászólásSzerző: Attila79 » 2020. november 10. kedd, 17:25

Sziasztok,
az órához szeretném megcsinálni az ébresztőt, de már a serial is kifog rajtam. Annyit szeretnék egyelőre, hogy az ébresztés időpontját (csak az órát), amit a serial monitorba írok, csak visszaírja, de már ez sem megy :(

[code]
char h; //Ébresztő óra

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);


}

void loop() {
if (Serial.available()) {

Serial.print("Ébresztő beállítás, óra: ");
h = Serial.read();
if (h >= 0 && h <= 23) {
Serial.print(h);
Serial.println();

} else {
}
}

}










[/code]

Attila79
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2020. október 19. hétfő, 19:16

Re: Arduino programozás segítség

HozzászólásSzerző: Attila79 » 2020. november 10. kedd, 17:27

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

char h; //Ébresztő óra

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);


}

void loop() {
  if (Serial.available()) {

    Serial.print("Ébresztő beállítás, óra:  ");
    h = Serial.read();
    if (h >= 0 && h <= 23) {
      Serial.print(h);
      Serial.println();

    } else {
    }
  }

}











Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3358
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2020. november 10. kedd, 23:54

És így?

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

void loop() {
    Serial.print("Ébresztő beállítás, óra:  ");
  if (Serial.available()) {
    h = Serial.read();
    if (h >= 0 && h <= 23) {
      Serial.println(h);
      Serial.println();

    } else {
       Serial.println("Csak 0 - 23 óra lehet!  ");
    }
  }

}


Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3358
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2020. november 11. szerda, 8:41

Bocsi az előző válaszom nem volt korrekt!
Mert a soros monitoron stringet kapsz, nem pedig szám értéket!
Ezt előbb átkel alakítani számmá, hogy vizsgálhasd az if feltétellel.
Példát itt találsz-rá: https://www.arduino.cc/en/Tutorial/BuiltInExamples/StringToInt


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég