Arduino programozás segítség

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. március 29. péntek, 22:33

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

Akkor ezek nem kapnak értéket:
byte A; üresek?
byte B; ?
byte C; ?
byte D; ?
char outData[]={A,B,C,D}; ? <Nem kerül bele semmi!

Ugyan valamit bohóckodsz a loop-ban velük.
De az már a setup után hajtódik végre.
És mivel a setupban:
void setup(){
Wire.begin(2);
Wire.onReceive(data); < Itt hivod meg a data() függvényt, még nincsen semmi értéke outData-nak

pinMode(EI,INPUT);
pinMode(HI,INPUT);
pinMode(F1,INPUT);
pinMode(F2,INPUT);
pinMode(F3,INPUT);
pinMode(F4,INPUT);
pinMode(KF,INPUT);
pinMode(UF,INPUT);
...

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. március 29. péntek, 22:44

Igy próbáld:

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

#include <Wire.h>

int address = 4;
byte buffer[4] = {1, 2, 3, 4};

void setup() {
  Wire.begin(address);
  Wire.onRequest(Request);
}

void loop() {}

void Request() {
 
  Wire.write(buffer, 4);
}


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

Re: Arduino programozás segítség

HozzászólásSzerző: Verjoz » 2019. április 1. hétfő, 7:01

Köszönöm szépen kapu48!
Így már működik!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 1. hétfő, 13:18

Ha ez már megy! akkor próbálj tovább lépni!
Itt 1 lehetséges példa:

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

// slaveWire.ino
#include <Wire.h>
/* Ne rakt int-be mert feleslsgesen foglalsz memoriát!
int EI=2;
int HI=3;
int F1=10;
int F2=11;
int F3=12;
int F4=13;
int KF=14;
int UF=15;
*/
// Inkább definiáld a fordítonak az értékeket!
#define EI 2
#define HI 3
#define F1 10
#define F2 11
#define F3 12
#define F4 13
#define KF 14
#define UF 15
// És lehtőleg használj hosszabb neveket!
byte A;
byte B;
byte C;
byte D;

char outData[4];


void setup(){

   Wire.begin(2);

   Wire.onReceive(data);


   pinMode(EI,INPUT);
   pinMode(HI,INPUT);
   pinMode(F1,INPUT);
   pinMode(F2,INPUT);
   pinMode(F3,INPUT);
   pinMode(F4,INPUT);
   pinMode(KF,INPUT);
   pinMode(UF,INPUT);
  //Kellenének vissza jelző LEDek?
}


void loop(){


   if(digitalRead(EI)==LOW&&digitalRead(HI)==LOW){
      delay(3);
      A=0;
    outData[0]=A; // be rakjuk a tömbe az uj étéket
    Wire.onReceive(data); // elküldjük a változtatást
   }
   if(digitalRead(EI)==HIGH&&digitalRead(HI)==LOW){
      delay(3);
      A=1;
    outData[0]=A;
    Wire.onReceive(data);
   }

   if(digitalRead(EI)==LOW&&digitalRead(HI)==HIGH){
      delay(3);
      A=2;
    outData[0]=A;
    Wire.onReceive(data);
   }

   if(digitalRead(F1)==LOW&&digitalRead(F2)==LOW&&digitalRead(F3)==LOW&&digitalRead(F4)==LOW){
      delay(3);
      B=0;
    outData[1]=B;
    Wire.onReceive(data);
   }
   if(digitalRead(F1)==HIGH&&digitalRead(F2)==LOW&&digitalRead(F3)==LOW&&digitalRead(F4)==LOW){
      delay(3);
      B=1;
    outData[1]=B;
    Wire.onReceive(data);
   }
   if(digitalRead(F1)==LOW&&digitalRead(F2)==HIGH&&digitalRead(F3)==LOW&&digitalRead(F4)==LOW){
      delay(3);
      B=2;
    outData[1]=B;
    Wire.onReceive(data);
   }
   if(digitalRead(F1)==LOW&&digitalRead(F2)==LOW&&digitalRead(F3)==HIGH&&digitalRead(F4)==LOW){
      delay(3);
      B=3;
    outData[1]=B;
    Wire.onReceive(data);
   }
   if(digitalRead(F1)==LOW&&digitalRead(F2)==LOW&&digitalRead(F3)==LOW&&digitalRead(F4)==HIGH){
      delay(3);
      B=4;
    outData[1]=B;
    Wire.onReceive(data);
   }

   if(digitalRead(KF)==HIGH){
      delay(3);
      C=1;
    outData[2]=C;
    Wire.onReceive(data);
   }
   else{
     C=0;
     outData[2]=C;
    Wire.onReceive(data);
   }


   if(digitalRead(UF)==HIGH){
      delay(3);
      D=1;
    outData[3]=D;
    Wire.onReceive(data);
   }
   else{
     D=0;
     outData[3]=D;
    Wire.onReceive(data);
   }

}

int data(){
  int elment = 0;
   elment = Wire.write(outData,4);
  if(elment == 4){  // még kezdetleges hiba javítás kisérlet
    return elment;  // ok vissza adjuk az elküldött byteok számát
  }else{    // error ujra probáljuk
    Wire.onReceive(data); // valahogyan jelezni kellene a hibát a felhasználonak!
  }
 
}


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

Re: Arduino programozás segítség

HozzászólásSzerző: Verjoz » 2019. április 1. hétfő, 16:18

Oké értem én hogy gőzmozdony, de mi hajtja!?

Amúgy köszönöm hogy foglalkozol vele!
Hogy lásd mire kell ezt használnom, pár sorban leírom.

Slave összeszedi a kontaktok állapotát.
Master bekéri és eldönti mit akarunk és jó e a kombinácio úgy hogy egy második slave adatait is bekéri ami fordulatszámot figyel, meg analog jeleket.
Majd egy harmadik slavenak elküldi hogy mi történjen, ami visszaküldi a masternak mi történt. 5 db szolenoidot fog működtetni. Természetesen optocstolt rellével.

Megbonyolítottam?

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 1. hétfő, 18:11

Értem én, hogy repülni akarsz, mint a rakéta!
Bár szerintem okosabb lenne lépésről lépésre haladni a cél felé!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 1. hétfő, 18:33

Gépek melletti üzemre az I2C kommunikáció veszet ügy!
Egyrészt roppant lassú!
Másrészt minden 5V-os átvitel zavar érzékeny és gyenge a jelszint.
Nem lehet nagyobb távolságra elvinni.
Inkább használjál soros illesztőket mindkét oldalon.
Gyorsabb és hardveres átvitelt valósit meg, 12V-on kevésbé érzékeny.
Nagyobb távolságot tudsz biztonságosabban áthidalni.

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

Re: Arduino programozás segítség

HozzászólásSzerző: Verjoz » 2019. április 1. hétfő, 18:43

Ez jó ötlet!
De mi számít nagy távolságnag i2c nél?
Amit én át szerettem volna hidaln az kb 2-3 méter.
De ha bezavarja az 5v ot gép rendszerfeszültsége akkor tényleg nem jó ez az elképzelésem.

Soros illesztés!?
Még nem volt vele dolgom.
Utánnajárok.!
Köszönöm az infót.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 1. hétfő, 19:21


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

Re: Arduino programozás segítség

HozzászólásSzerző: Verjoz » 2019. április 1. hétfő, 19:59

És a CAN BUS az milyen lenne ide.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 1. hétfő, 20:13

Annyival jobb, hogy 1 SPI portra több scan modul is köthető.
Csak _CS vezérlő pin kel mindnek külön.
Míg a soros portra csak 1 rs238-as.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 1. hétfő, 20:16

Ha csavart erű hálozati kábelt használsz, kevésbé lessz zavarérzékeny.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 1. hétfő, 20:32

Viszont a soros komunikálás mehet egyszerre mindkét irányba.

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

Re: Arduino programozás segítség

HozzászólásSzerző: Verjoz » 2019. április 2. kedd, 14:47

Segítséget szeretnék kérni microcontroler téren!
A fenti projektemel hardvare ügyében lenne kapcsolatos.
Azért gondoltam hogy igy szeparálnám szét a vezérlést mert sok dolgot kell csináln.
-2 fordulatszámjel
-3-4 analóg
-8-10 kontaktus állapot
-idő mérés és elemzés
-kijelzés szinte az összes értéket
.
.
Meg még mi jut eszembe...
Szóval webshopban nézelődök és rátalálok egy ilyenre
Cortex m3
Leírásából a memoriakapacitásán kívül a 84MHz órajel fogott meg.
De jó e nekem????
Másabb e a szoftver része mint amit ardunál megszoktam?
Vagy miben másabb..??

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Arduino programozás segítség

HozzászólásSzerző: kapu48 » 2019. április 2. kedd, 17:27

Ha rá gondoltál: DUE (SAM8XE; ARM, Cortex-M3;CH340 ?
Nyugodtan belevághatsz, programozás terén mindenben kompatilis az arduinoval.
Természetesen a több tudás, nagyobb bonyolultsággal jár, hardver és programozás terén is.

Én kimondottan szeretem a DUET, ennél már csak az STM32-es ARM-ok jobbak.


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég