Arduino: En korkad fråga från en nybörjare [Löst]

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Arduino: En korkad fråga från en nybörjare [Löst]

Inlägg av RadioDJ »

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.
Senast redigerad av RadioDJ 8 september 2013, 20:14:32, redigerad totalt 1 gång.
Användarvisningsbild
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

Inlägg av Klas-Kenny »

Exakt hur har du kopplat?
(Hur sätter du adressen, vad använder du för ingångar etc)

Kod?
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av RadioDJ »

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.
Användarvisningsbild
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

Inlägg av Klas-Kenny »

Rutinen för att läsa in pinnarna borde inte behöva vara svårare än typ

Kod: Markera allt

char Adress = 0;
for (int pin = 4; pin<=6; pin++) {
	if(digitalRead(pin))
		Adress++;
	Adress << 1;
}
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.
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av RadioDJ »

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?
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av Bosen »

Var snäll och posta din kod som du har just nu, så kan vi kolla om du har missat något...
Användarvisningsbild
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

Inlägg av Klas-Kenny »

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?
Du tänker nog inte på raden "Adress << 1"
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.. :P

Kod: Markera allt

int Adress = 0;
for (int pin = 4; pin<=6; pin++) {
	Adress << 1;
	if(digitalRead(pin))
		Adress++;
}
Blir nog bättre.
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av RadioDJ »

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?
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av RadioDJ »

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av sodjan »

> 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.
Användarvisningsbild
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

Inlägg av Klas-Kenny »

Jag insåg felet, syntax error i min hjärna. :D

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;
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av RadioDJ »

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.
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av Bosen »

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.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av vfr »

Håller helt med Bosen.
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Arduino: En korkad fråga från en nybörjare

Inlägg av Icecap »

Intressant attityd som TS utvisar - och inte på ett positivt sätt.
Skriv svar