adrino - skapa data typ med fler olika delar och värden

Permalänk
Medlem

adrino - skapa data typ med fler olika delar och värden

hej
jag håller på med adrino och jag skulle vilja skapa en data sträng med möjlighet att har fler värden samtidigt
typ
a(1).a=5
a(1).b=3
a(1).c=7
men hur gör jag en sådan data typ? om det går att göra på en adrino

Permalänk
Medlem
Permalänk
Medlem

tack det fungera bra

Permalänk
Medlem

går det att skriva så?
tanken är att sdag ska finnas 7 gånger
och shema 4 gånger

struct shemadata { int till=0; int sh=0; int smin=0; int kor=0; int sdag[7]; }; struct shemadata shema[4];

Permalänk
Hedersmedlem

Nästan, du kan inte skriva =0 inuti en definition av en struct.

Med det sagt, förklara närmare vad du vill uppnå, jag tror det finns bättre sätt.

Permalänk
Medlem

jag vill ha
en sträng som innehåller
1 st "till" som är tal mellan 0 och 1
1 st "sh" som är tal mellan 1 till och med 12
1 st "smin" som är tal mellan 0 till och med 59
1 st "kor" som är till mellan 0 till och med 2
7 st "sdag" som är till mellan 0 till och med 1
sdag ska kunna helst vara så att man kunna välja med en siffra typ sdag(4)

och allt detta ska vara 4 gånger

Permalänk
Hedersmedlem

Okej, men då har du gjort rätt. Men förmodligen ska "sh" vara från 0 till 23.

Plocka bort =0 i din struct så ska du se att det går bra.

Permalänk
Medlem
Skrivet av pv2b:

Okej, men då har du gjort rätt. Men förmodligen ska "sh" vara från 0 till 23.

Plocka bort =0 i din struct så ska du se att det går bra.

ja det ska vara som du skriver 0 till 23

men jag får lite konstiga tal efter jag har skapa den. och innan jag la till =0 typ
shema[3].sdag[1]=2345 och shema[4].sdag[4]=-6453 och detta strular till det för mig.
men det händer bara på shema[3] och shema[4]
varför???

Permalänk
Hedersmedlem

Du måste ju initiera din datastruktur innan du gör något med den. Om du bara deklarerar den bara så där så kommer det vara skräp i strukturen, precis som du är inne på.

Något typ så här (bara skrivet lite snabbt och inte testat):

void nollstall_schema(void) { int i, j; for (i = 0; i < 4; i++) { shema[i].till = 0; shema[i].sh = 0; shema[i].smin = 0; shema[i].kor = 0; shema[i].sdag = 0; for (j = 0; j < 7; j++) { shema[i].sdag[j] = 0; } } }

Efter du kört den funktionen så är alla dina data på noll.

Permalänk
Medlem

jag ska testa i morgon få se om det funkar
jag tackar för hjälpen

Permalänk
Medlem
Skrivet av pv2b:

Du måste ju initiera din datastruktur innan du gör något med den. Om du bara deklarerar den bara så där så kommer det vara skräp i strukturen, precis som du är inne på.

Något typ så här (bara skrivet lite snabbt och inte testat):

void nollstall_schema(void) { int i, j; for (i = 0; i < 4; i++) { shema[i].till = 0; shema[i].sh = 0; shema[i].smin = 0; shema[i].kor = 0; shema[i].sdag = 0; for (j = 0; j < 7; j++) { shema[i].sdag[j] = 0; } } }

Efter du kört den funktionen så är alla dina data på noll.

Om man vill göra det med lite mindre kod kan man nolla hela structen på en gång:

void nollstall_shema(void) { memset(shema, 0, sizeof(shema)); }

Permalänk
Medlem

när jag testa att skapa data strängen och nolla den så går det bra. men jag lägger in i mitt projekt så när jag skriver in

shema.dag[5]=0

startar arduino om själv vet någon varför?
kort är en mega 2560
och sketch använder 17% och global variables använder 46%

Permalänk
Medlem
Skrivet av jost1:

när jag testa att skapa data strängen och nolla den så går det bra. men jag lägger in i mitt projekt så när jag skriver in

shema.dag[5]=0

startar arduino om själv vet någon varför?
kort är en mega 2560
och sketch använder 17% och global variables använder 46%

Var inte shema en array? I så fall måste du skriva shema[x].dag[y] (sen hette väl structmedlemmen sdag och inte dag?)

Permalänk
Medlem
Skrivet av pelleplu:

Var inte shema en array? I så fall måste du skriva shema[x].dag[y] (sen hette väl structmedlemmen sdag och inte dag?)

själv klart ska det vara

shema[1].sdag[5]

men jag har problem att Arduino starta om sig själv när lägger in det mitt stora projekt som jag beskrev tider. någon som vet varför den gör så?

Permalänk
Medlem
Skrivet av jost1:

själv klart ska det vara

shema[1].sdag[5]

men jag har problem att Arduino starta om sig själv när lägger in det mitt stora projekt som jag beskrev tider. någon som vet varför den gör så?

Typiskt om man använder sig av pekare och arrayer (som du gör) är att man av misstag skriver till en annan del av minnet än det man tänkt sig. Då kan man t.ex. råka skriva sönder stacken eller annat som gör att MCU:n startar om sig eller beter sig oväntat.