Arduino Yun - Inviare output script in C da Linino a Arduino

Ciao a tutti,

sto scegliendo la scheda Arduino per il mio progetto e sto pian piano arrivando alla conclusione che probabilmente la più adatta alle mie esigenze potrebbe essere Arduino Yun.

In pratica io ho un script in C che devo poter eseguire su Linux ( il classico $./script.sh ) e l'output di questo script, che saranno delle variabili int o float, devo poterle inviare alla parte Arduino, per poter controllare degli attuatori.

Leggendo in giro mi sembra di aver capito che è una cosa fattibile, ma vorrei avere il parere di gente che ne sa più di me e magari avere un esempio pratico di come poter procedere.

Grazie a tutti.

è piu un problema software questo...

ad ogni modo si si può fare, ricordando però che sulla seriale viaggiano solo stringhe, ovvero il numero in 45 sulla seriale equivale ad una stringa ( se fai 45+ 2 = 452 e non 47!!!) quindi quando su arduino ricevi il la stringa 234 dovarai convertirla in numero.

ci son gia le funzioni che lo fanno (AOI o roba del genere ora mi sfugge).

pardon ATOI (la memoria orami è andarata)

0v3rl04d:
Leggendo in giro mi sembra di aver capito che è una cosa fattibile, ma vorrei avere il parere di gente che ne sa più di me e magari avere un esempio pratico di come poter procedere.

Sulla Yun la parte Arduino dialoga con la parte Linux tramite seriale, questo vuol dire che il tuo script (da quando i .sh si scrivono in C ?) deve essere in grado di dialogare con la TTy, la vedo dura farlo con uno script bash, è meglio se usi Python.

astrobeed:

0v3rl04d:
Leggendo in giro mi sembra di aver capito che è una cosa fattibile, ma vorrei avere il parere di gente che ne sa più di me e magari avere un esempio pratico di come poter procedere.

Sulla Yun la parte Arduino dialoga con la parte Linux tramite seriale, questo vuol dire che il tuo script (da quando i .sh si scrivono in C ?) deve essere in grado di dialogare con la TTy, la vedo dura farlo con uno script bash, è meglio se usi Python.

concordo, con python è davvero molto semplice :slight_smile:

un piccolo esempio può essere questo

void loop()
{
char Stringa[20]={0};
int Indice = 0;
int Index = 0;
int Rif1 = 0;
int Rif2 = 0;
int Rif3 = 0;
int Direzione = 0;
int Velocita = 0;
int Passi = 0;
bool Flag = false;

if (Serial.available())
{
	char Buffer = Serial.read();
	Stringa[Indice++] = Buffer;
	Index = Indice;
	if (Stringa[Indice-1] =='@')
	{
		Flag = true;
		Serial.println(Stringa);
	}
}
if (Flag == true)
{
	Indice = 0;
	for (int l; l< Index;l++)
	{
		if(Stringa[l] == '&')
			Rif1 = l;
		if (Stringa[l] == '#')
			Rif2 = l;
		if (Stringa[l] == '@')
			Rif3 = l;

		Direzione = Conv(Stringa);
		Serial.println (Direzione);
	}
}
}

int Conv(char *array, int R1=0, int R2=3)
{
	int Cont = 0;
	int Numero = 0;
	char Ax[6]= {0};
	for (; R1 < R2; R1++)
		Ax[Cont++] = array[R1];
	Numero = atoi(Ax);
	return Numero;
}

dalla seriale arriva una stringa per esempio 45&123#999@

il programma scinde la stringa in 45 123 999 e li converte in numeri.. forse si upò fare meglio (nazi sicuro) ma era un esperimento.
la stringa viene generata in python

astrobeed:

0v3rl04d:
Leggendo in giro mi sembra di aver capito che è una cosa fattibile, ma vorrei avere il parere di gente che ne sa più di me e magari avere un esempio pratico di come poter procedere.

