Sida 1 av 2
Behöver lite hjälp med Arduino kod! (Löst!)
Postat: 15 april 2013, 14:58:58
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));
}
}
Re: Behöver lite hjälp med Arduino kod!
Postat: 15 april 2013, 15:07:40
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));
}
}
}
Re: Behöver lite hjälp med Arduino kod!
Postat: 15 april 2013, 15:24:07
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!

Re: Behöver lite hjälp med Arduino kod!
Postat: 15 april 2013, 15:33:56
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?
Re: Behöver lite hjälp med Arduino kod!
Postat: 15 april 2013, 15:37:05
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.
Re: Behöver lite hjälp med Arduino kod! (LÖST!)
Postat: 15 april 2013, 15:59:10
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.)
Re: Behöver lite hjälp med Arduino kod! (LÖST!)
Postat: 15 april 2013, 16:10:24
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 "<".
Re: Behöver lite hjälp med Arduino kod! (LÖST!)
Postat: 15 april 2013, 17:11:45
av Electricguy
Åhåå! Det är DÄR problemet ligger! Tackar för förklaringen.
Re: Behöver lite hjälp med Arduino kod! (LÖST!)
Postat: 15 april 2013, 17:20:25
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
}
}
Re: Behöver lite hjälp med Arduino kod! (LÖST!)
Postat: 15 april 2013, 18:50:48
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';).
Re: Behöver lite hjälp med Arduino kod! (LÖST!)
Postat: 15 april 2013, 22:12:42
av Electricguy
Oooh! Tack så mycket Sodjan!
Det funkar jättebra.
Re: Behöver lite hjälp med Arduino kod! (LÖST!)
Postat: 26 april 2013, 13:45:58
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.
Re: Behöver lite hjälp med Arduino kod! (Problem!)
Postat: 26 april 2013, 14:01:28
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...
Re: Behöver lite hjälp med Arduino kod! (Problem!)
Postat: 26 april 2013, 14:06:27
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.
Re: Behöver lite hjälp med Arduino kod! (Problem!)
Postat: 26 april 2013, 14:12:45
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?