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
Dani
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2006. április 6. csütörtök, 6:00

Re: Arduino programozás segítség

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

Sziasztok segítségeteket kérem
Eddig Bascomban programoztam, váltottam arduinora ,ami megőrjít, írok egy programot (bármit) ami jól működik,módosítom, a vázlat jól lefordul. Feltöltéskor az alábbi hibaüzenetet kapom

avrdude: stk500_paged_load(): (a) protocol error, expect=0x10, resp=0x00
avrdude: stk500_cmd(): programmer is out of sync
avr_read(): error reading address 0x0000
read operation not supported for memory "flash"
avrdude: failed to read all of flash memory, rc=-2
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x00

utána már nem tudok feltölteni programot (a blink-et sem ) mindig ugyanazt a hibát írja ki egészen addig amíg újra nem indítom a gépemet teljesen
olyan mintha beakadna az usb kezeles
win7 és arduino1.8.9 van a gépemen
mi erre a megoldás?
Avatar
Dani
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2006. április 6. csütörtök, 6:00

Re: Arduino programozás segítség

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

Közben rájöttem hogy mi okozhatja, ha használom a soros monitort és bezárom valamiért nem mindig zárja le az USB-n a kommunikációt.
Nem tudom hogy ez a gép problémája vagy windózé, vagy arduinóé.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino programozás segítség

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

Szoftverhiba, PC oldalon.

Régebbi Arduino kiadásnál is csinálja?
http://www.tavir.hu - a gazda :)
Avatar
Dani
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2006. április 6. csütörtök, 6:00

Re: Arduino programozás segítség

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

Köszi a választ közben én is erre jutottam mert ugyanez a verzió másik gépen nem csinálja .
Avatar
Verjoz
SzínkódFestő
Hozzászólások: 99
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Arduino programozás segítség

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

Sokan mondták azt, hogy az arduino hardveresen nem arra van tervezve, hogy mondjuk egy non-stop futtatást kibírjon, hónapokon keresztül.
He azt is modták már, hogy azzá lehet tenni.
Nos engem ez érdekelne, hogy mik is a korlátok és hogyan lehet leküzdeni őket.
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 »

Az Arduino? Melyik? Csak mert gyártanak sokféle variánst. Az alapvetően elmondható, hogy bármelyiket is használod, a mikrokontroller az egy ipari cucc. Arra tervezték, hogy egyszer bekapcsolod, és évekig megy.
Maga a fejlesztőeszköz is bírja ezt. Tehát alapvetően nem az idővel van a gond. Nem tudom, hol hallottál ilyet.
Ott lehet gond, hogy ha mechanikai terhelésnek (rázkódás, ütések) van kitéve. Olyan helyre illik saját, akár műgyantával kiöntött elektronikát készíteni.
A másik probléma az elektromosan zajos környezet. De ott sem idővel jön a probléma, hanem viszonylag hamar. Jobb esetben csak meghülyül a mikrokontroller, rosszabb esetben tönkre is megy. Ezért a felhasználási körülmények függvényében védelmet kell rakni minden ki és bemenetre. Minél mostohább a környezet, annál durvábbat.
Avatar
Verjoz
SzínkódFestő
Hozzászólások: 99
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Arduino programozás segítség

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

Köszönöm szépen az infót !
Avatar
Verjoz
SzínkódFestő
Hozzászólások: 99
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Arduino programozás segítség

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

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

/*Hardware: atmel 328 arduino pro mini 5V 16 MHz*/



#define pwmpinXP 3 //output pin X axle positive line
#define pwmpinXN 5 //output pin X axle negative line
#define pwmpinYP 6 //output pin Y axle positive line
#define pwmpinYN 9 //output pin Y axle negative line
#define tszkopOut 10 //output pin Z axle positive line
#define tszkopIn 11 //output pin Z axle megative line
#define potiXaxle A3 //Input analog signal X axle
#define potiYaxle A2 // Input analog sognal Y axle
int potiertekX; //var.potentiometer process X axle 
int potiertekY; //var.potentiometer process Y axle
int kitoltesXP; // ioutput pwm signal + X 
int kitoltesXN; // output pwm signal - X
int kitoltesYP; // output pwm signal + Y
int kitoltesYN; // output pwm signal - Y
#define nyomogombZP 2 //input pin Z axle positive line
#define nyomogombZN 4 // input pin Z axle negative line