Sulla Yun la parte Arduino dialoga con la parte Linux tramite seriale, questo vuol dire che il tuo script (da quando i .sh si scrivono in C ?) deve essere in grado di dialogare con la TTy, la vedo dura farlo con uno script bash, è meglio se usi Python.

Non esistono script C in .sh XD Svista :slight_smile:

Cmq lo script deve essere in C preferibilmente perchè convertirlo in Python potrebbe essere un problema a meno che non uso Python per la comunicazione e basta.

Martinix:
un piccolo esempio può essere questo

void loop()

{
char Stringa[20]={0};
int Indice = 0;
int Index = 0;
int Rif1 = 0;
int Rif2 = 0;
int Rif3 = 0;
int Direzione = 0;
int Velocita = 0;
int Passi = 0;
bool Flag = false;

if (Serial.available())
{
char Buffer = Serial.read();
Stringa[Indice++] = Buffer;
Index = Indice;
if (Stringa[Indice-1] =='@')
{
Flag = true;
Serial.println(Stringa);
}
}
if (Flag == true)
{
Indice = 0;
for (int l; l< Index;l++)
{
if(Stringa[l] == '&')
Rif1 = l;
if (Stringa[l] == '#')
Rif2 = l;
if (Stringa[l] == '@')
Rif3 = l;

	Direzione = Conv(Stringa);
	Serial.println (Direzione);
}

}
}

int Conv(char *array, int R1=0, int R2=3)
{
int Cont = 0;
int Numero = 0;
char Ax[6]= {0};
for (; R1 < R2; R1++)
Ax[Cont++] = array[R1];
Numero = atoi(Ax);
return Numero;
}




dalla seriale arriva una stringa per esempio 45&123#999@

il programma scinde la stringa in 45 123 999 e li converte in numeri.. forse si upò fare meglio (nazi sicuro) ma era un esperimento.
la stringa viene generata in python

L'importante è che si possa fare la cosa.

Quindi in questo modo riesco a mandare l'output a controller arduino... Appena ho tempo mi guardo il codice che mi hai scritto e commento.

Per ora grazie mille

0v3rl04d:
Non esistono script C in .sh XD Svista :slight_smile:

Cmq lo script deve essere in C preferibilmente

Errare humanum est, perseverare autem diabolicum. :slight_smile:
Non esistono script in C, al limite esistono interpreti per il C, comunque molto limitati, vanno installati appositamente e il programma, perché non è uno script, viene aggiunto come opzione al comando di avvio dell'interprete, una cosa del tipo "./Cinterprete mioprogramma.c"
In tutti i casi sullla Yun non puoi installare un inteprete C, puoi solo usare il classico script bash, programmi Python e programmi compilati con gcc che va preventivamente installato, in modo abbastanza difficoltoso, sulla Yun, oppure devi fare cross compiling gcc su un pc Linux.

astrobeed:

0v3rl04d:
Non esistono script C in .sh XD Svista :slight_smile:

Cmq lo script deve essere in C preferibilmente

Errare humanum est, perseverare autem diabolicum. :slight_smile:
Non esistono script in C, al limite esistono interpreti per il C, comunque molto limitati, vanno installati appositamente e il programma, perché non è uno script, viene aggiunto come opzione al comando di avvio dell'interprete, una cosa del tipo "./Cinterprete mioprogramma.c"
In tutti i casi sullla Yun non puoi installare un inteprete C, puoi solo usare il classico script bash, programmi Python e programmi compilati con gcc che va preventivamente installato, in modo abbastanza difficoltoso, sulla Yun, oppure devi fare cross compiling gcc su un pc Linux.

Cross-compiling tramite ssh?

0v3rl04d:
Cross-compiling tramite ssh?

Il cross compiling lo fai dove ti pare, poi trasferisci l'eseguibile sulla yun tramite ssh.

astrobeed:

0v3rl04d:
Cross-compiling tramite ssh?

Il cross compiling lo fai dove ti pare, poi trasferisci l'eseguibile sulla yun tramite ssh.

Perfetto, tanto la compilazione fatta una volta dovrà essere fatta raramente.

Ottimo!