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   672 / 839
(#) pisti válasza Bakman hozzászólására (») Jan 6, 2021 /
 
A két pont között 110 fok az elfordulás. Valóban egy viszonylag olcsó, arduinos készletből.
Arra gondoltam, hogy a vezérlő jelet valahogyan, ha lekapcsolnám [servo.attach(6)], az megoldás lenne, de utána hogyan kapcsolnám vissza?
(#) Bakman válasza pisti hozzászólására (») Jan 6, 2021 /
 
Az A és B pont közel van egymáshoz. Itt ne azt a két pontot értsd, amielyik kettő között használod. Leírom másként:

Menj 80 fokra. Odamegy, megméri mennyi. Hoppá, 81, vissza egy fokot. Megméri mennyi, hoppá, 79, egy fokot előre. Odamegy. Megméri, a fenébe, 81 lett, vissza egy fokot.... Lehet, hoyg ezen két pont között 0.1 fok van csak, de kb. így kell elképzelni a dolgot.

Ha a szervó nem kap áramot, elengedi magát. Ha nem kap vezérlést, beáll valamelyik végállásba. Nincs mit tenni.
(#) pisti válasza Bakman hozzászólására (») Jan 6, 2021 /
 
Köszönöm! Ez teljesen érthető. Akkor, ha valami fontosabb helyre kell akkor itt is lehet keresni a minőségi servot.
(#) sargarigo válasza pisti hozzászólására (») Jan 7, 2021 /
 
Vagy valami mechanikus reteszelést ha van rá mód! Van ahol ez is szóba jöhet. Bekattan a retesz, utána lehet áramtalanítani a szervót. Visszafelé pedig szervó be, retesz ki.
szerk.: Az enyém is cicereg, de mivel csak egy tollat emelget, nem foglalkoztam vele.
A hozzászólás módosítva: Jan 7, 2021
(#) Moderátor hozzászólása Jan 7, 2021
 
...de ez már inkább szervó téma, mint Arduino.
(#) Geri86 hozzászólása Jan 8, 2021 /
 
Sziasztok. Kezdő vagyok ezen a téren így segítségre lenne szükségem. Egy színes dobókockát szeretnék építeni. 6 különböző színű dióda közül kellene véletlenszerűen mindig egynek világítania, gombnyomásra pedig ismét random váltani. Köszönöm szépen.
(#) Frankye válasza Geri86 hozzászólására (») Jan 8, 2021 /
 
OK. A feladat ismert. Miben kérsz segítséget? Mi nem fogjuk megírni helyetted a programot, legfeljebb, ha valahol elakadsz benne, segítünk.
(#) Feri007 válasza Geri86 hozzászólására (») Jan 8, 2021 /
 
Egyébként valóban véletlen számot nem is egyszerű generálni.
Van ugyan a random()függvény. De az további intézkedések nélkül mindig ugyanazt az álvéletlen sorozatot fogja adni. Unalmas lesz a játék a dobókockával
A randomSeed() függvényt kell először meghívni, valamilyen véletlennek tekinthető értékkel, no de mi legyen az? AnalogRead() -ot szokták használni.
Itt egy példa: Arduino dobókocka
(#) wbt válasza Feri007 hozzászólására (») Jan 8, 2021 /
 
Úgy azért eléggé meg lehet kavarni, ha két gombnyomás között folyamatosan hívogatod az RND függvényt. Te magad leszel a "véletlen". Persze a spektruma nem olyan lesz, mint a függvényé, de ez most nem is számít (másutt kötelező találati arány kell, ott ez nem jó).
(#) Kovidivi válasza pisti hozzászólására (») Jan 8, 2021 / 1
 
A szervó terhelés nélkül be tud gerjedni. Rakj rá egy picike rugót, hogy ezt feszítse, és akkor nem fog rezegni.
(#) pisti hozzászólása Jan 9, 2021 /
 
Egy programban szeretném azt megcsinálni, hogy egy keypadról beolvasott jel pl. C esetén újrainduljon az Arduino. Először arra gondoltam, hogy egy relén keresztül kapná a tápfeszültséget és amikor jön a C akkor az egyik kimenet adna egy jelet a relére, az behúz ezzel megszakítja az áramkört. Nem igazán tetszik ez a megoldás. Keresgéltem, és a szoftveres megoldás egyszerűbbnek tűnik. Beillesztettem egy kis tesztprogramba, de nem értem, hogy mit csinál void software... és a while(1) kezdetű sorok. Van ettől jobb megoldás?
  1. #include <avr/wdt.h>
  2.  
  3.  
  4. void softwareReset( uint8_t prescaller)    // start watchdog with the provided prescaller
  5. {
  6.   wdt_enable( prescaller);   // wait for the prescaller time to expire without sending the reset signal by using the wdt_reset() method
  7.   while(1) {}
  8. }
  9.  
  10. void setup()
  11. {
  12.    pinMode(8, OUTPUT);  
  13. }
  14.  
  15. void loop()
  16. {
  17.   digitalWrite (8, HIGH);
  18.   delay(3000);
  19.   digitalWrite(8, LOW);
  20.   delay(3000);
  21.   digitalWrite (8, HIGH);
  22.   delay(3000);
  23.   softwareReset( WDTO_60MS);      // restart in 60 milliseconds
  24. }
A hozzászólás módosítva: Jan 9, 2021
(#) moltam válasza pisti hozzászólására (») Jan 9, 2021 /
 
Bekapcsolja a watchdogot és utána végtelen ciklusra megy, nem csinál semmit. Amint a watchdog számlálója túlcsordul, resetel az mcu. A void software definiálja a függvényt amit később a loop ban meghívsz. Bővebben: Link
A hozzászólás módosítva: Jan 9, 2021
(#) vargham válasza pisti hozzászólására (») Jan 9, 2021 /
 
Idézet:
„újrainduljon”

Miért? Biztosan szükséged van rá?

Ez a softwareReset függvény beindítja a watchdogot, majd nem törli sosem a countert, így az timeoutra fut, és reseteli a CPU-t.
(#) pisti válasza vargham hozzászólására (») Jan 9, 2021 /
 
Nekem az kell, hogy minden érték a kezdeti állapotba kerüljön és a program induljon az elejéről. A relével ez nagyon egyszerű a COM-NC-n keresztül táplálva az Arduinot, de szerettem volna szoftveresen elérni az újraindítást.
(#) vargham válasza pisti hozzászólására (») Jan 9, 2021 /
 
Ha rendesen meg van írva a kezdőértékeket inicializáló rész, akkor bármikor újra lefuttathatod, és alaphelyzetbe kerül.
A fentebbi WDT reset is járható út.
Nem kell relé. Elég egy digitális lábat összekötni a reset lábbal, és alacsony szinter húzni.
Vagy pointerrel a program memória elejére ugorni.
(#) pisti válasza vargham hozzászólására (») Jan 9, 2021 /
 
Az összekötést próbáltam, de mikor a Reset bekövetkezett utána nem indult el újra a program csak akkor, ha kihúzom az összekötő vezetéket.
  1. int t=300;           // ez a változó határozza meg, hogy milyen gyorsan villognak a led-ek
  2. void setup() {
  3.    pinMode(7, OUTPUT);    //7 as kimenetre egy reset
  4.   digitalWrite(7, HIGH);
  5.   delay(200);
  6.   pinMode(6, OUTPUT);    //6-es kimenetre egy led
  7.   pinMode(5, OUTPUT);    //5-es kimenetre egy led
  8.   pinMode(4, OUTPUT);    //4-es kimenetre egy led
  9.   pinMode(3, OUTPUT);    //4-es kimenetre egy led
  10.   Serial.begin(9600);
  11. }
  12.  
  13. void loop()
  14. {
  15.  digitalWrite(7,HIGH);
  16.  for(int k =0;k<70;k++)
  17.   {
  18.   digitalWrite(4, HIGH);   // felkapcsolja
  19.   delay(t);                 // a t változó értékének megfelelő ideig világít
  20.   digitalWrite(4, LOW);     // lekapcsolja
  21.   digitalWrite(5, HIGH);  
  22.   delay(t);            
  23.   digitalWrite(5, LOW);    
  24.   digitalWrite(6, HIGH);  
  25.   delay(t);              
  26.   digitalWrite(6, LOW);    
  27.   Serial.println(k);
  28.   delay(500);
  29.   if (k==15)
  30.     {
  31.       digitalWrite(3,HIGH);
  32.     }
  33.     if (k==20)
  34.     {
  35.       digitalWrite(7,LOW);
  36.     }
  37.   }
  38. }

A pointerre nem találtam megoldást.
A hozzászólás módosítva: Jan 9, 2021
(#) vargham válasza pisti hozzászólására (») Jan 9, 2021 /
 
Ez a megoldás miért nem jó neked?
Bővebben: AVR software reset
(#) pisti válasza vargham hozzászólására (») Jan 9, 2021 /
 
Köszönöm!
Működik! Kicseréltem az alábbi részre és jól megy. Mikor resetel akkor alapra áll, majd újra indul az elejéről.
  1. if (k==20)
  2.     {
  3.       do                          
  4.         {                          
  5.           wdt_enable(WDTO_15MS);  
  6.           for(;;)                
  7.             {                      
  8.             }                      
  9.         } while(0);
  10.     }

A for(; és a ciklusnál a kilépésnél a (0)-át nem értem.
A hozzászólás módosítva: Jan 9, 2021
(#) superuser válasza pisti hozzászólására (») Jan 9, 2021 /
 
A
  1. for (;;)
  2.   {
  3.   }


egy végtelen ciklus, ami utána van nem hajtódik végre, ergo kár leírni.
(#) zsolt58 hozzászólása Jan 13, 2021 /
 
Szép napot.
Tudna valaki informáciot adni, hogy egy Arduinobol kivett Atmega328P-PU-t, hogyan kellene bekötni?
Mármint azt szeretném használni egy NYÁK lapon de csak magát az IC-t. És ugye kell QUARTZ meg néhány kondi és ellenállás is. De nem emlékszem már, hogy hova is kell öket kötni.
Üdv.
(#) superuser válasza zsolt58 hozzászólására (») Jan 13, 2021 / 1
 
Ott az adatlapja. Illetve írd be google-be, hogy Atmega328p schematic és nézd meg a képtalálatokat. Ha utána van még kérdés, biztos lesz aki megválaszolja.
(#) superuser válasza zsolt58 hozzászólására (») Jan 13, 2021 / 1
 
Amúgy van belső oszcillátora, tehát a quartz szükségessége relatív. Mondjuk ha szeretnél soros portot akkor nem árt a külső oszcillátor.
(#) vargham válasza zsolt58 hozzászólására (») Jan 13, 2021 / 1
 
Arduino weboldalán ott a leírás:
https://www.arduino.cc/en/main/standalone
(#) pisti hozzászólása Jan 15, 2021 /
 
Sziasztok! A korábban, itt a fórumon javasolt megoldással nagyon jól működik a program az Arduino Uno panelen. Reseteli a programot és szépen újra indul. Ez:
  1. do                              
  2.    {                          
  3.        wdt_enable(WDTO_15MS);  
  4.         for(;;)                
  5.             {                      
  6.              }                      
  7.     } while(0);

Szeretném a Nano-n is használni, de azon nem működik. Elindul a programból a kilépés, de nem indul újra. Miben kellene módosítani a programban.
A hozzászólás módosítva: Jan 16, 2021
Moderátor által szerkesztve
(#) lobo67 válasza pisti hozzászólására (») Jan 16, 2021 /
 
Valószínűleg a wdt fuse bitje nincs engedélyezve.
(#) pisti válasza lobo67 hozzászólására (») Jan 16, 2021 /
 
Azt kitudom olvasni? Ezt kellene még beírni?

void watchdogSetup(void)
{
WDTCSR = (WDCE=1);

}
A hozzászólás módosítva: Jan 16, 2021
(#) zsolt58 hozzászólása Jan 16, 2021 /
 
Sziasztok.
Arduinoval szeretnék csinálni egy 4 digites 7 segmenses számlálot. De akárhogy probálom valamiért nem megy.
Üdv.
  1. #include "SevSeg.h"
  2. SevSeg sevseg;
  3.  
  4. float T = -127;
  5.  
  6. void setup(){
  7.   byte numDigits = 4;
  8.    byte digitPins[] = {3,2,1,0};
  9.   byte segmentPins[] = {11,10,9,8,7,6,5,4};
  10.  
  11.   bool resistorsOnSegments = true;
  12.   bool updateWithDelaysIn = true;
  13.   byte hardwareConfig = COMMON_CATHODE;
  14.   sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  15.   sevseg.setBrightness(90);
  16. }
  17.  
  18. void loop(){
  19.  
  20.   T = T+1;
  21.  
  22.   if(digitalRead(12) == HIGH){
  23.     sevseg.setNumber(T, 0);
  24.     sevseg.refreshDisplay();
  25.  
  26.   }
  27.    
  28. }
(#) vargham válasza zsolt58 hozzászólására (») Jan 16, 2021 /
 
Mi nem megy?
(#) zsolt58 válasza vargham hozzászólására (») Jan 16, 2021 /
 
Az, hogy nem írja ki a számokat. Kellene delay, de akkor meg rosszul írja ki. SzvlSZÓVAL akárhogy próbálkoztam nem volt jó.
A hozzászólás módosítva: Jan 20, 2021
Moderátor által szerkesztve
Következő: »»   672 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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