void setup(){
  //Setup In and Out pins
  pinMode(pwmpinXP,OUTPUT);
  pinMode(pwmpinXN,OUTPUT);
  pinMode(pwmpinYP,OUTPUT);
  pinMode(pwmpinYN,OUTPUT);
  pinMode(tszkopOut,OUTPUT);
  pinMode(tszkopIn,OUTPUT);
  pinMode(nyomogombZP,INPUT);
  pinMode(nyomogombZN,INPUT);
  
  
  
}




 void loop(){
  potiertekX=analogRead(potiXaxle)/4; //analog signal read X axle potentiometer
  potiertekY=analogRead(potiYaxle)/4; //analog signal read Y axle potentiometer
  
// switch process
  if(digitalRead(nyomogombZN)==HIGH){digitalWrite(tszkopIn,HIGH);}
  else{digitalWrite(tszkopIn,LOW);}
  if(digitalRead(nyomogombZP)==HIGH){digitalWrite(tszkopOut,HIGH);}
  else{digitalWrite(tszkopOut,LOW);}
 
 /*X axle up and down*/

 
  switch (potiertekX){
    
    //X axle not run
    case 120: kitoltesXP=0;
    break;
    
    case 121: kitoltesXP=0;
    break;
    
    case 122: kitoltesXP=0;
    break;
    
    case 123: kitoltesXP=0;
    break;
    
    
    case 124: kitoltesXP=0;
    break;
    
   case 126: kitoltesXP=0;
    break;
    
     case 127: kitoltesXP=0;
    break;
    
     case 128: kitoltesXP=0;
    break;
    
     case 129: kitoltesXP=0;
    break;
    
     case 130: kitoltesXP=0;
    break;
    
     case 131: kitoltesXN=0;
    break;
    
      case 132: kitoltesXN=0;
    break;
    
     case 133: kitoltesXN=0;
    break;
    
     case 134: kitoltesXN=0;
    break;
    
     case 135: kitoltesXN=0;
    break;
    
    case 136: kitoltesXN=0;
    break;
    
    case 137: kitoltesXN=0;
    break;
    
    case 138: kitoltesXN=0;
    break;
    
    case 139: kitoltesXN=0;
    break;
    
    case 140: kitoltesXN=0;
    break;
    
    
    //X axle up
     case 117: kitoltesXP=2;
    break;
    
     case 115: kitoltesXP=6;
    break;
    
     case 112: kitoltesXP=10;
    break;
    
     case 110: kitoltesXP=12;
    break;
    
     case 108: kitoltesXP=15;
    break;
    
     case 105: kitoltesXP=20;
    break;
    
     case 100: kitoltesXP=25;
    break;
    
     case 95: kitoltesXP=30;
    break;
    
     case 90: kitoltesXP=40;
    break;
    
     case 85: kitoltesXP=50;
    break;
    
     case 80: kitoltesXP=60;
    break;
    
     case 75: kitoltesXP=70;
    break;
    
     case 70: kitoltesXP=90;
    break;
    
    case 65: kitoltesXP=100;
    break;
    
    case 60: kitoltesXP=120;
    break;
    
    case 55: kitoltesXP=150;
    break;
    
    case 50: kitoltesXP=170;
    break;
    
    case 40: kitoltesXP=180;
    break;
    
    case 30: kitoltesXP=190;
    break;
    
    case 20: kitoltesXP=200;
    break;
    
    case 10: kitoltesXP=220;
    break;
    
    case 0: kitoltesXP=255;
    break;
 
    
    
    //X axle down
    
     case 141: kitoltesXN=2;
    break;
    
     case 144: kitoltesXN=4;
    break;
    
     case 147: kitoltesXN=7;
    break;
    
     case 150: kitoltesXN=10;
    break;
    
     case 153: kitoltesXN=12;
    break;
    
     case 156: kitoltesXN=15;
    break;
    
     case 160: kitoltesXN=17;
    break;
    
     case 165: kitoltesXN=20;
    break;
    
     case 170: kitoltesXN=25;
    break;
    
     case 175: kitoltesXN=30;
    break;
    
     case 180: kitoltesXN=35;
    break;
    
     case 185: kitoltesXN=40;
    break;
    
     case 190: kitoltesXN=50;
    break;
    
     case 195: kitoltesXN=60;
    break;
    
    case 200: kitoltesXN=80;
    break;
    
    case 205: kitoltesXN=100;
    break;
    
    case 210: kitoltesXN=120;
    break;
    
    case 215: kitoltesXN=150;
    break;
    
    case 220: kitoltesXN=160;
    break;
    
    case 225: kitoltesXN=170;
    break;
    
    case 230: kitoltesXN=180;
    break;
    
    case 235: kitoltesXN=200;
    break;
    
    case 240: kitoltesXN=210;
    break;
    
    case 250: kitoltesXN=220;
    break;
    
    case 255: kitoltesXN=255;
    break;
    
  }
 switch (potiertekY){ 
    
    //Y axle not run
    
    case 100: kitoltesYP=0;
    break;
    
    case 108: kitoltesYP=0;
    break;
    
    
    case 110: kitoltesYP=0;
    break;
    
    case 115: kitoltesYP=0;
    break;
    
    case 118: kitoltesYP=0;
    break;
    
    case 119: kitoltesYP=0;
    break;
    
     case 120: kitoltesYP=0;
    break;
    
    case 121: kitoltesYP=0;
    break;
    
    case 122: kitoltesYP=0;
    break;
    
    case 123: kitoltesYP=0;
    break;
    
    
    case 124: kitoltesYP=0;
    break;
    
   case 126:{kitoltesYP=0;}
    break;
    
     case 127: kitoltesYP=0;
    break;
    
     case 128: kitoltesYP=0;
    break;
    
     case 129: kitoltesYP=0;
    break;
    
     case 130: kitoltesYN=0;
    break;
    
     case 131: kitoltesYN=0;
    break;
    
      case 132: kitoltesYN=0;
    break;
    
     case 133: kitoltesYN=0;
    break;
    
     case 134: kitoltesYN=0;
    break;
    
     case 135: kitoltesYN=0;
    break;
    
    case 136: kitoltesYN=0;
    break;
    
    case 137: kitoltesYN=0;
    break;
    
    case 138: kitoltesYN=0;
    break;
    
    case 139: kitoltesYN=0;
    break;
    
    case 140: kitoltesYN=0;
    break;
    
    case 142: kitoltesYP=0;
    break;
    
    case 144: kitoltesYP=0;
    break;
    
    case 146: kitoltesYP=0;
    break;
    
    case 148: kitoltesYP=0;
    break;
    
    case 150: kitoltesYP=0;
    break;
    
    case 155: kitoltesYP=0;
    break;
    
    
    case 157: kitoltesYP=0;
    break;
    
    case 160: kitoltesYP=0;
    break;
    
    
    case 165: kitoltesYP=0;
    break;
    
    
    //Y axle up
     case 117: kitoltesYP=2;
    break;
    
    
    
     case 95: kitoltesYP=30;
    break;
    
     case 90: kitoltesYP=40;
    break;
    
     case 85: kitoltesYP=50;
    break;
    
     case 80: kitoltesYP=60;
    break;
    
     case 75: kitoltesYP=70;
    break;
    
     case 70: kitoltesYP=90;
    break;
    
    case 65: kitoltesYP=100;
    break;
    
    case 60: kitoltesYP=120;
    break;
    
    case 55: kitoltesYP=150;
    break;
    
    case 50: kitoltesYP=170;
    break;
    
    case 40: kitoltesYP=180;
    break;
    
    case 30: kitoltesYP=190;
    break;
    
    case 20: kitoltesYP=200;
    break;
    
    case 10: kitoltesYP=220;
    break;
    
    case 0: kitoltesYP=255;
    break;
 
    
    
    //Y axle down
    
    
     case 170: kitoltesYN=25;
    break;
    
     case 175: kitoltesYN=30;
    break;
    
     case 180: kitoltesYN=35;
    break;
    
     case 185: kitoltesYN=40;
    break;
    
     case 190: kitoltesYN=50;
    break;
    
     case 195: kitoltesYN=60;
    break;
    
    case 200: kitoltesYN=80;
    break;
    
    case 205: kitoltesYN=100;
    break;
    
    case 210: kitoltesYN=120;
    break;
    
    case 215: kitoltesYN=150;
    break;
    
    case 220: kitoltesYN=160;
    break;
    
    case 225: kitoltesYN=170;
    break;
    
    case 230: kitoltesYN=180;
    break;
    
    case 235: kitoltesYN=200;
    break;
    
    case 240: kitoltesYN=210;
    break;
    
    case 250: kitoltesYN=220;
    break;
    
    case 255: kitoltesYN=255;
    break;
  }
 //output control
analogWrite(pwmpinXP,kitoltesXP);
analogWrite(pwmpinXN,kitoltesXN);
analogWrite(pwmpinYP,kitoltesYP);
analogWrite(pwmpinYN,kitoltesYN);

}
Avatar
Verjoz
SzínkódFestő
Hozzászólások: 99
Csatlakozott: 2018. március 13. kedd, 7:18

