Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

errore stray"\226" jn program

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] errore stray"\226" jn program

Messaggioda Foto Utentepapa10 » 2 nov 2017, 20:24

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
Avatar utente
Foto Utentepapa10
71 1 3 4
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 20 ott 2011, 17:11

3
voti

[2] Re: errore stray"\226" jn program

Messaggioda Foto Utentexyz » 2 nov 2017, 21:17

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.
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti