foutmelding tijdens compileren
9 berichten
• Pagina 1 van 1
foutmelding tijdens compileren
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
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
Re: foutmelding tijdens compileren
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
// 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]
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]
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: foutmelding tijdens compileren
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.
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.
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.
Re: foutmelding tijdens compileren
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.
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.
Re: foutmelding tijdens compileren
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.
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
shooter@home.nl
Re: foutmelding tijdens compileren
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
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
Re: foutmelding tijdens compileren
onderstaand staat in arduino.cc
http://arduino.cc/en/Hacking/LibraryTutorial
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.
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
shooter@home.nl
Re: foutmelding tijdens compileren
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
shooter@home.nl
9 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 29 gasten