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   502 / 840
(#) szili83 válasza kapu48 hozzászólására (») Jan 14, 2019 /
 
Nem baj ha leírod, én könybben megértem, ha leírod és kommenteled.

Ahogy nézem ez, ha vége a void loopnak, akkor megint kér egy gombnyomást. Nekem pedig a loop pörögne úgymond a végtelenségig.

(Egy motort kell meghajtanom, x fordulatot forog, ha forgott lekapcsol, majd Y idő letelte után megint forod, lekapcsol.... A gombbal indulna az egész, és egy hosszú megnyomással pedig leállna)
(#) kapu48 válasza szili83 hozzászólására (») Jan 14, 2019 / 1
 
Ne csak nézd, hanem kísérletezzél is!
Próbálgasd variálni a számokat, és értsd is, meg ami történik.

Most gombnyomással tudod be/ki kapcsolni a led villogtatást.
Annak a helyére kel raknod a motor forgatás részt.
Azt hiszem, az már megy?

Csak a forgatásnál is lepesHosszTime = millis(); időzítéssel kel megoldani a várakozást.
Hogy ne álljon meg a program a delay-ban.
Mert akkor nem érzékeli a gomb nyomást a programod.

(Próbálkozzál! És ha nem megy? Megmutatod, és segítünk.)
A hozzászólás módosítva: Jan 14, 2019
(#) kapu48 válasza szili83 hozzászólására (») Jan 14, 2019 /
 
Kicsit átszerveztem a gomb kezelést:
  1. //Buttons2.ino  No delay!   kapu48
  2. const int buttonPin = 8;
  3. const int ledPin = 11;
  4.  
  5. uint8_t ledState = HIGH;
  6. uint8_t buttonState = LOW;
  7. int lastButtonState = 0;
  8. uint8_t reading;
  9.  
  10. long lastDebounceTime = 0;
  11. long debounceDelay = 50;
  12.  
  13. void setup() {
  14.   pinMode(buttonPin, INPUT);
  15.   pinMode(ledPin, OUTPUT);
  16.  
  17.   // set initial LED state
  18.   digitalWrite(ledPin, ledState);
  19. }
  20.  
  21. void loop() {
  22.   reading = digitalRead(buttonPin); // Beolvassa a gomb állapotát
  23.   if (reading == HIGH) { // Ha megnyomták
  24.  
  25.     if(++lastButtonState == 100){  // Ha hosszan nyomja elszámolt xxx-ig lekapcsol
  26.       buttonState = LOW; //
  27.       ledState = HIGH;
  28.       digitalWrite(ledPin, ledState); // LED le
  29.       lastButtonState = 0; // Számolás elölröl
  30.       delay(500); // Hosszunyomás kivárása
  31.      
  32.     }else{  // LED Villogás bekapcs.
  33.       lastDebounceTime = millis(); // Beállitja a kezdö értéket
  34.       buttonState = HIGH; // Jelzi a gombnyomást      
  35.     }
  36.     delay(50); // Prellezés kivárása
  37.   }
  38.  
  39.   if ((millis() - lastDebounceTime) > debounceDelay) { // Ha letelt az idö
  40.         if (buttonState == HIGH) { // Volt gombnyomás?
  41.           ledState = !ledState; // Állapot invertálás
  42.           digitalWrite(ledPin, ledState); // !LED
  43.           lastDebounceTime = millis();  // Új idöpont beállítása
  44.         }
  45.    }
  46.  
  47.  
  48. }

Azt hiszem így jobb lessz!
(#) szili83 válasza kapu48 hozzászólására (») Jan 14, 2019 /
 
Próbáltam, bekapcsolás OK, de kiakpcsolni az eredeti kód vagy kikapcsol, de általában nem.

Ha beleintegrálom a sajátomba, akkor sem jó, mert bekapcsoláskor egyszer lefut, és vége. De az én else ágamba sem megy bele, nem villogtatja a LED-et, és nem kezdi elöről a ciklust.

Ennek az a müködése gomb nélkül:
- Motor megy x fordulatot
- Motor nem megy, LED villog bizonyos ideig
- Motor megy x fordulatot
- Motor nem megy, LED villog bizonyos ideig
-....

A gombal:
- Gomb röviden megnyom elindul a motor
- Motor megy x fordulatot
- Motor nem megy, LED villog bizonyos ideig
- Motor megy x fordulatot
- Motor nem megy, LED villog bizonyos ideig
-....
- gomb megnyom a motor leáll, LED kikapcsol
- Gomb röviden megnyom elindul a motor
- Motor megy x fordulatot
- Motor nem megy, LED villog bizonyos ideig
- Motor megy x fordulatot
- Motor nem megy, LED villog bizonyos ideig
-....

  1. #include <Stepper.h>
  2.  #define STEPS 100
  3.  #define IN1  8
  4.  #define IN2  9
  5.  #define IN3  10
  6.  #define IN4  11
  7.  
  8.  Stepper small_stepper(STEPS, 8, 10, 9, 11);
  9.  
  10.  
  11.   int   Steps2Take = 0;
  12.   long  temps = 0;
  13.   int   Cycle;
  14.   int   Rotate_n_temp;
  15.   int   Rotate_n;
  16.   const int buttonPin = 5;
  17.   const int ledPin = 13;
  18.  
  19.   uint8_t ledState = LOW;
  20.   uint8_t buttonState = LOW;
  21.   int lastButtonState = 0;
  22.   uint8_t reading;
  23.  
  24.   long lastDebounceTime = 0;
  25.   long debounceDelay = 200;
  26.  
  27. void setup()
  28.  {                
  29.   Serial.begin(9600);
  30.   pinMode(13,OUTPUT);
  31.   pinMode(IN1,OUTPUT); //stepper motor coil-1
  32.   pinMode(IN2,OUTPUT); //stepper motor coil-2
  33.   pinMode(IN3,OUTPUT); //stepper motor coil-3
  34.   pinMode(IN4,OUTPUT); //stepper motor coil-4
  35.   pinMode(buttonPin, INPUT); // Push Switch
  36.   pinMode(ledPin, OUTPUT);
  37.  
  38.   // set initial LED state
  39.   digitalWrite(ledPin, ledState);
  40.   }
  41.  
  42. void loop()
  43.   {
  44.  
  45.  
  46.     reading = digitalRead(buttonPin); // Beolvassa a gomb állapotát
  47.   if (reading == HIGH)  // Ha megnyomták
  48.     {
  49.     if(++lastButtonState == 100){  // Ha hosszan nyomja elszámolt xxx-ig lekapcsol
  50.       buttonState = LOW; //
  51.       ledState = HIGH;
  52.       digitalWrite(ledPin, ledState); // LED le
  53.       lastButtonState = 0; // Számolás elölröl
  54.       delay(500); // Hosszunyomás kivárása
  55.  
  56.       }else  // LED Villogás bekapcs.
  57.           {
  58.       lastDebounceTime = millis(); // Beállitja a kezdö értéket
  59.       buttonState = HIGH; // Jelzi a gombnyomást
  60.           }
  61.       delay(50); // Prellezés kivárása
  62.  
  63.   Rotate_n=1;
  64.   Rotate_n_temp = Rotate_n-1;  
  65.   digitalWrite(13, HIGH);  
  66.   delay(100);  
  67.  
  68.   Serial.println("Stepper motor working, one cycle is OK ");  
  69.   small_stepper.setSpeed(300);
  70.  
  71.   if (Cycle<=Rotate_n_temp){
  72.  
  73.   Steps2Take  = -4096;
  74.   temps = millis();
  75.   small_stepper.step(Steps2Take);
  76.   temps =  millis()- temps ;
  77.   Serial.println("Rotate cycle noumber:");
  78.   Serial.println(Rotate_n);
  79.   Serial.println("Motor step noumber:");
  80.   Serial.println(temps);
  81.   digitalWrite(IN1, LOW);
  82.   delay(2);
  83.   digitalWrite(IN2, LOW);
  84.   delay(2);
  85.   digitalWrite(IN3, LOW);
  86.   delay(2);
  87.   digitalWrite(IN4, LOW);
  88.   delay(2);
  89.   delay(2000);  //pause
  90.    
  91.   Steps2Take  = 4096;
  92.   temps = millis();
  93.   small_stepper.step(Steps2Take);
  94.   temps =  millis()- temps ;
  95.   Serial.println(temps);
  96.   digitalWrite(IN1, LOW);
  97.   delay(2);
  98.   digitalWrite(IN2, LOW);
  99.   delay(2);
  100.   digitalWrite(IN3, LOW);
  101.   delay(2);
  102.   digitalWrite(IN4, LOW);
  103.   delay(2);
  104.   delay(2000);  //pause
  105.   digitalWrite(13, LOW);  
  106.   delay(100);              
  107.   digitalWrite(13, HIGH);  
  108.   delay(100);
  109.   Cycle++;
  110.  }
  111. else{
  112.   digitalWrite(IN1, LOW);
  113.   delay(2);
  114.   digitalWrite(IN2, LOW);
  115.   delay(2);
  116.   digitalWrite(IN3, LOW);
  117.   delay(2);
  118.   digitalWrite(IN4, LOW);
  119.   delay(2);
  120.  
  121.   digitalWrite(13, LOW);  
  122.   delay(2000);  
  123.   digitalWrite(13, HIGH);  
  124.   delay(2000);  
  125.   digitalWrite(13, LOW);  
  126.   delay(2000);              
  127.   digitalWrite(13, HIGH);  
  128.   delay(2000);
  129.   digitalWrite(13, LOW);  
  130.   delay(2000);  
  131.   digitalWrite(13, HIGH);  
  132.   delay(2000);
  133.   /*  digitalWrite(13, LOW);  
  134.   delay(2000);  
  135.   digitalWrite(13, HIGH);  
  136.   delay(2000);  
  137.   digitalWrite(13, LOW);  
  138.   delay(2000);              
  139.   digitalWrite(13, HIGH);  
  140.   delay(2000);
  141.   digitalWrite(13, LOW);  
  142.   delay(2000);  
  143.   digitalWrite(13, HIGH);  
  144.   delay(2000);
  145.     digitalWrite(13, LOW);  
  146.   delay(2000);  
  147.   digitalWrite(13, HIGH);  
  148.   delay(2000);  
  149.   digitalWrite(13, LOW);  
  150.   delay(2000);              
  151.   digitalWrite(13, HIGH);  
  152.   delay(2000);
  153.   digitalWrite(13, LOW);  
  154.   delay(2000);  
  155.   digitalWrite(13, HIGH);  
  156.   delay(2000);
  157.     digitalWrite(13, LOW);  
  158.   delay(2000);  
  159.   digitalWrite(13, HIGH);  
  160.   delay(2000);  
  161.   digitalWrite(13, LOW);  
  162.   delay(2000);              
  163.   digitalWrite(13, HIGH);  
  164.   delay(2000);
  165.   digitalWrite(13, LOW);  
  166.   delay(2000);  
  167.   digitalWrite(13, HIGH);  
  168.   delay(2000);
  169.     digitalWrite(13, LOW);  
  170.   delay(2000);  
  171.   digitalWrite(13, HIGH);  
  172.   delay(2000);  
  173.   digitalWrite(13, LOW);  
  174.   delay(2000);              
  175.   digitalWrite(13, HIGH);  
  176.   delay(2000);
  177.   digitalWrite(13, LOW);  
  178.   delay(2000);  
  179.   digitalWrite(13, HIGH);  
  180.   delay(2000);*/
  181.     //1 min waiting, and restart motor
  182.  
  183.   Cycle=0;
  184.     }
  185.  
  186.   if ((millis() - lastDebounceTime) > debounceDelay) { // Ha letelt az idö
  187.         if (buttonState == HIGH) { // Volt gombnyomás?
  188.           ledState = !ledState; // Állapot invertálás
  189.           digitalWrite(ledPin, ledState); // !LED
  190.           lastDebounceTime = millis();  // Új idöpont beállítása
  191.         }
  192.    }
  193.  }
  194.  
  195.  }
(#) kapu48 válasza kapu48 hozzászólására (») Jan 14, 2019 /
 
  1. void loop(){
  2.  
  3. // Gombv kezelés
  4.     reading = digitalRead(buttonPin); // Beolvassa a gomb állapotát
  5.   if (reading == HIGH)  // Ha megnyomták
  6.     { // És lehet, hogy sok a 100 szor ismétlés mert delay(50) van minden körben ez 50*100=5000 min várakozás
  7.       if(++lastButtonState == 100){  // Ha hosszan nyomja elszámolt xxx-ig lekapcsolja a LED-et
  8.                                 buttonState = LOW; //
  9.                                 ledState = HIGH;
  10.                                 digitalWrite(ledPin, ledState); // LED le
  11.                                 lastButtonState = 0; // Számolás elölröl
  12.                                 delay(500); // Hosszúnyomás kivárása
  13.  
  14.       }else  // LED Villogás bekapcs.
  15.       {
  16.                                 lastDebounceTime = millis(); // Beállítja a kezdő értéket
  17.                                 buttonState = HIGH; // Jelzi a gombnyomást
  18.       }
  19.       delay(50); // Prellezés kivárása
  20.   }             // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Kimaradt a zárójel neked a 62. sorban

Eddig tart a gomb lekezelése, A többi dolgokat tedd külön blokkba.
És az itt használd, változókat ne használd máshól.
Találj ki más neveket, ha még szükséges késleletetés. A 186. sortól nem kel ugyanezt megismételned.

A többi részt nem néztem! Először talán a LED villogás be/ki kapcsolás müködjőn neked.

  1. if(buttonState == HIGH){ // ha engedélyezve van a forgás
  2.       // Ide jön mindig 1 következő léptetés
  3.      ...
  4.     // és delay hlyett elmegyünk az elejér megnézni a gombot
  5.   }
A hozzászólás módosítva: Jan 14, 2019
(#) szili83 válasza kapu48 hozzászólására (») Jan 14, 2019 /
 
A zárójele a 193-as sorba tettem, akkor egyszer bekapcsol, de egy motorforgás után ki is kapcsol. Ha oda teszem a zárójelet, ahova írtad, akkor nem csinál semmit sem, alapból világít a LED, és olyan, mintha a gomb nyomás érzékelés nem is lenne.
(#) kapu48 válasza szili83 hozzászólására (») Jan 14, 2019 /
 
Ilyen hosszú várakozások tilosak a programban!: delay(2000); //pause

És van erre készen lib: Stepper Control
Bővebben: Link
A hozzászólás módosítva: Jan 14, 2019
(#) Kovidivi hozzászólása Jan 14, 2019 /
 
Helló!
Ismét belefutottam az Arduino rejtélyes megoldásaiba!
Van egy unsigned char tömböm, feltöltöttem for ciklussal ' '-zel, vagyis szóközzel (32-es dec érték).
Ha ki szeretném soros porton a tömböt iratni, ugyanígy for ciklussal, akkor, ha ezt használom:
Serial.print((unsigned char)lcd_tomb[i]); - 32-t ír ki a soros monitorra, ha ezt:
Serial.print((signed char)lcd_tomb[i]); - úgyszintén 32-t ír ki, viszont, ha ezt:
Serial.print((char)lcd_tomb[i]); - akkor szóközöket!
A probléma az LCD-m feltöltésénél is előjött, az lcd.print()-nél.
A char a C szabályai szerint alapértelmezetten signed char, tehát nem értem, miért különbözteti meg a környezet a char-t és a signed char-t. Valaki ki tudná esetleg fejteni?
Köszönöm.
(#) szili83 válasza kapu48 hozzászólására (») Jan 14, 2019 /
 
A várakozás a LED villogás/ motor ciklusok közti idő. Akor hogyan kellene várakoznom, illetve a LED-et villogtatni abban az esetben? Amúgy ez jól működik, csak a gomb nyomásos kapcsolás nem.

A programot külön egyedülállóan is lefutattam, bekapcsolás OK, de a kikapcsolás néha működik, de inkább szinte nem.

Szóval abba a programba kellene a gombbal való be/kikapcsolást betenni.

Nem lehetséges, hogy inkább a LOOP-on kívűl kellene, de hogyan eltárolni az állapotot? És onnan meghívni? Nem értek hozzá, csak találgatok.
(#) kapu48 válasza szili83 hozzászólására (») Jan 14, 2019 /
 
Sajnos az egész megoldásod triviális, nehezen lehet eldönteni kinél meddig tart a rövid vagy hosszúnak nevezet gombnyomás?

És ezt még tetézi, hogy közben mást is kel csinálni a programnak.
És azzal is szétcsúszik az egész időzítés. (Pláne ha még telerakod bizonytalan számú hosszú delayokal a programodat!)

Jobban járnál, ha megszakítással kezelnéd a gombot. Akkor csinálhatsz közben bármit.
Delay közben is bejön a megszakítás.

Különben az egész léptetés rendszeredet nem értem! Ezt nem így szoktuk megoldani.
(#) szili83 válasza kapu48 hozzászólására (») Jan 14, 2019 /
 
Akkor hogyan lehet megoldani? Nme szoktam bonyorult dolgokat csinálni, ez így működik, de értem, hogy ez miatt meg más nem fog működni. Hogyan kellene?
(#) tbarath válasza szili83 hozzászólására (») Jan 14, 2019 /
 
Már írtam. Vagy interrupt, vagy csinálsz valami saját delay-szerű függvényt, amiben a millis()-t figyeled és közben folyamatosan figyeled a bemenetedet, és ha kell akkor teszed amit kell.
(#) kapu48 válasza szili83 hozzászólására (») Jan 14, 2019 /
 
A 2 vagy 3 pinre kötheted a gombodat.
attachInterrupt() Bővebben: Link

  1. const byte ledPin = 13;
  2. const byte interruptPin = 2;
  3. volatile byte state = LOW;
  4.  
  5. // Megszakkítás rutin
  6. void Ginterrupt() {
  7.   state = !state; // állapot váltás
  8.   delay(60); //no prrel
  9.  
  10. }
  11.  
  12. void setup() {
  13.   pinMode(ledPin, OUTPUT);
  14.   pinMode(interruptPin, INPUT_PULLUP);
  15.   attachInterrupt(digitalPinToInterrupt(interruptPin), Ginterrupt, CHANGE);
  16. }
  17.  
  18. void loop() {
  19.   if(state == HIGH){
  20.   digitalWrite(ledPin, state);
  21.   //forog a motór
  22.   ....
  23.  }else{
  24.    //áll a motor
  25.    digitalWrite(ledPin, state);
  26.    ....
  27.  }
  28.  
  29. }
(#) KoblogPerGyok válasza Kovidivi hozzászólására (») Jan 14, 2019 /
 
A tömbben mindenképpen 1 byte van minden esetben de a print utasításkor változik minden. Az unsigned char-nál és a signed char esetén lehet, hogy a soros kommunikációkor karakterenként küldi a számot, míg a sima char-nál az adott számhoz rendelt ASCII-t küldi. Pontosabban a sima Char-nál csak a byte értékét, míg a többinél szerintem átalakítja a számot karaktersorozattá és azt küldi. A példádnál a 32-t elküldi elsőként a 3-as ASCII kódjával ASCII (51), utána meg a 2-s ASCII(50) kódját küldi.

De ez csak tipp, lehet tévedek. Ezt a serial.print()-ben kellene megnézni, hogy az pontosan mit is csinál.
(#) kapu48 válasza kapu48 hozzászólására (») Jan 14, 2019 /
 
Vagy így is lehetne:
  1. const byte fokapcsloPin = 13; // Motor főkapcsoló
  2. const byte interruptPin = 2;
  3. volatile byte state = LOW;
  4.  
  5. // Megszakkítás rutin
  6. void Ginterrupt() {
  7.   state = !state; // állapot váltás
  8.   digitalWrite(fokapcsloPin, state); // Motor be/ki kapcsolás
  9.   delay(60); //no prrel
  10.  
  11. }
  12.  
  13. void setup() {
  14.   pinMode(fokapcsloPin, OUTPUT);
  15.   pinMode(interruptPin, INPUT_PULLUP);
  16.   attachInterrupt(digitalPinToInterrupt(interruptPin), Ginterrupt, CHANGE);
  17. }
  18.  
  19. void loop() {
  20.  
  21.  ...
  22. }
A hozzászólás módosítva: Jan 14, 2019
(#) szili83 válasza tbarath hozzászólására (») Jan 14, 2019 /
 
Nekem az interrupt illetve a saját függvény kínai, hogy azt hogyan kell.
(#) Kovidivi válasza KoblogPerGyok hozzászólására (») Jan 14, 2019 /
 
Pedig elvileg a char és a signed char ugyan az lenne, engem ez kavar meg... Mindegy, van ennél nagyobb problémám is, hátha valaki foglalkozott már vele:

Szeretném korrekt módon megoldani az ékezetes betűk kiíratását 1602-es LCD-re.
Van egy progmem-mel tárolt szövegem, szeretném, ha ez már tartalmazná az ékezeteket is.
Visszaírom soros portra a tárolt szöveget, tökéletesen, ékezettel jelenik meg.
Szeretném ezt a szöveget karakterenként áthajtani egy függvényen, ami kiszűri a 128-nál magasabb kódú betűket, vagyis azokat a karaktereket, amik 2 byte-on vannak tárolva. Több kérdés felmerült bennem. Az AVR program memóriájában is 2byte-on kell tárolódjon. Az összes függvényem unsigned char vagy signed char vagy sima char-t használ, és mégis megjelenik az LCD kijelzőn a két speciális (hibás) karakter, amikor ékezetes betűt íratok ki. Ilyenkor a char temp változómnak el kell tudnia tárolnia a 2 byte-ot. Felülírja a következő RAM részt is, így 2byte-on tárol? Tehát akár hibás programfutást is előidézhet? Mivel 2byte-ot foglal el az ékezetes betű, nem tudom egyszerűen: if (temp=='á') levizsgálni, de if (temp=="á") se működik. Pedig ha ez működne, már azonnal elő tudnám venni a spécileg legyártott karaktert, írnám is ki az LCD-re a gyönyörű á-t. De nem tudom sehogy kiszűrni az ékezetes karaktert a programban... Próbáltam már egy két elemű char temp[2]-nek a 0. elemére betuszakolni az á betűt, hogy majd szépen átlóg a temp[1]-be is, így felbontódna két byte-ra, én meg egyszerre két egymás után jövő karaktert is tudok ellenőrizni, de nem akar működni. Nem szeretnék olyan szövegeket látni a kódban, hogy char temp[]="Mer""/0xfe"t"/0xb1"si";. Én szeretném, hogy bármit beírhassak: char temp[]="Merítési";, majd a fv. feldolgozza. Lehetséges ez? Legyetek szívesek, mutassatok irányt. Köszönöm.
(#) tbarath válasza szili83 hozzászólására (») Jan 14, 2019 /
 
Az interruptot mos írta le kapu48 fórumtárs.
A saját függvény pedig kb. annak mintájéra mehet, amit írtam:
  1. boolean myDelay(unsigned int ms){
  2.         unsigned long tX = millis() +ms;
  3.         while ((millis() < tX) && (high/low == digitalRead(valami)){
  4.         //do nothing
  5.         }
  6.         if (high/low == digitalRead(valami){
  7.                 return false;}
  8.         else{
  9.                 return true;}
  10. }


Ezt ha meghívod mondjuk 2000 msec-kel, akkor true-t ad vissza ha simán lefutott és senki se nyomkodta a gonbot, és false-t ad vissza gombnyomásra. Ezt nyilván le kell kezelni.
Lehet olyat is csinálni, hogy annyi msec-et ad vissza, ami hátra volt még gombnyomáskor, stb.
(#) kapu48 válasza Kovidivi hozzászólására (») Jan 14, 2019 /
 
Látogas el a tavir-AVR oldalra: Bővebben: Link

Itt többféle megoldást találsz.
(#) kapu48 válasza szili83 hozzászólására (») Jan 15, 2019 /
 
Motor forgatás lecke: 17. LECKE/ STEPPER (LÉPTETŐ) MOTOR
Bővebben: Link
(#) Kovidivi válasza kapu48 hozzászólására (») Jan 15, 2019 /
 
Köszi. Olvasgatom. Eddig nem nagyon vitt előre. Valamiért nálam 2 byte egy ékezetes betű. Az LCD-n is két furcsa karakter jelenik meg egy lcd.print("á") után, és a soros porton is két karakter jön át ékezetenként, ha az ékezetes szöveget tartalmazö tömböt kiiratom. Ha megszámoltatom az strlen() fv-nyel a tömb hosszát, az ékezetes betűket mindig kettőnek számolja. Ez a bajom.
(#) kapu48 válasza Kovidivi hozzászólására (») Jan 15, 2019 /
 
Használd a YAT terminalt: Bővebben: Link

Be lehet állítani sokféle betű készletet.
(#) szeg76 válasza Kovidivi hozzászólására (») Jan 15, 2019 /
 
A gondot az okozza, hogy az operációs rendszer Unicode karakterkódolást használ, ami a szabványos ASCII karaktereket 1 byteon tárolja 0..127 kódokkal, az egyéb nemzeti karaktereket pedig több byteon. Ezek közül az első értéke 127-nél nagyobb, innen tudja, hogy nem szolgai módon tovább kell küldeni a karakterkódot, hanem kezelni kell.
A kijelződ viszont minden karaktert 1 byteon tárol.

Kell írnod egy függvényt, ami az Arduino forrásban tárolt szövegedet kiíratás előtt átnézi, az ASCII karaktereket simán átengedi, a több byteos nem ASCII-kat pedig táblázatból kikeresi és behelyettesíti a 1602-es kijelző 8 felhasználói karakterkódja közül a megfelelőre.
(#) Georgee hozzászólása Jan 15, 2019 /
 
Üdv Mindenkinek. Adott egy kód, amiben van feszültségmérés. Autó akkumulátor/generátor feszültséget figyel. Kérdésem az, hogy hogy tudom megoldani, hogy a kijelzőn csak egy tizedes jegyig írja ki a számot? Jelenleg két tizedesjegy van, ami számomra fölösleges.
(#) Triger válasza Georgee hozzászólására (») Jan 15, 2019 /
 
Hirtelen, kód nélkül, emlékeim szerint, tegyél egy vessző eggyet (,1) a kiírós sorban kiírandó változó mögé.
Bővebben: Link
A hozzászólás módosítva: Jan 15, 2019
(#) Georgee válasza Triger hozzászólására (») Jan 15, 2019 /
 
Megnézem. Köszönöm.
(#) Kera_Will válasza szili83 hozzászólására (») Jan 15, 2019 /
 
Idézet:
„Nekem az interrupt illetve a saját függvény kínai,”

Keressél rá ezekre a könyvekre :

Ruzsinszki Gábor - Mikrovezérlős rendszerfejlesztés cc++ nyelven II

vagy: innen letölthető másik: Harsányi Réka – Juhász Márton András Fizikai számítástechnika: elektronikai alapok és Arduino programozás című könyv

Arduinos összefoglaló Cseh Róbert
(#) vargham válasza Kera_Will hozzászólására (») Jan 15, 2019 /
 
Valamint ha túl mer nézni az Arduino-n, akkor maga az AVR kínál majdnem minden GPIO-n úgynevezett pin change interruptot. Nagyon hasznos.
(#) Kovidivi válasza szeg76 hozzászólására (») Jan 15, 2019 /
 
Köszi.
Ez lenne a célom, de nem értem, hogy a 2byte-on tárolt karakter hogyan jut át a függvényeimen, amik csak 1 byte-ot kapnak, és 1byte-ot adnak tovább. És azt nem tudom, hogyan tudnám ezt a két byte-os karaktert két byte-ra szétválasztani, mikor mindenhol 1byte-ként van kezelve. Tehát simán eltárolom az á betűt char temp='á'-ként.
Ebben tudnátok esetleg segíteni? Köszi.
A hozzászólás módosítva: Jan 15, 2019
(#) Kera_Will válasza vargham hozzászólására (») Jan 15, 2019 /
 
Ne bonyolítsd az életét ... még egy saját szubrutint / függvényt se tud írni ... dee remélhetőleg hamarosan ráfog jönni a miként és hogyanjára !
Következő: »»   502 / 840
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