Re: Arduino programozás segítség

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

Üdv mindenkinek! A fenti kóddal kapcsolatban szeretném a véleményeteket és segítségeteket kikérni. Lényege annyi hogy joystik el irányítok valamit.
A shopban kapható joystick ról van szó. X Y irány potiról van működtetve. A Z irány nyomógombról.A kód működik csak szerintem biztos van egyszerűbb módja is a megvalósításának csak valahogy nem áll össze a matek. Alaphelyzetben a potik kb középértéken állnak. És az értékük változásával szsbályzom a a pwm kitöltési tényezőit. De ebben a formában nem túl elegáns nekem.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino programozás segítség

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

select-case elegánsabban:

if (éréek>xxx && érték <yyyy) {
legyen valami;}

vagy a select-case esetén a case tartományokat adod meg.

Tipp: a poti bizonytalanságot/kézremegést tedd bele. ne 1-1 mérésed legyen, hanem én futóátlagot csinálnék. Utolsó 10...200 mérés átlagolva. Ez a mérési bizonytalansági hibát is szűri..
http://www.tavir.hu - a gazda :)
FoxiMaxi
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2018. március 19. hétfő, 20:07

Re: Arduino programozás segítség: String konverzió oda-vissza

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

Sziasztok! Lehet már számtalanszor előfordult a kérdés...de...
Kommunikáció során CRC és Check summa számoláshoz kellenének a karakter konverziók. Hogyan tudom kinyerni egy string ASCII kódjait? Illetve hogyan alakítom vissza a byte-kódokat stringre, amit már megesz a Serial objektum?
Köszönöm...
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 »

