Sida 2 av 6

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 22:45:32
av ochkl0620
Det sa mig inget ;)
Lade delay 20 på slutet, det vart bättre

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:00:06
av Klas-Kenny
Du har lagt lite lustiga måsvingar hit och dit. :)

Följer man den första if-satsen så börjar det bra, men sedan så avslutar du den med en { :humm:
Borde väl vara } där, just för att avsluta if-satsen och inte öppna ett nytt block. Just nu så ligger liksom resten utav koden inom den första if-satsen.

Sen så ser den andra if-satsen bra ut.

Sen före den sista if-satsen, så har du en ny { :humm: Det enda den gör där är att öppna ett nytt block, vilket det inte finns någon anledning till där. Dock påverkar det inte precis funktionen något som den ligger, men den är fullkomligt verkningslös.

Sen så gissar jag på att du fyllt på med } i slutet tills kompilatorn blivit nöjd? :D
Ta bort/ändra de två jag nämnde, så kan du ta bort två av dem på slutet.

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:07:23
av ochkl0620
Hmm, ja jag vet ifan vad jag gör :P
Jag ändrade lite och då vägrar den kompilera :humm:
Om det inte är någon större ansträngning så får du väldigt gärna rätta till det :) Jag börjar dö litegranna nu :P

Kod: Markera allt

int inPin0 = 2;        
int inPin1 = 3;  
int inPin2 = 4;  
 
int outPin0 = 5;      
int outPin1 = 6;    
int outPin2 = 7;    
 
int state0 = HIGH;
int reading0;  
int previous0 = LOW;
 
int state1 = HIGH;
int reading1;  
int previous1 = LOW;
 
int state2 = HIGH;
int reading2;  
int previous2 = LOW;
 
long time = 0;         
long debounce = 200;   
 
void setup()
{
  pinMode(inPin0, INPUT);
  pinMode(inPin1, INPUT);
  pinMode(inPin2, INPUT);
 
  pinMode(outPin0, OUTPUT);
  pinMode(outPin1, OUTPUT);
  pinMode(outPin2, OUTPUT);
}
 
void loop()
{
  reading0 = digitalRead(inPin0);
  reading1 = digitalRead(inPin1);
  reading2 = digitalRead(inPin2);
 
 
  
  if (reading0 == HIGH && previous0 == LOW && millis() - time > debounce) {
    if (state0 == HIGH)
      state0 = LOW;
    else
      state0 = HIGH;
    }  
       if (reading1 == HIGH && previous1 == LOW && millis() - time > debounce) {
    if (state1 == HIGH)
      state1 = LOW;
    else
      state1 = HIGH;
       }
       
       if (reading2 == HIGH && previous2 == LOW && millis() - time > debounce) {
    if (state2 == HIGH)
      state2 = LOW;
    else
      state2 = HIGH;
 }
    time = millis();    
  }
 
  digitalWrite(outPin0, state0);
  digitalWrite(outPin1, state1);
  digitalWrite(outPin2, state2);
 
  delay(600);

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:13:34
av ochkl0620
För övrigt... nu efter lite tester osv så är allt pannkaka. När jag körde med bara en knapp o en led i taget så funkade det men nu när jag kopplat 3st så får den fnatt. knappen på pin 2 tänder alla led o håller man in den blir det disco jävlar i havet :P Jag dör lite mer .....

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:14:25
av Klas-Kenny
Det här borde kompilera i alla fall. Tog bort en } efter time = millis(); och lade till en allra sist.

Såg dock nu när jag kollade vad koden faktiskt gör att du har en liten miss, gällande just time, du kan ju klura lite på vad jag menar innan jag bjuder på svaret.. :P

Kod: Markera allt

int inPin0 = 2;        
int inPin1 = 3;  
int inPin2 = 4;  
 
int outPin0 = 5;      
int outPin1 = 6;    
int outPin2 = 7;    
 
int state0 = HIGH;
int reading0;  
int previous0 = LOW;
 
int state1 = HIGH;
int reading1;  
int previous1 = LOW;
 
int state2 = HIGH;
int reading2;  
int previous2 = LOW;
 
long time = 0;         
long debounce = 200;   
 
