Behöver lite hjälp med Arduino kod! (Löst!)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Behöver lite hjälp med Arduino kod! (Löst!)

Inlägg av Electricguy »

Jag har kört fast lite..
Det här är ett program som man via UARTen skickar en siffra som stämmer överens med ett portnummer. skicka en gång för att dra pinnen hög, skicka en gång till för att dra den låg.

Det jag behöver hjälp med är att med ett kommando via UARTen dra alla pinnar låga. Som en mass reset liksom.

Kod: Markera allt

char c;
 
void setup(){
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(11,OUTPUT);
   
    Serial.begin(9600);
}
 
void loop()
{
    if (Serial.available()>0)
    {
        c = Serial.read() - '0';
        Serial.flush();
        digitalWrite(c,!digitalRead(c));
   
}
}
Senast redigerad av Electricguy 26 april 2013, 14:20:29, redigerad totalt 3 gånger.
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Behöver lite hjälp med Arduino kod!

Inlägg av TobiasEinarsson »

Något liknande detta borde fungera (om c är 12, sätt alla pinnarna till LOW):

Kod: Markera allt

char c;

void setup(){
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(11,OUTPUT);
   
    Serial.begin(9600);
}

void loop()
{
    if (Serial.available()>0)
    {
        c = Serial.read() - '0';
        Serial.flush();
        if (c == 12)
        {
            for(int p = 2; p <= 11; p++)
            {
                digitalWrite(p, LOW);
            }
        }
        else
        {
            digitalWrite(c,!digitalRead(c));    
        }
    }
}
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Behöver lite hjälp med Arduino kod!

Inlägg av Electricguy »

Hmm, så du tänker att om man skickar 12 från terminalen så ska alla pinnarna dras låga?
Det verkar dock inte fungera. Får den ignorerar bara ettan, hoppar rakt till tvåan och togglar pinne 2.

EDIT: Jag bytte 12 till 1. Det funkar klockrent. Tack så hemskt mycket för hjälpen! :)
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Behöver lite hjälp med Arduino kod!

Inlägg av TobiasEinarsson »

Aha, ok. :)
Jag förutsatte att den kunde ta emot 12, i och med att din kod hanterar pinne 2 - 11.
Men då går det inte att styra pinne 11 heller?
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Behöver lite hjälp med Arduino kod!

Inlägg av Electricguy »

Nej jag insåg just det att programmet bara klarar enkla siffror. Blir det mer än en så ignorerar den de siffror som inte passar in, och triggar bara på dom som den "känner igen"
Så man kan skriva in 58236523665438276453768538742651
så kommer den att dra pinnarna höga och låga, enligt nummerföljden, och sedan avsluta med att dra dom låga.
Användarvisningsbild
JimmyAndersson
Inlägg: 26600
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: Behöver lite hjälp med Arduino kod! (LÖST!)

Inlägg av JimmyAndersson »

"programmet bara klarar enkla siffror."

Vet inte om det är orsaken i det här fallet,
men decimala och hexadecimala talsystemet är ju bara lika när det gäller 0 - 9.
T.ex hex 3 = dec 3. hex 12 = dec 18.

(Själva UART-porten bryr sig inte, det är bara ettor och nollor
men man får t.ex kolla om terminalprogrammet "översätter" mellan det man skriver och det som skickas.)
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Behöver lite hjälp med Arduino kod! (LÖST!)

Inlägg av Wedge »

Terminalen skickar ASCII, och programmet subtraherar ASCII-koden för "0".
Inga konstigheter för teckenen "0" till "9", de ger då talen 0-9.
Och för talet 10 blir det tecknet ":", 11 är ";" och 12 är "<".
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Behöver lite hjälp med Arduino kod! (LÖST!)

Inlägg av Electricguy »

Åhåå! Det är DÄR problemet ligger! Tackar för förklaringen.
Användarvisningsbild
rjl11
Inlägg: 371
Blev medlem: 1 november 2010, 18:25:27
Ort: Herrljunga

Re: Behöver lite hjälp med Arduino kod! (LÖST!)

Inlägg av rjl11 »

Du kan testa att använda Serial.parseInt
Här är ett exempel jag använder i autostyrnings projektet.

Kod: Markera allt

void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(50); // Hur länge Serial.parseInt skall vänta på giltig integer
}

void loop()
{ 
  if (Serial.available()) // kolla om det finns något inkommande
  {
    buff = Serial.parseInt(); // om sant läs
    Serial.flush(); // Töm buffer.
    
    if (buff == 300)
    {
      withResponde();
    }
    
    else if (buff == 400)
    {
      SetAResponde();
    }
    
    else if (buff == 500)
    {
      SetBResponde();
    }
    
    else if (buff > 0 && buff < 200) // Om parseInt returnerar ett värde större än noll och mindre än 200 (styrvinkel)
    {
      if (buff != ska)
      {
        statusBlink();
      }
      ska = buff; // Nytt ska värde från serie port
    }
  }
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Behöver lite hjälp med Arduino kod! (LÖST!)

Inlägg av sodjan »

Se: http://www.asciitable.com/

Du kan välja att lägga "nollan" var du vill i ASCII tabellen.
Om du t.ex väljer 'A' som "noll", så får du 0-27 med 'A' - 'Z'.

Alltså c = Serial.read() - 'A'; (istället för - '0';).
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Behöver lite hjälp med Arduino kod! (LÖST!)

Inlägg av Electricguy »

Oooh! Tack så mycket Sodjan!
Det funkar jättebra.
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Behöver lite hjälp med Arduino kod! (LÖST!)

Inlägg av Electricguy »

Hmm. problem igen..
reset funktionen fungerar inte när man gör så som Sodjan föreslog. Ska man skicka något annat än "1"? Jag får inte direkt någon rätsida på det. Det skulle också vara guld att fortsätta med bostäver, istället med siffror.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Behöver lite hjälp med Arduino kod! (Problem!)

Inlägg av sodjan »

> reset funktionen fungerar inte

Vad betyder "fungerar inte" i klartext?

> ...när man gör så som Sodjan föreslog.

Jag vet inget om någon reset-funktion...
Användarvisningsbild
Electricguy
Inlägg: 12490
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Behöver lite hjälp med Arduino kod! (Problem!)

Inlägg av Electricguy »

Jo, att innan så skickade jag "1" från terminalen för att dra alla utgångar låga.
Då hade jag c = Serial.read() - '0';

Dock, med c = Serial.read() - 'A';
så händer inget när jag skickar "1"
Jag har testat med diverse olika bokstäver och tecken, men jag får ingen rätsida på det.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Behöver lite hjälp med Arduino kod! (Problem!)

Inlägg av Wedge »

Resetfunktionen borde aktiveras av bokstaven "M" när koden i inlägg 2 kombinerats med sodjans förslag. A=0, B=1, ..., M=12. Funkar inte det?
Skriv svar