Arduino B=A-1 ?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11144
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Arduino B=A-1 ?

Inlägg av GeekJoan »

Varför funkar inte detta?

for (int A=0; A<=7; A++)
{
for (int B=A-1);

Tycker att den borde fatta att jag vill att B ska vara samma som A fast ett mindre. ?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino B=A-1 ?

Inlägg av sodjan »

Den andra "for()", vad är den tänkt att göra?
Hur ser hela/båda for-looparna ut?

Sen så, även om deklarering ("int") kanske även är tillåtet
i själva for-syntaxen, varför inte göra det i förväg?
kodar-holger
EF Sponsor
Inlägg: 970
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Arduino B=A-1 ?

Inlägg av kodar-holger »

Du får nog förklara lite mer vad du gör. Koden du visar säger ingenting. Det finns inga garantier för att B skall ha något värde efter for-satsen så vitt jag vet. Egentligen borde väl B helt gå ur scope så att du inte kommer åt den alls.

Alltså:

Kod: Markera allt

for (int A=0; A<=7; A++)
{
for (int B=A-1)
{
//Här borde B vara A-1
}
//Men här finns inga garantier.
}
En bra kompilator kommer nog dessutom att ta bort allt ihop eftersom du inte gör något.

Det är inte så att du missat att du har ett ; på samma rad som for (B...
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Arduino B=A-1 ?

Inlägg av Andax »

Ska du verkligen ha med for i huvudtaget för B. Räcker inte bara:
int B = A-1;
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11144
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino B=A-1 ?

Inlägg av GeekJoan »

OK. Jag håller på att modifiera en annan kod som jag gjorde tidigare idag.

Kod: Markera allt

void loop()
{
  for (int A=0; A<=7; A++)
    {
    lc.setLed(0,A,A,true); // Tänker LED 
    delay(50);
    }
  for (int B=7; B>=0; B--)
    {
    lc.setLed(0,B,B,false); // Släcker LED 
    delay(50);
    }  
}
Den ritar ut en sträck \ på en 8x8 ledmatris.

Nu ville jag använda "samma" kod för att göra "samma" sträck, men bara en punkt som åker. Därav ville jag ha en ny for loop som släcker föregående prick som den nyss var på.

Jag kom på en annan lösning som funkar:

Nu deklarerade jag A och B tidigare.

Kod: Markera allt

void loop()
{
  for (A=0; A<=7; A++)
    {
    lc.setLed(0,B,0,false);
    lc.setLed(0,A,0,true);
    B=A;
    delay(40);
    }
}
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11144
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino B=A-1 ?

Inlägg av GeekJoan »

Andax skrev:Ska du verkligen ha med for i huvudtaget för B. Räcker inte bara:
int B = A-1;
Om jag gör så först i programmet kommer B då alltid vara en mindre än A oavsett vad jag gör senare? Förutsatt att jag inte säger att B=xxx.
gkar
Inlägg: 1585
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

Re: Arduino B=A-1 ?

Inlägg av gkar »

Nej!
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11144
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino B=A-1 ?

Inlägg av GeekJoan »

Its alive.
led_matrix.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
B1n4ry
EF Sponsor
Inlägg: 1327
Blev medlem: 30 november 2005, 20:02:50
Ort: Borås
Kontakt:

Re: Arduino B=A-1 ?

Inlägg av B1n4ry »

Är det detta du försöker göra?

Kod: Markera allt

void loop()
{
  int B;
  for (A=0; A<=7; A++)
    {
    B=A-1;
    lc.setLed(0,B,0,false);
    lc.setLed(0,A,0,true);
    delay(40);
    }
}
I ditt första försök är ju den andra for-loopen väldigt suspekt!?


Man skulle ju oxå kunna tänka sig följande:

Kod: Markera allt

void loop()
{
  for (A=0; A<=7; A++)
    {
    lc.setLed(0,A-1,0,false);
    lc.setLed(0,A,0,true);
    delay(40);
    }
}

//B1N4RY
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11144
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino B=A-1 ?

Inlägg av GeekJoan »

Om jag bara kunde klura ut hur man delar en video från G+ hit så skulle jag kunna visa.
ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

Re: Arduino B=A-1 ?

Inlägg av ronnylov »

Kan man inte släcka hela raden precis innan man tänder nästa punkt?
Det gör väl inget om man "släcker" de som redan är släckta om man bara vill ha en lysande punkt som flyttar sig.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Arduino B=A-1 ?

Inlägg av bos »

B1n4ry skrev:

Kod: Markera allt


  for (A=0; A<=7; A++)
    ...
    B=A-1;
Det där ger ett negativt B på första körningen, så det är ingen bra lösning. I hans for-loop i början på tråden (den där B-for inte är nästlad i en A-for) finns villkoret B=7; B=>0; B--. B ska med andra ord aldrig gå under noll.
Nerre
Inlägg: 27192
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Arduino B=A-1 ?

Inlägg av Nerre »

Är inte det där ett typiskt exempel på en lösning där man inte kan göra allt inuti loopen utan måste göra "setup" och "finish" utanför?

D.v.s. nåt i stil med (pseudokod):

Kod: Markera allt

Tänd Punkt(Start)
For pos=Start to End-1
   Släck Punkt(pos)
   Tänd Punkt(pos+1)
Next pos
Släck Punkt(End)
Det går kanske att lösa snyggare om man skippar for-loop och gör det med en do-while istället, då kan man göra uppräkningen av index mitt i loopen istället för i början eller slutet.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11144
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino B=A-1 ?

Inlägg av GeekJoan »

Det finns alltid många sätt att lösa det på.
Har för mig att jag löste det så här:

Kod: Markera allt

 
for (A=0; A<=7; A++)
    {
    lc.setLed(0,B,0,false);
    lc.setLed(0,A,0,true);
    B=A;
    }
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino B=A-1 ?

Inlägg av sodjan »

Vad har B för värde före loopen?
Om det är odefinierat så kanske B ska initieras?
Men å andra sidan, vad pekar B på då A=0?
Skriv svar