void setup()
{
  pinMode(inPin0, INPUT);
  pinMode(inPin1, INPUT);
  pinMode(inPin2, INPUT);
 
  pinMode(outPin0, OUTPUT);
  pinMode(outPin1, OUTPUT);
  pinMode(outPin2, OUTPUT);
}
 
void loop()
{
  reading0 = digitalRead(inPin0);
  reading1 = digitalRead(inPin1);
  reading2 = digitalRead(inPin2);
 
 
  
  if (reading0 == HIGH && previous0 == LOW && millis() - time > debounce) {
    if (state0 == HIGH)
      state0 = LOW;
    else
      state0 = HIGH;
    }  
       if (reading1 == HIGH && previous1 == LOW && millis() - time > debounce) {
    if (state1 == HIGH)
      state1 = LOW;
    else
      state1 = HIGH;
       }
       
       if (reading2 == HIGH && previous2 == LOW && millis() - time > debounce) {
    if (state2 == HIGH)
      state2 = LOW;
    else
      state2 = HIGH;
 }
    time = millis();    
 
 
  digitalWrite(outPin0, state0);
  digitalWrite(outPin1, state1);
  digitalWrite(outPin2, state2);
 
  delay(600);
}

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:24:52
av ochkl0620
Tack!
Nu ser det vettigare ut och funkar vettigare!
Hmm time....

Kod: Markera allt

long time = 0;        
long debounce = 200; 

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:26:10
av ochkl0620
Ska det vara såhär?

Kod: Markera allt

long time0 = 0;        
long debounce0 = 200;  

long time1 = 0;        
long debounce1 = 200;

long time2 = 0;        
long debounce2 = 200;
Edit. Nej då kompilerar den ju inte...

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:37:27
av Klas-Kenny
Nu är du på rätt spår!

Anledningen till att den inte kompilerar misstänker jag är för att du inte längre har en variabel som heter time, men du har kvar just den variabeln senare i koden.
Det du vill göra är att i varje if-sats, så sätter du motsvarande time-variabel (time0, time1 eller time2) till millis(). Och så tar du bort den nuvarande. :)

Edit; dock så behöver du inte ha tre olika debounce, eftersom att du aldrig ändrar på den och den kan få vara samma för alla.

Re: Lite Arduinobekymmer...

Postat: 17 maj 2014, 23:53:00
av ochkl0620
Naah, jag är lite trögfattad o nu har jag sabbat koden igen :P

Kod: Markera allt

int inPin0 = 2;        
int inPin1 = 3;  
int inPin2 = 4;  
 
int outPin0 = 5;      
int outPin1 = 6;    
int outPin2 = 7;    
 
int state0 = HIGH;
int reading0;  
int previous0 = LOW;
 
int state1 = HIGH;
int reading1;  
int previous1 = LOW;
 
int state2 = HIGH;
int reading2;  
int previous2 = LOW;
        
long debounce = 200;  
 
void setup()
{
  pinMode(inPin0, INPUT);
  pinMode(inPin1, INPUT);
  pinMode(inPin2, INPUT);
 
  pinMode(outPin0, OUTPUT);
  pinMode(outPin1, OUTPUT);
  pinMode(outPin2, OUTPUT);
}
 
void loop()
{
  reading0 = digitalRead(inPin0);
  reading1 = digitalRead(inPin1);
  reading2 = digitalRead(inPin2);
 
 
 
  if (reading0 == HIGH && previous0 == LOW && millis() - time > debounce) {
    if (state0 == HIGH)
      state0 = LOW;
    else
      state0 = HIGH;
      long time0 = millis();
    }  
       if (reading1 == HIGH && previous1 == LOW && millis() - time > debounce) {
    if (state1 == HIGH)
      state1 = LOW;
    else
      state1 = HIGH;
      long time1 = millis();
       }
       
       if (reading2 == HIGH && previous2 == LOW && millis() - time > debounce) {
    if (state2 == HIGH)
      state2 = LOW;
    else
      state2 = HIGH;
      long time2 = millis();
 }  
 
 
  digitalWrite(outPin0, state0);
  digitalWrite(outPin1, state1);
  digitalWrite(outPin2, state2);
 
  delay(400);
}

Re: Lite Arduinobekymmer...

Postat: 18 maj 2014, 00:03:01
av Klas-Kenny
Till att börja med så glömmer du deklarera variablerna i början.. :)

