Vart i koden skriver jag fel?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Vart i koden skriver jag fel?

Inlägg av fosfor »

Tjo!

Jag har dessa två kodsnuttar jag inte får att fungera i min längre kodsnutt som styr hur motorn reagerar på knapptryckning. :humm:
Tanken med denna bit kod är att den ska overrida en nedktryckt knapp när något passerar en viss sensor, dvs stoppa en motor från att åka för långt.
Här är de två olika varianterna jag försökt använda mig av. :doubt: :shock:

Den

Kod: Markera allt

if(stopsensor1Pin == 1);               // Ska stoppa motorn vid HIGH  
  digitalWrite(controlPin2, LOW);
Eller den

Kod: Markera allt

  val = digitalRead(stopsensor1Pin);         // Ska stoppa motorn vid HIGH
  if (val == HIGH) {                   
  digitalWrite(controlPin2, LOW);

Här är den längrekodbiten som fungerar bra, men som jag alltså skulle vilja använda med någon av ovanskrivna koder. :shock:

Kod: Markera allt

//  ---- MOTORNS VOID LOOP  - KNAPPSTYRNINGEN TILL MOTORERNA ----

// intest 1 går UPP
// intest 2 går NER
// stopsensor1Pin heter stoppsensorn

{

// ---- UPP ----
  val = digitalRead(intest1Pin);         // UPP - Läser input värde
  if (val == HIGH) {                     // Checkar om knappen trycks
  digitalWrite(controlPin1, HIGH);       
  digitalWrite(controlPin2, LOW);

// Dessa 3 rader visar text när nedåtknapp trycks NED ------
  lcd.setCursor(0, 1);
lcd.print("Up");
delay(50);
  }


// ---- NER ----
  else {
  val = digitalRead(intest2Pin);         // NER - Läser input värde
  if (val == HIGH) {                     // Checkar om knappen trycks
  digitalWrite(controlPin1, LOW);       
  digitalWrite(controlPin2, HIGH);

// Dessa 3 rader visar text när nedåtknapp trycks NED ------
    lcd.setCursor(0, 1);
lcd.print("Down");
delay(50);
  }


// Dessa två rader stoppar motorn när man släpper knappen
  else {
  digitalWrite(controlPin1, LOW);        
  digitalWrite(controlPin2, LOW);       
  }

  
}
}
}

Tack på förhand!
Senast redigerad av fosfor 19 januari 2018, 14:54:04, redigerad totalt 5 gånger.
Användarvisningsbild
adent
Inlägg: 4094
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av adent »

Hej!

Vill du vara snäll och editera ditt förra inlägg och lägg koden innanför code-taggar. Du hittar knappen ovanför textrutan bredvid "B i u Quote" så står det Code. Lägg in koden innanför dem så blir det mycket mycket lättare!

MVH: Mikael
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av fosfor »

Ah ok SÅ!
Användarvisningsbild
bit96
Inlägg: 2492
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Vart i koden skriver jag fel?

Inlägg av bit96 »

Jag har inte läst hela koden men ett semikolon efter if() får nästa rad att alltid utförs, vilket nog inte var tänkt.
Använd alltid klamrar.

if(stopsensor1Pin == 1); // SENSOR - Läser input värde

Edit: Jag han svara innan du skrivit om med code-taggar
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av fosfor »

Löste sig!

Detta stoppade motorn när sensorn täcktes.
Den stoppar den då bara från att köra ner, men man kan köra tillbaka den. Vilket är meningen.

