Pagina 1 di 1

errore stray"\226" jn program

MessaggioInviato: 2 nov 2017, 20:24
da papa10
In questo codice alla riga: for(int=i;n>0;n-) nella compilazione mi da' l'errore Stray "\226" in program
Codice: Seleziona tutto
#include <Servo.h>
Servo myservo;
int var1 = 0;
int i = 0;
int cifre [8];
int pos1 = 0;
int num = 0;
void setup()
{
Serial.begin(9600);
myservo.attach(9);
myservo.write(0);
}
void loop()
{
if (Serial.available() == 0)
{
if (var1 == 1)
{
pos1 = Make_int();
myservo.write(pos1);
i = 0;
var1 = 0;
}
}
else
{
cifre [i] = Serial.read() – 48;
i++;
var1 = 1;
delay(2);
}
}
int Make_int()
{
num = 0;
for (int n = i; n > 0; n–)
{
num = num + cifre [n-1]*pow(10,(i-n));
}
return num;
}

Potete aiutarmi.Grazie

Re: errore stray"\226" jn program

MessaggioInviato: 2 nov 2017, 21:17
da xyz
Prima di tutto quando si riporta un errore di un compilatore C/C++ includere sempre il messaggio completo, compreso il numero di linea.

Il linguaggio C/C++ accetta solo come operatori i caratteri ASCII e non Unicode, quindi per indicare il meno si usa il carettere '-' e non questo '–'. Lo so sembrano uguali ma il primo carattere è ASCII:

Codice: Seleziona tutto
U+002D HYPHEN-MINUS
UTF-8: 2d UTF-16BE: 002d Decimal: &#45; Octal: \055
-
Category: Pd (Punctuation, Dash)
Unicode block: 0000..007F; Basic Latin
Bidi: ES (European Number Separator)

il secondo simile è Unicode:

Codice: Seleziona tutto
U+2013 EN DASH
UTF-8: e2 80 93 UTF-16BE: 2013 Decimal: &#8211; Octal: \020023

Category: Pd (Punctuation, Dash)
Unicode block: 2000..206F; General Punctuation
Bidi: ON (Other Neutrals)


Esiste anche un altro errore, l'operatore decremento sono due caratteri meno in sequenza e non uno.

Quindi la patch di correzione è la seguente:

Codice: Seleziona tutto
cifre [i] = Serial.read() – 48;

in

Codice: Seleziona tutto
cifre [i] = Serial.read() - 48;


e

Codice: Seleziona tutto
for (int n = i; n > 0; n–)


in

Codice: Seleziona tutto
for (int n = i; n > 0; n--)


Aggiungo che in C/C++ come notazione le funzioni non hanno caratteri maiuscoli, quindi il nome "Make_int" stona.

L'uso della funzione "pow" è assolutamente da evitare con i numeri interi è lentissima e costosissima in termini di spazio di codice occupato e poi non funziona come sperato, gli interi nel GCC per gli AVR sono a 16 bit, non può rappresentare un numero a 8 cifre decimali. Consiglio di studiare meglio il C/C++ e API di Arduino, l'uso di variabili globali come passaggio di parametri è in generale da evitare.