Sen så i argumenten för if-satserna så måste du även kolla "rätt" time-variabel.

så tex.
if (reading0 == HIGH && previous0 == LOW && millis() - time > debounce)

måste bli
if (reading0 == HIGH && previous0 == LOW && millis() - time0 > debounce)

Re: Lite Arduinobekymmer...

Postat: 18 maj 2014, 00:07:06
av ochkl0620
Deklarera?
Okej ska testa igen men vad är egentligen anledningen?
Jag tycket att funktionen är helt OK nu, men är det instabilt på nåt sätt?

Re: Lite Arduinobekymmer...

Postat: 18 maj 2014, 00:09:35
av sodjan
> Till att börja med så glömmer du deklarera variablerna i början..

Får man inget felmeddelande som säger "Undeclared variable..." eller liknande?

Och rent generellt, vad *blir* det för felmeddelanden då det inte kompilerar?

> ...o nu har jag sabbat koden igen

Hur vet du att du har gjort det?
Klagar kompilatorn? Eller fungerar det inte?

Re: Lite Arduinobekymmer...

Postat: 18 maj 2014, 00:17:46
av Klas-Kenny
ochkl0620 skrev:Deklarera?
int time0 = 0; är en deklarering av en variabel. :)
ochkl0620 skrev:Okej ska testa igen men vad är egentligen anledningen?
Jag tycket att funktionen är helt OK nu, men är det instabilt på nåt sätt?
OK, det är mycket möjligt att det duger som det är för dig nu. Problemet är att du inte har någon avstudsning av knapparna nu, men din delay på slutet gör att det inte blir något problem. Tar du bort delayen (delayer är inte bra om du ska ha processorn att göra andra saker samtidigt) så kommer du sannolikt att märka av kontaktstudsarna och ha problem. :)

Re: Lite Arduinobekymmer...

Postat: 18 maj 2014, 00:44:47
av ochkl0620
Nu kompilerar den,
Nu nästa problem, när arduinon startar så lyser det, det ska det inte så jag ändrade något HIGH/LOW men då bara blinkar det. Det gör det även när den tänds automatiskt om man håller in en knapp. Sorry jävla luddiga svar jag ska sova :)

Kod: Markera allt

int inPin0 = 2;        
int inPin1 = 3;  
int inPin2 = 4;  
 
int outPin0 = 5;      
int outPin1 = 6;    
int outPin2 = 7;    
 
int state0 = HIGH;
int reading0;  
int previous0 = LOW;
 
int state1 = HIGH;
int reading1;  
int previous1 = LOW;
 
int state2 = HIGH;
int reading2;  
int previous2 = LOW;
 
long time0 = 0;        
long debounce = 200;  
 
void setup()
{
  pinMode(inPin0, INPUT);
  pinMode(inPin1, INPUT);
  pinMode(inPin2, INPUT);
 
  pinMode(outPin0, OUTPUT);
  pinMode(outPin1, OUTPUT);
  pinMode(outPin2, OUTPUT);
}
 
void loop()
{
  reading0 = digitalRead(inPin0);
  reading1 = digitalRead(inPin1);
  reading2 = digitalRead(inPin2);
 
 
 
  if (reading0 == HIGH && previous0 == LOW && millis() - time0 > debounce) {
    if (state0 == HIGH)
      state0 = LOW;
    else
      state0 = HIGH;
    }  
       if (reading1 == HIGH && previous1 == LOW && millis() - time0 > debounce) {
    if (state1 == HIGH)
      state1 = LOW;
    else
      state1 = HIGH;
       }
       
       if (reading2 == HIGH && previous2 == LOW && millis() - time0 > debounce) {
    if (state2 == HIGH)
      state2 = LOW;
    else
      state2 = HIGH;
 }
    time0 = millis();    
 
 
  digitalWrite(outPin0, state0);
  digitalWrite(outPin1, state1);
  digitalWrite(outPin2, state2);
 
  delay(600);
}

Re: Lite Arduinobekymmer...

Postat: 18 maj 2014, 10:00:56
av Miramithe
roligt problem, nu fick jag lov att ta fram arduino lådan och ska börja koppla lite.

Men när jag sitter och letar på grejjor kom jag att tänka på, hur har du kopplat hårdvaran?