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.
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!
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.
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.)
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 "<".
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
}
}
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.
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.