Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   624 / 854
(#) asch válasza Lamprologus hozzászólására (») Máj 7, 2020 / 1
 
3 bájtot küld ki, nem 3 karaktert. A programban a körben lévő R egy úgynevezett Unicode szimbólum, ami UTF-8 kódolásban két bájton van kódolva. Tehát 1 karakter, ami 2 bájton van ábrázolva. https://www.compart.com/en/unicode/U+00AE (A 194-es karakter azaz a 0xC2 ennek a felvezető bájtja, ha megnézed a linkelt oldalon.)

Az UTF-8 egy változó hosszúságú kódolás: az első 127 érték az ASCII-vel kompatibilis, a felette lévő értékek viszont mást jelentenek, és van olyan érték, ami után második, harmadik stb. bájt is jön és azzal együtt ad ki egyetlen karaktert. Általában a mai editorok az ASCII-n kívüli karaktereket UTF-8-ban kódolják, és így kerül be a programba is. Ha eltérő kódolást akarsz használni, ahhoz valami erőfeszítést kell tenni. Nem tudom hogyan, még nem csináltam ilyet sosem.

Egyszer tároltam több ékezetes betűs szöveget a programomban, amit át kellett küldeni egy másik procinak is: végül úgy döntöttem, hogy futásidőben alakítom át azt a néhány ékezetes betűt a saját kódolásunkra. Így a kódba simán közvetlenül beírhattam a string konstansokat.
(#) szaharin hozzászólása Máj 7, 2020 /
 
Sziasztok,

A segítségeteket szeretném kérni. Építettem egy berendezést ami kettő gombot kapcsolgat egy szervó motor segítségével (180fok) és egy nano vezérli.

Olyan programot szeretnék írni, hogy a program generál egy random számot, amit eltárol, majd annyiszor megnyomja a gombot.

Random generál egy időt 1-5 perc között majd az előző gombnyomás számnak megfelelően a másik irányba mozdul és a másik gombot nyomja meg. Majd megint generál egy új időt, vár és kezdődik előröl a ciklus.


Tudna ebbe valaki segíteni, hogy merre induljak, sajnos csak felületesen értek a programozáshoz.


Köszönöm
(#) sargarigo válasza szaharin hozzászólására (») Máj 7, 2020 /
 
És mi az amiben a segítség kellene? Meddig jutottál el?
(#) kapu48 válasza szaharin hozzászólására (») Máj 7, 2020 /
 
Használhatod a random() függvényt a leírásalapján: Bővebben: Link
(#) szaharin válasza sargarigo hozzászólására (») Máj 7, 2020 /
 
Még most szedem össze azokat az elemeket és a tudást amiből össze tudnám rakni. Kerestem minta programot randomszámra, és érték vissza adásra de sajnos nem találtam. Tudsz esetleg segíteni a program össze hegesztésének mentorálásában?
(#) szaharin válasza kapu48 hozzászólására (») Máj 7, 2020 /
 
Köszönöm ez szuper.
(#) tbarath válasza asch hozzászólására (») Máj 7, 2020 /
 
Idézet:
„Általában a mai editorok az ASCII-n kívüli karaktereket UTF-8-ban kódolják, és így kerül be a programba is. Ha eltérő kódolást akarsz használni, ahhoz valami erőfeszítést kell tenni. Nem tudom hogyan, még nem csináltam ilyet sosem.”

Windows alatt a Notepad++ és hasonló editorok képesek arra, hogy UTF/ASCII/stb. konverziót csináljanak a szövegben, Linux alatt a parancssoros iconv kiváló eszköz erre.
(#) Kovidivi válasza kapu48 hozzászólására (») Máj 7, 2020 /
 
Ez a generátor nem valami jó, ha a seed nem változik, akkor ugyan azokat a számokat, ugyanabban a sorrendben fogja visszaadni...
(#) kapu48 válasza Kovidivi hozzászólására (») Máj 7, 2020 /
 
De javítható, az ajánlás szerint valamelyik nem használt analóg bemeneten mért zaj érték felhasználásával. Ezt egyébként mindenűt így teszik.
(1-5. különbem nem is lehet túl sok kombináció)
A hozzászólás módosítva: Máj 7, 2020
(#) pisti hozzászólása Máj 8, 2020 /
 
Sziasztok!
A 1602-es LCD kijelző és az I2C interfész használatával kapcsolatban olvastam egy írást (http://www.martyncurrey.com/arduino-with-hd44780-based-lcds/)
ahol az interfész mindkét kivezetésére (SDA, SCL) egy ellenálláson keresztül magas jelet adtak. Ezt máshol nem láttam eddig.
Szerintetek is indokolt a felhúzó ellenállások alkalmazása?
Köszönöm!

i2c.jpg
    
(#) Bakman válasza pisti hozzászólására (») Máj 8, 2020 / 1
 
Ha a modulon nincs felhúzó ellenállás, akkor neked kell rárakni. Az I2C vonalakra mindig kell felhúzó ellenállás. Ha pl. egy DS1307-es IC-t (nem modult) és egy kontrollert akarsz összekötni, mindenképpen kell mert az IC nem tartalmazza a felhúzásokat.

Egy I2C kapcsolatra több eszköz is ráköthető egyszerre. Ahhoz, hogy ne tudják egymást tönkretenni, az órajel és adatlábak nyitott kollektoros ki- és bemenetek. Így a legrosszabb esetben összezavarodnak a jelek de nem fog semmi füstölni, pl. akkor, ha egyszerre két eszöz "adás" üzemmódra kapcsol pl. programhiba miatt.
(#) superuser válasza pisti hozzászólására (») Máj 8, 2020 / 1
 
Van a modulon. Felesleges.
(#) Massawa válasza pisti hozzászólására (») Máj 8, 2020 / 1
 
Igen, ártani soha nem árt. Ha több I2C vacak van az Arduinora kötve, akkor érdemes számolgatni az ellenállások értékét. ( vannak erre pontos leirások).
Én alapbol minden Arduinora 10 kOhmosat kötök. Ez minimum elinditja az I2C kommunikáciot és nem is terheli le annyira a kimenetet, hogy még ne lehessen 6-10 modult rákötni az I2C-re.
(#) morgo hozzászólása Máj 11, 2020 /
 
Sziasztok!
EEPROM írásával kapcsolatban kérek segítséget. Az alábbi kódot szeretném kiegészíteni eeprom címzéssel, mert több különálló adatot kéne menteni. Sehogy nem akar összejönni, már zsong az agyam tőle...
  1. #include <avr/eeprom.h>
  2.  
  3. EEMEM unsigned long foo;    //a variable stored in EEPROM
  4. unsigned long set0;            //regular variables in SRAM
  5. unsigned long set1;
  6. unsigned long i=12345678;
  7.  
  8. void setup(void){
  9.    Serial.begin(9600);
  10.    set1=i;
  11.    eeprom_write_dword( &foo, set1 );
  12. }
  13.  
  14. void loop(void){
  15.    set0 = eeprom_read_dword( &foo );
  16.    Serial.println(set0);
  17.    delay(1000);
  18. }
(#) icserny válasza morgo hozzászólására (») Máj 11, 2020 /
 
Miért nem az Arduino Reference oldlán nézel mintapéldát?

EEPROM.write()
  1. #include <EEPROM.h>
  2.  
  3. void setup()
  4. {
  5.   for (int i = 0; i < 255; i++)
  6.     EEPROM.write(i, i);
  7. }
  8.  
  9. void loop()
  10. {
  11. }


EEprom.read()
  1. #include <EEPROM.h>
  2.  
  3. int a = 0;
  4. int value;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(9600);
  9. }
  10.  
  11. void loop()
  12. {
  13.   value = EEPROM.read(a);
  14.  
  15.   Serial.print(a);
  16.   Serial.print("\t");
  17.   Serial.print(value);
  18.   Serial.println();
  19.  
  20.   a = a + 1;
  21.  
  22.   if (a == 512)
  23.     a = 0;
  24.  
  25.   delay(500);
  26. }
(#) usane válasza icserny hozzászólására (») Máj 11, 2020 /
 
Gondolom nem véletlenül használná az AVR libet. Nem akar bájtonként szenvedni a dword-el.

morgo:
AVR lib-et viszont rosszul használja. Tudtommal Az EEMEM előtagot akkor kell odatenni, ha fix adatot tárol ott. Ha változótakar beírni akkor nem. Valamint az eeprom_write_... címét mutatóként kell megadni. És Esetleg a write helyett ha van még pár microsecundum idő akkor az updatet lehetne használni az először ellenőrzi, hogy különbözik-e az ottlevő adat a tárolandótól.
Csatoltam egy peldat.
A hozzászólás módosítva: Máj 11, 2020

pelda.PNG
    
(#) Kovidivi válasza usane hozzászólására (») Máj 11, 2020 /
 
"Nem akar bájtonként szenvedni" - eepromot mindenféleképpen byte-onként kell írni, szóval mindegy, hogy milyen megoldást választ. Az integert fel kell bontani két byte-ra, a long-ot négyre, és úgy eltárolni.
(#) usane válasza Kovidivi hozzászólására (») Máj 11, 2020 /
 
Nyilván bájtonként kell, de nem mindegy hogy ő oldja meg vagy a lib. Az AVR libben külön funkciók vannak, bájtra, wordre, dwordre, és blokkra. Nézz bele.
(#) rolandgw válasza morgo hozzászólására (») Máj 11, 2020 / 2
 
Tutorial:

EEPROM.pdf
    
(#) usane válasza rolandgw hozzászólására (») Máj 11, 2020 /
 
Na ezt kerestem neki.
(#) pisti válasza Massawa hozzászólására (») Máj 11, 2020 /
 
Köszönöm! Egy 10 kOhm-al rápróbálok. Csak egyet akarok rátenni.
(#) szaharin válasza kapu48 hozzászólására (») Máj 11, 2020 /
 
Idáig jutottam a függvénnyből. A probléma, hogy a szervó nem azt csinálja amit szeretnék, van ötleted mi lehet a baj?
Vízszintesen áll a szervón egy kar. Jobbra és balra van alatta egy egy gomb. SG90-es szervót használok.
A lényeg, hogy a szervó x szer megnyomja az A gombot ehhez (40 fokot kell oda vissza mozogni x szer) utána vár és x szer megnyomja a B gombot majd vár.
Viszont a szervóban semmi szabályosság nincs majd egyszer megakad.
Köszönöm mindenkienk a segítséget

A bent maradt, értelmetlen kóddarab törölve.
A hozzászólás módosítva: Máj 12, 2020
Moderátor által szerkesztve
(#) GPeti1977 válasza szaharin hozzászólására (») Máj 11, 2020 /
 
A Random mihez kell?
(#) szaharin válasza szaharin hozzászólására (») Máj 11, 2020 /
 
  1. #include <Servo.h>
  2.  
  3. Servo myservo; // create servo object to control a servo
  4. // twelve servo objects can be created on most boards
  5.  
  6. int pos = 90; // variable to store the servo position
  7.  
  8. void setup() {
  9. myservo.attach(3); // attaches the servo on pin 9 to the servo object
  10.  
  11.  
  12. }
  13.  
  14. void loop()
  15. {
  16.  
  17.                 // Button A
  18.                 int randNumber = random(1, 7);
  19.                
  20.                 for (int i = 0; i < randNumber; i++)
  21.                 {
  22.                                for (pos = 90; pos >= 50; pos -= 10) { // goes from 0 degrees to 40 degrees
  23.                                myservo.write(pos); // tell servo to go to position in variable 'pos'
  24.                                delay(50); // waits 150ms for the servo to reach the position
  25.                                }
  26.                                
  27.                                for (pos = 50; pos <= 90; pos += 10) { // goes from 40 degrees to 0 degrees
  28.                                myservo.write(pos); // tell servo to go to position in variable 'pos'
  29.                                delay(50); // waits 150ms for the servo to reach the position
  30.                                }
  31.                 }
  32.                
  33.                 // Wait between 1 and 5 minutes
  34.                 delay(random(60, 300));
  35.  
  36.                 // Button B
  37.                 for (int i = 0; i < randNumber; i++)
  38.                 {
  39.                                for (pos = 90; pos <= 130; pos += 10) { // goes from 0 degrees to 90 degrees
  40.                                myservo.write(pos); // tell servo to go to position in variable 'pos'
  41.                                delay(50); // waits 150ms for the servo to reach the position
  42.                                }
  43.                                
  44.                                for (pos = 130; pos >= 90; pos -= 10) { // goes from 90 degrees to 0 degrees
  45.                                myservo.write(pos); // tell servo to go to position in variable 'pos'
  46.                                delay(550); // waits 150ms for the servo to reach the position
  47.                                }
  48.                 }
  49.  
  50. }
(#) szaharin válasza GPeti1977 hozzászólására (») Máj 11, 2020 /
 
aA szerkezetet random időnként kell megnyomni. A működése olyan mint egy éberségfigyelő. Amint gépi működtetést érzékel letilt.
A hozzászólás módosítva: Máj 12, 2020
Moderátor által szerkesztve
(#) kapu48 válasza szaharin hozzászólására (») Máj 11, 2020 /
 
Miért veted le a várakozásokat 50ms-re?
Szerintem nem tud olyan gyorsan mozogni a szervód.
Másik hiba lehet a tápegységet rángatja és ezért resetel az AVR.
(#) sector99 hozzászólása Máj 12, 2020 /
 
Sziasztok !
Bocs, ha nem ide való a kérdésem, majd megkérem a modit, hogy tegye át.
Szóval összeraktam EZT a pákaszabályzót. Arduino nanot használtam, fut is rajta a program, viszont a hőmérsékletet nem méri. Helyesebben állandóan 310 fokot mutat mért értéknek és folyamatosan fűti a pákát.
A programozáshoz nem értek, azért tettem föl ide a kérdésemet, hogy a hozzáértők mondjanak véleményt a kódról, hogy az így elvileg működőképes-e. (nem másoltam be ide a kódot, de ha kell akkor pótolom) A páka hőfokát egyébként a PWM jel nullátmeneteinél méri a program ?
Még annyi infó, hogy az ADC0 lábon +5V van.
(#) icserny válasza sector99 hozzászólására (») Máj 12, 2020 /
 
Ha az a kapcsolás, amit belinkeltél, akkor pont fordítva működik: amikor a PWM jel nulla, akkor kapja meg a páka a fűtőfeszültséget (a Q1 tranzisztor fázist fordít).
(#) GPeti1977 válasza icserny hozzászólására (») Máj 12, 2020 /
 
Ez után kezdődik a mérés, vagyis a "nulla" a nyitott tranzisztor:
analogWrite(CONTROL_PIN, 255);
delayMicroseconds(300);
(#) sector99 válasza GPeti1977 hozzászólására (») Máj 12, 2020 /
 
Ok, tehát akkor a program és a kapcsolás is rendben van.
Akkor a müv. erősítőnél keressem a hibát? Egyébként MCP 601-el próbáltam éleszteni.
Következő: »»   624 / 854
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem