foutmelding tijdens compileren

IDE gerelateerde berichten
Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

foutmelding tijdens compileren

Berichtdoor Grunch » 20 Mei 2014, 08:11

Hallo,

Tijdens het compileren begint de IDE te hikken bij dit stukje: 'stringpos = morsestr.charAt (int t);'
De melding die ik krijg: 45: error: expected primary-expression before 'int'
Ik ben ben een newbie en weet absoluut niet wat er mis is met dit stukje code, is er iemand die mij een eindje op weg kan helpen?

GrtZ Evert

Advertisement

Berichten: 55
Geregistreerd: 20 Feb 2014, 11:37

Re: foutmelding tijdens compileren

Berichtdoor Dennis485 » 20 Mei 2014, 12:11

Zonder complete code kunnen we weinig! :shock:

Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Re: foutmelding tijdens compileren

Berichtdoor Grunch » 20 Mei 2014, 18:40

Sorry, Bij deze staat ie. :-)


Ik ben nog een newbie en heb eigenlijk alleen ervaring met Sharp MZ800 basic uit een lang vervlogen tijd.
C gaat me langzaam aan wel lukken, maar het gaat helaas wel moeizaam.
Het probleem zit 'm in de stringmanupilatie charAt(), dat leek mij net zoiets als mid$() in basic.
Het programma heb ik nog niet kunnen uploaden om te testen, dus ik weet ook niet of ie doet wat ie moet doen.
Als die foutmelding maar verholpen kan worden.

Hopelijk kun je me een eindje op weg helpen.

GrTz Evert

Code: Alles selecteren



// E.Kaatman 2014
// pocketgrunch@live.nl

// pinnummer

int ledPin1 = 2;

// intervaltijd (lengte van punt of streep)
const unsigned long interval1 = 150; // lengte punt
const unsigned long interval2 = 300; // lengte streep
const unsigned long interval3 = 300; // lengte spatie
const unsigned long interval4 = 600; // lengte gap

// set timer
unsigned long timer = 0;

// led status (ipv een knipperroutine kan er een andere routine aangeroepen worden.
int ledState1 = LOW;
int t = 1;

String morsestr = " . . . - - - . . .# ";
String stringpos = " ";

int lengte = morsestr.length();



void setup() {
// set the digital pin als output
pinMode(ledPin1, OUTPUT);


// starttijd gelijk aan de waarde van millis()

timer = millis();


}

void loop()
{

// is de looptijd groter of gelijk aan interval voer dan de routine uit

stringpos = morsestr.charAt(int t);

if (stringpos = "." ) {
if (( millis() - timer) <= interval1) {
digitalWrite(ledPin1, HIGH);
}

t = t + 1;
}

if (stringpos = "-" ) {
if (( millis() - timer) <= interval2) {
digitalWrite(ledPin1, HIGH);
}

t = t + 1;
}

if (stringpos = " " ) {
if (( millis() - timer) <= interval3) {
digitalWrite(ledPin1, LOW);
}

t = t + 1;
}

if (stringpos = "#" ) {
if (( millis() - timer) <= interval4) {
digitalWrite(ledPin1, LOW);
}

t = t + 1;
}

timer = millis ();
if (t > lengte) {
t = 1;
}


}

[/code]

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: foutmelding tijdens compileren

Berichtdoor nicoverduin » 20 Mei 2014, 19:02

Buiten de vrij inefficiënte code (String is niet fe meest geweldig zuinige object) is je interpretatie van een string en char niet helemaal hoe het zou moeten zijn:
Een string is een aantal karakters afgesloten met een '\0'(zero terminator)
Een char is een enkele teken passend in 1 byte.
Jij vraag om een char en probeert deze in een string te zetten als ontvangst. En dat keurt hij af. Ik heb ff voor het voorbeeld een variabele char x in jouw code gezet. Nu loopt hij wel. Wel kan het nog stukken beter. als je een enkele variabele (eigenlijk zou ik zo snel mogelijk String afleren) test, zou je aan een switch-case constructie (ff googelen) kunnen denken. Kan je prima en overzichtelijk afhankelijk van het teken (=karakter) de juiste acties uitvoeren.
Neem ook notie dat een char tussen enkele quotes staat itt een string die tussen dubbele quotes staat.
Verder graag je code tussen "[code ]" en "[/code]" zetten. Dan kan een ander de code nog enigzins vriendelijk lezen. Kan handig zijn als je hulp zoekt.
Code: Alles selecteren
// E.Kaatman 2014
// pocketgrunch@live.nl

// pinnummer

int ledPin1 = 2;

// intervaltijd (lengte van punt of streep)
const unsigned long interval1 = 150; // lengte punt
const unsigned long interval2 = 300; // lengte streep
const unsigned long interval3 = 300; // lengte spatie
const unsigned long interval4 = 600; // lengte gap

// set timer
unsigned long timer = 0;

// led status (ipv een knipperroutine kan er een andere routine aangeroepen worden.
int ledState1 = LOW;
int t = 1;

String morsestr = " . . . - - - . . .# ";
String stringpos = " ";

int lengte = morsestr.length();

void setup() {
// set the digital pin als output
   pinMode(ledPin1, OUTPUT);

// starttijd gelijk aan de waarde van millis()

   timer = millis();

}

void loop() {

// is de looptijd groter of gelijk aan interval voer dan de routine uit

//***********************************************************************************************

   char x = morsestr.charAt(1);

//***********************************************************************************************
   if (x == '.') {
      if ((millis() - timer) <= interval1) {
         digitalWrite(ledPin1, HIGH);
      }

      t = t + 1;
   }

   if (x == '-') {
      if ((millis() - timer) <= interval2) {
         digitalWrite(ledPin1, HIGH);
      }

      t = t + 1;
   }

   if (x == ' ') {
      if ((millis() - timer) <= interval3) {
         digitalWrite(ledPin1, LOW);
      }

      t = t + 1;
   }

   if (x == '#') {
      if ((millis() - timer) <= interval4) {
         digitalWrite(ledPin1, LOW);
      }

      t = t + 1;
   }

   timer = millis();
   if (t > lengte) {
      t = 1;
   }

}

en terwijl ik het antwoord plaatszie ik nog wat.
In C test je af met '==' Als je een enkele '=' gebruikt dan wordt de variabele eerst gevuld met de waarde. En als deze ongelijk is aan 0 dan is de test altijd WAAR.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Re: foutmelding tijdens compileren

Berichtdoor Grunch » 20 Mei 2014, 19:29

Dankjewel

Ik zal proberen BASIC lichtelijk uit te bannen :-)
Ff kijken of ik het met switch/case kan verwezenlijken.
De code had ik tussen [bron][\bron] geplaatst, maar er is iets fout gegaan denk ik.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: foutmelding tijdens compileren

Berichtdoor shooter » 23 Mei 2014, 11:57

evert je moet even helemaal opnieuw beginnen.

het de setup is prima, maar de loop rammelt behoorlijk, de timers lopen allemaal door elkaar en de t wordt telkens opgeteld dan is deze heel snel klaar met tellen.
begin eens
als char ='.' dan is delay 150 etc.
als ....
dat schrijf je in een subroutine
vervolgens doe je een delay voor deze tijd.
dan zet je de led uit en wacht je weer 150

als je met time wilt werken moet je in de gaten houden dat de loop gewoon doorloopt, dat is dus ook de reden om het zo te doen.

en gewoon lekker bezig zijn.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Re: foutmelding tijdens compileren

Berichtdoor Grunch » 23 Mei 2014, 23:53

Hallo Paul,

Hartelijk dank voor je reactie, zoals ik je op het event al meedeelde ik ben een newbie, maar heb er wel schik in.
Bij de sketch wilde ik eigenlijk geen delay () gebruiken, voor mij is dat momenteel een uitdaging.

GrTz Evert

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: foutmelding tijdens compileren

Berichtdoor shooter » 24 Mei 2014, 09:26

onderstaand staat in arduino.cc

http://arduino.cc/en/Hacking/LibraryTutorial

Code: Alles selecteren
int pin = 13;

void setup()
{
  pinMode(pin, OUTPUT);
}

void loop()
{
  dot(); dot(); dot();
  dash(); dash(); dash();
  dot(); dot(); dot();
  delay(3000);
}

void dot()
{
  digitalWrite(pin, HIGH);
  delay(250);
  digitalWrite(pin, LOW);
  delay(250);
}

void dash()
{
  digitalWrite(pin, HIGH);
  delay(1000);
  digitalWrite(pin, LOW);
  delay(250);
}


hierboven is dus delay gebruikt!!
maar wie houd je tegen om hiervoor een eigen routine te schrijven met millis()

bij delay stopt het programma en je zult dus iets moeten bedenken (ja ik weet het antwoord) dat jouw programma stappen gaat maken als de timer is gedaan.
dat kan met een grafcet, een seqeuntial function of een state machine.

ik hoop dat ik je genoeg huiswerk heb gegeven.
en ja wil best helpen, maar zelf leren is toch wel zo veel beter.
paul deelen
shooter@home.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: foutmelding tijdens compileren

Berichtdoor shooter » 26 Mei 2014, 22:06

zo de vrouw zat naar een bevalling te kijken op tv, en ik had nog een display liggen tm1638





Code: Alles selecteren
#include <TM1638.h>
TM1638 module(8, 9, 7);
// define a module on data pin 8, clock pin 9 and strobe pin 7

String tekst = " 123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG ";

String tekststuk="      ";
int startstring = 0;
int endstring = 7;
int t=0;
//morse

struct t_mtab {
  char c, pat;
}
;

struct t_mtab morsetab[] = {
  {
    '.', 106    }
  ,
  {
    ',', 115    }
  ,
  {
    '?', 76    }
  ,
  {
    '/', 41    }
  ,
  {
    'A', 6    }
  ,
  {
    'B', 17    }
  ,
  {
    'C', 21    }
  ,
  {
    'D', 9    }
  ,
  {
    'E', 2    }
  ,
  {
    'F', 20    }
  ,
  {
    'G', 11    }
  ,
  {
    'H', 16    }
  ,
  {
    'I', 4    }
  ,
  {
    'J', 30    }
  ,
  {
    'K', 13    }
  ,
  {
    'L', 18    }
  ,
  {
    'M', 7    }
  ,
  {
    'N', 5    }
  ,
  {
    'O', 15    }
  ,
  {
    'P', 22    }
  ,
  {
    'Q', 27    }
  ,
  {
    'R', 10    }
  ,
  {
    'S', 8    }
  ,
  {
    'T', 3    }
  ,
  {
    'U', 12    }
  ,
  {
    'V', 24    }
  ,
  {
    'W', 14    }
  ,
  {
    'X', 25    }
  ,
  {
    'Y', 29    }
  ,
  {
    'Z', 19    }
  ,
  {
    '1', 62    }
  ,
  {
    '2', 60    }
  ,
  {
    '3', 56    }
  ,
  {
    '4', 48    }
  ,
  {
    '5', 32    }
  ,
  {
    '6', 33    }
  ,
  {
    '7', 35    }
  ,
  {
    '8', 39    }
  ,
  {
    '9', 47    }
  ,
  {
    '0', 63    }
}
;

#define N_MORSE  (sizeof(morsetab)/sizeof(morsetab[0]))

#define SPEED  (13)
#define DOTLEN  (1200/SPEED)
#define DASHLEN  (3*(1200/SPEED))


int LEDpin = 13 ;
int sensorPin = 0;
void
dash()
{
  digitalWrite(LEDpin, HIGH) ;
  module.setLED(1,7);
  module.setLED(1,6);
  module.setLED(1,5);
  delay(DASHLEN);
  digitalWrite(LEDpin, LOW) ;
  module.setLED(0,7);
  module.setLED(0,6);
  module.setLED(0,5);
  delay(DOTLEN) ;
}

void
dit()
{
  digitalWrite(LEDpin, HIGH) ;
  module.setLED(2,7);
  module.setLED(2,6);
  module.setLED(2,5);
  delay(DOTLEN);
  digitalWrite(LEDpin, LOW) ;
  module.setLED(0,7);
  module.setLED(0,6);
  module.setLED(0,5);
  delay(DOTLEN);
}

void
send(char c)
{
  int i ;
  for (t=0 ; t<=7;t++)
      {
        module.setLED(0,t);
      }
  if (c == ' ') {
    Serial.print(c) ;
    delay(7*DOTLEN) ;
    return ;
  }
  for (i=0; i<N_MORSE; i++) {
    if (morsetab[i].c == c) {
      unsigned char p = morsetab[i].pat ;

      // show on tm1638

      Serial.print(morsetab[i].c) ;
int x=0;
      while (p != 1) {
        if (p & 1){
          dash() ;
          module.setLED(1,x);
          Serial.print("-");
        }
        else
        {           
          dit() ;
          module.setLED(2,x);
          Serial.print (".");
        }
        p = p / 2 ;
x++;
      }
      delay(2*DOTLEN) ;
     
      return ;
        }
 
    }

  Serial.print("?") ;
}

void sendmsg(char *str)

{
  while (*str)
    send(*str++) ;
  Serial.println(*str);
}



void setup() {
  Serial.begin(9600);
}
void loop()
{

  if (startstring > tekst.length()){
    startstring=0;
  }
  endstring=startstring+8;

  tekststuk = tekst.substring(startstring,endstring);
  char* letter ;

  letter[0] = tekststuk.charAt(0);

  sendmsg (letter);
  module.setDisplayToString (tekststuk) ;

  delay(1000);
  startstring++;

}




paul deelen
shooter@home.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten