Lite Arduinobekymmer...

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

Inlägg av ochkl0620 »

Det sa mig inget ;)
Lade delay 20 på slutet, det vart bättre
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Lite Arduinobekymmer...

Inlägg 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.
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

Inlägg 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);
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

Inlägg 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 .....
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Lite Arduinobekymmer...

Inlägg 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);
}
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

Inlägg av ochkl0620 »

Tack!
Nu ser det vettigare ut och funkar vettigare!
Hmm time....

Kod: Markera allt

long time = 0;        
long debounce = 200; 
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

Inlägg 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...
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Lite Arduinobekymmer...

Inlägg 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.
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

Inlägg 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);
}
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Lite Arduinobekymmer...

Inlägg 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)
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

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

Re: Lite Arduinobekymmer...

Inlägg 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?
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Lite Arduinobekymmer...

Inlägg 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. :)
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Lite Arduinobekymmer...

Inlägg 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);
}
Miramithe
Inlägg: 1423
Blev medlem: 21 januari 2013, 17:45:10
Ort: Borlänge

Re: Lite Arduinobekymmer...

Inlägg 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?
Skriv svar