Arduino: En korkad fråga från en nybörjare [Löst]
Arduino: En korkad fråga från en nybörjare [Löst]
Jag är alldeles ny på Arduino och försöker nu på bästa förmåga förstå mig på språket.
Just nu går det inte så bra.
Kan någon hjälpa mig på traven?
Mitt problem är:
Jag vill använda 3 stycken ben för att ställa in en adress som ska användas senare.
Adressen kan läsas in vid uppstart.
Dessa 3 pinnar ska bli adressen A-G (7 st).
Jag har gjort en del prov men när jag sätter pinnarna innan uppstart och sedan startar Arduinon så hänger sig serieporten.
Programmet som jag provar i fungerar till 100% om jag inte provar att sätta någon adress.
Finns det någon som kan göra ett exampel till mig?
Det kommer säkert fler frågor senare, men jag måste börja någonstans, även om mina problem är små just nu.
Just nu går det inte så bra.
Kan någon hjälpa mig på traven?
Mitt problem är:
Jag vill använda 3 stycken ben för att ställa in en adress som ska användas senare.
Adressen kan läsas in vid uppstart.
Dessa 3 pinnar ska bli adressen A-G (7 st).
Jag har gjort en del prov men när jag sätter pinnarna innan uppstart och sedan startar Arduinon så hänger sig serieporten.
Programmet som jag provar i fungerar till 100% om jag inte provar att sätta någon adress.
Finns det någon som kan göra ett exampel till mig?
Det kommer säkert fler frågor senare, men jag måste börja någonstans, även om mina problem är små just nu.
Senast redigerad av RadioDJ 8 september 2013, 20:14:32, redigerad totalt 1 gång.
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Arduino: En korkad fråga från en nybörjare
Exakt hur har du kopplat?
(Hur sätter du adressen, vad använder du för ingångar etc)
Kod?
(Hur sätter du adressen, vad använder du för ingångar etc)
Kod?
Re: Arduino: En korkad fråga från en nybörjare
Okej, lite otydlig kanske.
Säg att vi använder Digitalingång 4, 5 och 6.
Dessa kopplas via en hexomkopplare till jord.
Okej jag får 16 val, men jag använder bara 7.
Kod?
Deklarationen av inpinnar samt sätta pullup har jag kläm på.
Jag hade tänkt läser in värdena i void setup.
Jag vet att de sedan ska läsas in med digitalRead.
Mina tre ingångar ska sedan sätta en variabel med A-G beroende på hur ingångarna är jordade.
Problemet jag tror jag har är inläsningen av pinnarna samt översättningen till A-G oc att sätta min variabel.
Säg att vi använder Digitalingång 4, 5 och 6.
Dessa kopplas via en hexomkopplare till jord.
Okej jag får 16 val, men jag använder bara 7.
Kod?
Deklarationen av inpinnar samt sätta pullup har jag kläm på.
Jag hade tänkt läser in värdena i void setup.
Jag vet att de sedan ska läsas in med digitalRead.
Mina tre ingångar ska sedan sätta en variabel med A-G beroende på hur ingångarna är jordade.
Problemet jag tror jag har är inläsningen av pinnarna samt översättningen till A-G oc att sätta min variabel.
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Arduino: En korkad fråga från en nybörjare
Rutinen för att läsa in pinnarna borde inte behöva vara svårare än typ
Sen att konvertera till A-G görs väl enklast genom att kort och gott addera 65 till adressen, så får du dem i ASCII-format.
Kod: Markera allt
char Adress = 0;
for (int pin = 4; pin<=6; pin++) {
if(digitalRead(pin))
Adress++;
Adress << 1;
}
Re: Arduino: En korkad fråga från en nybörjare
Kommer inte Adress till att innehåll 0-3?
Man har ju ingen koll på om det är ingång 1 och 2 som är aktiv eller om det är 2 och 3.
Eller tänker jag fel?
Man har ju ingen koll på om det är ingång 1 och 2 som är aktiv eller om det är 2 och 3.
Eller tänker jag fel?
Re: Arduino: En korkad fråga från en nybörjare
Var snäll och posta din kod som du har just nu, så kan vi kolla om du har missat något...
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Arduino: En korkad fråga från en nybörjare
Du tänker nog inte på raden "Adress << 1"RadioDJ skrev:Kommer inte Adress till att innehåll 0-3?
Man har ju ingen koll på om det är ingång 1 och 2 som är aktiv eller om det är 2 och 3.
Eller tänker jag fel?
Det den gör är att den skiftar byten ett steg åt vänster.
Tänk dig att du ger in 101 (5, F)
Då läser först 1 och lägger till 1 i resultatet
00000001
Sedan skiftar vänster
00000010
Sen läser den in 0 och lägger alltså inte till något i resultatet, men skiftar ett steg till åt vänster
00000100
Och sedan läser den in 1 igen,
00000101
...och här inser jag att jag gjort en miss, för här skiftar den ju iväg igen..

