Arduino programozás segítség

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

Re: Arduino programozás segítség

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

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ás Szerző: Attila79 »

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: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Arduino programozás segítség

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

Í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ás Szerző: Attila79 »

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: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Arduino programozás segítség

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

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: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Arduino programozás segítség

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

Például így:
https://www.tinkercad.com/things/lOV4is ... t-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ás Szerző: Attila79 »

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: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Arduino programozás segítség

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

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ás Szerző: Attila79 »

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ás Szerző: Attila79 »

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: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino programozás segítség

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

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ás Szerző: Attila79 »

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ás Szerző: Attila79 »

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: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino programozás segítség

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

É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: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino programozás segítség

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

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/Buil ... tringToInt
Válasz küldése