Kod: Markera allt

  {
  val = digitalRead(stopsensor1Pin);         // Ska stoppa mototn
  if (val == HIGH) {                     
  digitalWrite(controlPin2, LOW);
  }
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Vart i koden skriver jag fel?

Inlägg av Icecap »

Igen gör du fel.

Rad 1: if(stopsensor1Pin == 1); // Ska stoppa motorn vid HIGH
Rad 2: digitalWrite(controlPin2, LOW);

Rad 1 sluter med en semikolon varför den inte har någon verkan på rad 2.

Semikolon avslutar ett kommando/statement. Hade du tagit bort semikolonet i Rad 1 hade det fungerat som tänkt.
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 32629
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av HUGGBÄVERN »

Hur ser resten av koden ut?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45175
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av TomasL »

Och vilket system samt utvecklingsmiljö?
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av fosfor »

Icecap:

Om jag gör som du föreslår, dvs tar bort semikolonet, så står det bara "expected ; before digitalWrite.
Har testat som du föreslår, och olika varianter, det passerar inte kontrollen utan felmeddelande om jag inte har med semikolonet.
:humm:
Användarvisningsbild
ffredrik
Inlägg: 340
Blev medlem: 20 oktober 2009, 17:52:18
Ort: Göinge

Re: Vart i koden skriver jag fel?

Inlägg av ffredrik »

Du kan i såfall ta bort if-satsen med ; på slutet, den raden är helt meningslös.
Det finns uppenbarligen ett annat syntaktiskt fel i koden någonstans.
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av fosfor »

ffredrik:

Testade ta bort if satsen nu, blir samma fel då också.
Jag skulle gärna åtgärda fel, så att koden blir mer korrekt.
Men här är koden iaf, som trots alla fel som påpekats, fungerar precis som det är tänkt.

Kod: Markera allt

//  ---- MOTORNS VOID LOOP  - KNAPPSTYRNINGEN TILL MOTORERNA ----

// intest 1 går UPP
// intest 2 går NER
// stopsensor1Pin heter stoppsensorn

{

// ---- UPP ----
  val = digitalRead(intest1Pin);         // UPP - Läser input värde
  if (val == HIGH) {                     // Checkar om knappen trycks
  digitalWrite(controlPin1, HIGH);       
  digitalWrite(controlPin2, LOW);

// Dessa 3 rader visar text när nedåtknapp trycks NED - delay ställer flimret men slöar också ner visningen av pulsräkningen ------
  lcd.setCursor(0, 1);
lcd.print("Up");
delay(50);
  }


// ---- NER ----
  else {
  val = digitalRead(intest2Pin);         // NER - Läser input värde
  if (val == HIGH) {                     // Checkar om knappen trycks
  digitalWrite(controlPin1, LOW);       
  digitalWrite(controlPin2, HIGH);

// Detta är sensorn som, om täcks, hindrar motorn från att åka ner
  {
  val = digitalRead(stopsensor1Pin);         // Sensorn som stoppar motorn
  if (val == HIGH) {                     
  digitalWrite(controlPin2, LOW);
  }


// Dessa 3 rader visar text när nedåtknapp trycks NED - delay ställer flimret men slöar också ner visningen av pulsräkningen ------
    lcd.setCursor(0, 1);
lcd.print("Down");
delay(50);
  }


// Dessa två rader stoppar motorn när man släpper knappen
  }  else {
  digitalWrite(controlPin1, LOW);        
  digitalWrite(controlPin2, LOW);       
  }

  
}
}
}
SeniorLemuren
Inlägg: 7779
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Vart i koden skriver jag fel?

Inlägg av SeniorLemuren »

Ett stort fel i denna kod är ju att du skriver till LCD med en delay varje varv som loopen snurrar. Du skall bara skriva till displayen en gång så snart du ändrar någon status.

Gör skrivningen till LCD som egna procedurer som du anropar första varvet i loopen när du trycker in en knapp, sedan anropar du en procedur en gång i loopen som talar om att ingen knapp är intryckt när du släpper knappen.
Användarvisningsbild
bit96
Inlägg: 2492
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Vart i koden skriver jag fel?

Inlägg av bit96 »

Det kan inte vara hela koden eftersom du har 7 vänsterklamrar och 8 högerklamrar.
Din indentering är också svår att följa.

Fel med klammer-matchning kan ibland ge svårtydbara felmeddelanden, te.x. att ett semikolon fattas.

Om klamrarna kommer ur fas kan det också hända att vissa deklarationer inte syns där dom skall vara synliga eller tvärtom.
SeniorLemuren
Inlägg: 7779
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Vart i koden skriver jag fel?

Inlägg av SeniorLemuren »

SeniorLemuren skrev:Ett stort fel i denna kod är ju att du skriver till LCD med en delay varje varv som loopen snurrar. Du skall bara skriva till displayen en gång så snart du ändrar någon status.

Gör skrivningen till LCD som egna procedurer som du anropar första varvet i loopen när du trycker in en knapp, sedan anropar du en procedur en gång i loopen som talar om att ingen knapp är intryckt när du släpper knappen.
En annan grej är att du skapar nya trådar hela tiden för som gäller samma projekt. Det är många gånger lättare att hjälpa till om du samlar alla problem i samma tråd.

Dessa trådar verkar ju hänga ihop.
Vart i koden skriver jag fel?
Arduinokod för motor på/av med knapp.
Textsnutt innan loop.
Arduino - Knappstyrning av motor med Encoder disc & sensorer
Användarvisningsbild
fosfor
Inlägg: 453
Blev medlem: 13 februari 2013, 05:43:15
Kontakt:

Re: Vart i koden skriver jag fel?

Inlägg av fosfor »

SeniorLemuren:
Det är samma projekt, men olika problem. Därav att jag skapat olika trådar.
Ny tråd har kommit till efter att ett problem har blivit (eller iaf just då vid tillfället såg ut att vara) löst.

Er övriga & SeniorLemuren:
Men men, det blir lite svettigt. Nu blir det att försöka städa upp och snygga till koden utefter era observationer.
Det verkar uppenbart att en del 'issues' har tillkommit genom kodskrivandets gång som vore bäst att ta tag i redan nu innan jag fortsätter.

Min nästa fråga, ang. LCD'n. Hur "anropar" jag den separat? Såsom påpekades här i tråden. :humm:
Samt vilka övriga problem med koden bör prioriteras? :shock:
Tack på förhand

För info:
I nuläget fungerar den så att den kan köras upp, ner och när den slår i botten (tar i en sensor) så stannar den.
På sin 2x16 LCD visar den pulser som passerat om den kört upp/ner, samt den visar texten 'Up' eller 'Down', samt texten 'Stop' när sensorn sätter stopp för nerfärden.
Ett problem jag spontant skulle vilja lösa är att texten Up Down och Stop flimrar när de visas, vilket jag inte vet hur man löser. :roll:
Skriv svar