Arduino programmeringshjälp
Re: Arduino programmeringshjälp
> Att skriva if(xxx == 1) betyder att om xxx är 2 är den inte uppfyllt, alltså är det mycket dålig praxis!
Om det nu inte är just det man vill !
Man kan inte säga att det (alltid) är en dålig praxis.
> Vart är det fel i koden nedan?
Inget alls, men vad vill du att den *ska* göra ?
Om det nu inte är just det man vill !
Man kan inte säga att det (alltid) är en dålig praxis.
> Vart är det fel i koden nedan?
Inget alls, men vad vill du att den *ska* göra ?
Re: Arduino programmeringshjälp
Det var inget fel där, upptäckte det precis, var "fel" på counter som inte går från -255 till 255 som jag trodde.
Jag som mindes fel altså så jag får väl ersätta koden med
eftersom jag just här bara vill få ut +1 , 0 eller minus 1.
/Magnus
Jag som mindes fel altså så jag får väl ersätta koden med
Kod: Markera allt
if (counter < 200){
counter = -1;
}
och
if (counter > 0){
counter = 1;
}
/Magnus
Re: Arduino programmeringshjälp
> counter som inte går från -255 till 255 som jag trodde.
Vilka gränser har "counter" då ??
> jag som mindes fel altså så jag får väl ersätta koden med...
"Väl"?
Fungerar det eller fungerar det inte ?
Beroende på svaret på första frågan så kanske koden inte fungerar...
Vilka gränser har "counter" då ??
> jag som mindes fel altså så jag får väl ersätta koden med...
"Väl"?
Fungerar det eller fungerar det inte ?
Beroende på svaret på första frågan så kanske koden inte fungerar...
Re: Arduino programmeringshjälp
Tycker fortfarande koden ser skum ut i förhållande till det du beskriver.
Du lär ju inte få noll exempelvis i med den koden.
Utan att förstå vad du försöker göra så tror jag du skall titta på kommandona "map" och "constraint".
Du lär ju inte få noll exempelvis i med den koden.
Utan att förstå vad du försöker göra så tror jag du skall titta på kommandona "map" och "constraint".
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Arduino programmeringshjälp
Nä, det är precis så som Icecap säger, C-standarden definierar false som 0 och det logiska testen på om något är true som != 0, så man kan testa boolean, byte, int m.m.Bosen skrev:För att if(ButtonState) skall funka så måste ButonState vara satt till datatypen boolean.
I detta fallet, när man skall läsa av sant eller falskt så är boolean helt rätt.
Läs mera här: http://arduino.cc/en/Reference/BooleanVariables
EDIT:
Icecap kan faktiskt ha rätt i att 0 alltid är falskt, jag har aldrig tänkt så långt....
Re: Arduino programmeringshjälp
> > counter som inte går från -255 till 255 som jag trodde.
Alltså, det logiska är att den antingen har intervallet -127 till +127 *eller* 0 till +255
beroende på om den är "signed" eller "unsigned". Förutsatt alltså att den är en
8-bitars variabel och att det är någotlunda normal hantering i Arduino.
Eftersom du sedan vill göra "counter = -1;" så *måste* den vara "signed" och
alltså ha intervallet -127 till +127, men då blir testen "if (counter < 200)"
helt meningslös eftersom counter *alltid* kommer att vara mindre än 200...
Du får nog tänka till en gång till...
Alltså, det logiska är att den antingen har intervallet -127 till +127 *eller* 0 till +255
beroende på om den är "signed" eller "unsigned". Förutsatt alltså att den är en
8-bitars variabel och att det är någotlunda normal hantering i Arduino.
Eftersom du sedan vill göra "counter = -1;" så *måste* den vara "signed" och
alltså ha intervallet -127 till +127, men då blir testen "if (counter < 200)"
helt meningslös eftersom counter *alltid* kommer att vara mindre än 200...
Du får nog tänka till en gång till...
Re: Arduino programmeringshjälp
ToPNoTCH skrev:Tycker fortfarande koden ser skum ut i förhållande till det du beskriver.
Du lär ju inte få noll exempelvis i med den koden.
Utan att förstå vad du försöker göra så tror jag du skall titta på kommandona "map" och "constraint".
OK, men det beror säkert på att det längre ned i koden finns en rad som säger "counter = 0;
map och constraint ser riktigt trevligt ut och om jag orkar ska jag skriva om stora delar av min kod så jag slipper kod som denna:
Kod: Markera allt
//encoder räknaren omvandlas till menuval när msn är i menu 1-99
if (menustate >= 1 && menustate <= 99) {
if (counter < 1){
counter = 20;
}
if ((counter >=1) && (counter <=5)){
menuval = 1;
}
if ((counter >=6) && (counter <=10)){
menuval = 2;
}
if ((counter >=11) && (counter <=15)){
menuval = 3;
}
if ((counter >=16) && (counter <=20)){
menuval = 4;
}
if (counter > 20){
counter = 1;
}
/Magnus
Re: Arduino programmeringshjälp
hmm, ja då kommer det inte fungera...sodjan skrev:> > counter som inte går från -255 till 255 som jag trodde.
Alltså, det logiska är att den antingen har intervallet -127 till +127 *eller* 0 till +255
beroende på om den är "signed" eller "unsigned". Förutsatt alltså att den är en
8-bitars variabel och att det är någotlunda normal hantering i Arduino.
Eftersom du sedan vill göra "counter = -1;" så *måste* den vara "signed" och
alltså ha intervallet -127 till +127, men då blir testen "if (counter < 200)"
helt meningslös eftersom counter *alltid* kommer att vara mindre än 200...
Du får nog tänka till en gång till...
måste nog fundera lite på hur jag ska få ihop detta.
Tack för den utförliga informationen.
Re: Arduino programmeringshjälp
En lösning är att låta counter vara på 16 bit helt enkelt. Då kan den gå mellan +32767 och -32768.
Re: Arduino programmeringshjälp
Jag löste det genom koden nedan och temp_counter är int
Tack för all hjälp med detta, tyvärr har jag nu inte hunnit prova koden för knapptryckningen...
det ska jag försöka få tid till ikväll.
/Magnus
Kod: Markera allt
if (counter > 200){
temp_counter = -1;
counter = 0;
}
if (counter > 0){
temp_counter = 1;
counter = 0;
}
det ska jag försöka få tid till ikväll.
/Magnus
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Arduino programmeringshjälp
Om du delar två heltal i C får du bara tillbaka heltalsdelen, tex 4/5 blir 0, så du kan skriva om ovanstående somlillmange skrev:if ((counter >=1) && (counter <=5)){
menuval = 1;
}
if ((counter >=6) && (counter <=10)){
menuval = 2;
}
if ((counter >=11) && (counter <=15)){
menuval = 3;
}
if ((counter >=16) && (counter <=20)){
menuval = 4;
}
menuval = (counter + 4)/5;
Re: Arduino programmeringshjälp
Och lite allmänt: en BOOL variabel är en helt vanlig int som kompilern bara märker under kompileringen som att det bara får tilldelas sant eller falsk till den, inget annat. Det är inget speciellt register eller minnesstorlek, det är bara en int.
Och med int menas den definitionen som anges i C: den variabelstorlek som CPU'n "naturlig" läser/skriver i en operation.
Och med int menas den definitionen som anges i C: den variabelstorlek som CPU'n "naturlig" läser/skriver i en operation.
Re: Arduino programmeringshjälp
Vart i koden gör jag detta?Krille Krokodil skrev:Om du delar två heltal i C får du bara tillbaka heltalsdelen, tex 4/5 blir 0, så du kan skriva om ovanstående somlillmange skrev:if ((counter >=1) && (counter <=5)){
menuval = 1;
}
if ((counter >=6) && (counter <=10)){
menuval = 2;
}
if ((counter >=11) && (counter <=15)){
menuval = 3;
}
if ((counter >=16) && (counter <=20)){
menuval = 4;
}
menuval = (counter + 4)/5;
/Magnus
- Krille Krokodil
- Inlägg: 4062
- Blev medlem: 9 december 2005, 22:33:11
- Ort: Helsingborg
Re: Arduino programmeringshjälp
Hela denna kan du skriva som:lillmange skrev:Kod: Markera allt
//encoder räknaren omvandlas till menuval när msn är i menu 1-99 if (menustate >= 1 && menustate <= 99) { if (counter < 1){ counter = 20; } if ((counter >=1) && (counter <=5)){ menuval = 1; } if ((counter >=6) && (counter <=10)){ menuval = 2; } if ((counter >=11) && (counter <=15)){ menuval = 3; } if ((counter >=16) && (counter <=20)){ menuval = 4; } if (counter > 20){ counter = 1; }
Kod: Markera allt
if (menustate >= 1 && menustate <= 99) {
if (counter < 1){
counter = 20;
menuval = 4;
}
else if (counter > 20){
counter = 1;
}
else {
menuval = (counter + 4)/5;
}
}
Re: Arduino programmeringshjälp
> Vart i koden gör jag detta?
Krille sa inte att du gör det i koden, Krille sa att du ska/bör göra det i koden...
Krille sa inte att du gör det i koden, Krille sa att du ska/bör göra det i koden...