Kod: Markera allt
int Adress = 0;
for (int pin = 4; pin<=6; pin++) {
Adress << 1;
if(digitalRead(pin))
Adress++;
}
Re: Arduino: En korkad fråga från en nybörjare
Du har säkert rätt.
Nu kan alla se att jag är en riktig nybörjare på detta.
Jag ska prova koden och se vad som händer.
Blir Adress-svaret i dec eller hex eller bin?
Nu kan alla se att jag är en riktig nybörjare på detta.
Jag ska prova koden och se vad som händer.
Blir Adress-svaret i dec eller hex eller bin?
Re: Arduino: En korkad fråga från en nybörjare
Jag lägger nu upp den kod som jag har gjort så här långt.
Finns dock ett fel som jag redan hittat som inte är löst än som jag vet.
I min switch-sats så, om jag inte sätter någon ingång så kommer den att skicka "x" precis som jag sagt med sedan oavsett vilken ingång jag sätter så skickar den alltid "A".
Vad har jag gjort för fel?
Koden:
int adressPins[3] = {6, 7, 8};
void setup()
{
/* Setup Input Pins */
for (int n = 0; n <= 2; n++) {
pinMode(adressPins[n], INPUT);
digitalWrite(adressPins[n], HIGH);
}
//*Detta användes senare
Serial.begin(9600);
SerialInputString.reserve(200);
*//
delay(100);
// ladda adressen
int Adress = 0;
for (int pin = 0; pin <= 2; pin++) {
Adress << 1;
if(digitalRead(adressPins[pin]) == LOW)
Adress++;
}
switch (Adress) {
case 0:
aID = 'x';
break;
case 1:
aID = 'A';
break;
case 2:
aID = 'B';
break;
case 3:
aID = 'C';
break;
case 4:
aID = 'D';
break;
case 5:
aID = 'E';
break;
case 6:
aID = 'F';
break;
case 7:
aID = 'G';
break;
}
Jag tror det var allt så långt.
Finns dock ett fel som jag redan hittat som inte är löst än som jag vet.
I min switch-sats så, om jag inte sätter någon ingång så kommer den att skicka "x" precis som jag sagt med sedan oavsett vilken ingång jag sätter så skickar den alltid "A".
Vad har jag gjort för fel?
Koden:
int adressPins[3] = {6, 7, 8};
void setup()
{
/* Setup Input Pins */
for (int n = 0; n <= 2; n++) {
pinMode(adressPins[n], INPUT);
digitalWrite(adressPins[n], HIGH);
}
//*Detta användes senare
Serial.begin(9600);
SerialInputString.reserve(200);
*//
delay(100);
// ladda adressen
int Adress = 0;
for (int pin = 0; pin <= 2; pin++) {
Adress << 1;
if(digitalRead(adressPins[pin]) == LOW)
Adress++;
}
switch (Adress) {
case 0:
aID = 'x';
break;
case 1:
aID = 'A';
break;
case 2:
aID = 'B';
break;
case 3:
aID = 'C';
break;
case 4:
aID = 'D';
break;
case 5:
aID = 'E';
break;
case 6:
aID = 'F';
break;
case 7:
aID = 'G';
break;
}
Jag tror det var allt så långt.
Re: Arduino: En korkad fråga från en nybörjare
> Säg att vi använder Digitalingång 4, 5 och 6.
Inga antaganden! Vilka använder du ??
> int adressPins[3] = {6, 7, 8};
Var det inte 4, 5 och 6 !?
> Kod?
Ja, hur ser den ut ?
Inga försök till egna beskrivningar eller gissningar
kring vad du tror att du har gjort.
> Blir Adress-svaret i dec eller hex eller bin ?
Irrelevant fråga. Det blir alla.
Det beror bara på hur du läser/tolkar det.
> Koden:
Använd gärna kod-taggarna så blir det lättare att läsa.
> Vad har jag gjort för fel?
Vad har du gjort för att felsöka?
Kan du läsa alla 3 adresspinnarna direkt/separat?
Får du rätt värde när du läser pinnarna direkt/separat?
Du måste ju ta reda på om du alls har rätt nivå på pinnarna
eller om det är din kod som inte läser korrekt. Jag antar att du
har kollat så att pinnarna inte delar funktion med något annat.
Inga antaganden! Vilka använder du ??
> int adressPins[3] = {6, 7, 8};
Var det inte 4, 5 och 6 !?
> Kod?
Ja, hur ser den ut ?
Inga försök till egna beskrivningar eller gissningar
kring vad du tror att du har gjort.
> Blir Adress-svaret i dec eller hex eller bin ?
Irrelevant fråga. Det blir alla.
Det beror bara på hur du läser/tolkar det.
> Koden:
Använd gärna kod-taggarna så blir det lättare att läsa.
> Vad har jag gjort för fel?
Vad har du gjort för att felsöka?
Kan du läsa alla 3 adresspinnarna direkt/separat?
Får du rätt värde när du läser pinnarna direkt/separat?
Du måste ju ta reda på om du alls har rätt nivå på pinnarna
eller om det är din kod som inte läser korrekt. Jag antar att du
har kollat så att pinnarna inte delar funktion med något annat.
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Arduino: En korkad fråga från en nybörjare
Jag insåg felet, syntax error i min hjärna. 
Från min kodsnutt, ändra Adress << 1; till Adress = Adress << 1; så kommer det att fungera.
Edit: För övrigt, en snabbare variant istället för din switch-sats:

Från min kodsnutt, ändra Adress << 1; till Adress = Adress << 1; så kommer det att fungera.
Edit: För övrigt, en snabbare variant istället för din switch-sats:
Kod: Markera allt
if(Adress == 0)
aID = 'x';
else
aID = Adress + 64;
Re: Arduino: En korkad fråga från en nybörjare
Klas-Kenny:
Tack för hjälpen. Med vissa små ändringar fick jag det att fungera.
sodjan:
Dina kommentarer kommer jag inte ens att kommentera.
Tack för hjälpen. Med vissa små ändringar fick jag det att fungera.
sodjan:
Dina kommentarer kommer jag inte ens att kommentera.
Re: Arduino: En korkad fråga från en nybörjare
Du behöver inte kommentera Sodjan's kommentarer, men ta till dig dom. Speciellt code-taggarna.
Nu verkar klas-kenny ha förstått vad du frågade om, men det förstod inte jag... om man är duktigare på att skriva sin fråga så är det lättare att få svar.
Nu verkar klas-kenny ha förstått vad du frågade om, men det förstod inte jag... om man är duktigare på att skriva sin fråga så är det lättare att få svar.
Re: Arduino: En korkad fråga från en nybörjare
Intressant attityd som TS utvisar - och inte på ett positivt sätt.