problema lettura seriale...

ciao a tutti, ho un sensore collegato ad arduino che restituisce dei valori. Con la Serial.write li vedo nel monitor seriale ma avrei bisogno di tali dati su un programma C quindi ho scritto il seguente codice:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int file = open("/dev/tty.usbmodem1429",O_RDWR | O_NOCTTY | O_NDELAY); //Opening device file
long i = 0;
long v=0;

while(1){
read(file, &v, 1);
printf("%d",v);
sleep(1);

}
close(file);

}

ma nulla i dati rispetto al monitor seriale sono completamente diversi .... che posso fare??

ma quel programma C legge dei dati da un file non li memorizza.
Ciao Uwe

cesare9488:
ciao a tutti,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

  • qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
  • qui le pinout delle varie schede by xxxPighi: Pinout
  • qui una serie di link generali utili: Link Utili
    Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
    Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

ok scusate se non avevo seguito bene il regolamento, comunque il codice in C deve soltanto stamparmi i risultati su terminale poi successivamente li salverò in una struttura a lista...ma per ora voglio solo stamparli.
Ri-posto il codice poiché ieri sera ho fatto degli aggiornamenti (minimi)

il codice C è:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
    int file = open("/dev/tty.usbmodem1429",O_RDWR | O_NOCTTY | O_NDELAY);  //Opening device file
    long i = 0;
    long v=0;    
    while(1){
        read(file, &v, 1);
        printf("%lu\n",v);
        //sleep(1);        
    }
    close(file);   
  
}

il codice arduino è:

#include <CapacitiveSensor.h>

CapacitiveSensor capSensor = CapacitiveSensor(4, 2);
 
int threshold = 500;
const int ledPin = 12;
 
void setup()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}
 
void loop()
{
  long sensorValue = capSensor.capacitiveSensor(30);
  //Serial.println(sensorValue);
  Serial.println(sensorValue);
  delay(100);
 
  if (sensorValue > threshold)
  {
    digitalWrite(ledPin, HIGH);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
  delay(10);
}

ecco i risultati del monitor seriale (quelli che voglio):

//quando non tocco il sensore
0
0
0
2
1
0
3
6
0
1
0
2
0
2
2
0
1
0
2
21
28
57

//quando tocco il sensore
1054
1311
1325
1347
1359
1341
1357
1351
1357
1363
1358
1348
1352
1362
1352
1347
1350
1348
1348
1355
1347
25
0
0
0
0
0
2
2
0
0
0
2
0
4

//quando mi avvicino al sensore senza toccarlo
30
31
32
29
33
31
30
31
32
29
30
29
31
28
28
28
28
30
29
32
31
32

questi sono i risultati (sbagliati) ne programma C (sul terminale)

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
48
13
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10

questi sono i risultati (sbagliati) ne programma C (sul terminale)

in ascii i char sono

0 = NULL
poi stampa un 48 che significa valore 0
poi un "return" con 13
e infine ripetuti "new line" con 10 10 10 10 .....

si avevo capito che erano ascii ma il punto e che non so come ottenere i numeri che mi servono...

cesare9488:
si avevo capito che erano ascii ma il punto e che non so come ottenere i numeri che mi servono...

avevo capito che avevi capito, ma non hai capito che in sostanza non stai mandando niente!
Come aprire un file di testo e tenere premuto invio, il cursore si sposta in basso ... ma non scrivi niente, in realtà non li vedi i char ma se lo analizzassi troveresti 13-10