Elég a típus módosítás is: (uint16_t)txtMsg

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

/*
  String length()

  Examples of how to use length() in a String.
  Open the Serial Monitor and start sending characters to see the results.

  created 1 Aug 2010
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/StringLengthTrim
*/


//unsigned int lastStringLength = txtMsg.length();     // previous length of the String


void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(230400);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // send an intro:
//  Serial.println("\n\nString  length():");
  Serial.println();
  String txtMsg = "";                         // a string for incoming text
  txtMsg = "Helo vilag!";
  uint16_t cheksum = 0;
  for(uint8_t i = 0; i < txtMsg.length(); i++){
    cheksum += (uint16_t)txtMsg[i]; 
    
  }
  Serial.print("cheksum: ");
  Serial.println(cheksum);
  Serial.println(txtMsg);
}

void loop() {
  
}
FoxiMaxi
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2018. március 19. hétfő, 20:07

Re: Arduino programozás segítség

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

És valóban... :)
Köszönöm!

Pusztán a kíváncsiság hajt...miért nem egyenértékű a két felírás?

byte intN;
Serial.print(":" + (char)intN);

ezzel

byte intN;
Serial.print(":");
Serial.print((char)intN);

Az első felírás hibás adatátvitelt eredményez, míg a második helyeset.
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 »

Változó típusú string ki íratásához használ az "sprintf()" függvényt:
bövebben: http://lidi.uw.hu/krc/files/07.html#7.2.

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

#include <stdio.h>


char *string;
byte intN = 36;

sprintf(string, ": %u", intN);
Serial.print(string);
// vagy:
sprintf(string, ": %c", intN);
Serial.print(string);
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 »

Tetszőlegesen variálhatod a szöveg vagy változók egybe fűzését.
Pl.:

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

  byte O = 12, P = 59, MP = 30;

  sprintf(string, "Ora: %u  Perc: %u  mp: %u", O, P, MP);
  Serial.println(string); 
Válasz küldése