Buongiorno a tutti,
eccomi qui con un altro dei miei quesiti.
Ho la necessità di collegare un dispositivo con un microprocessore dotato di una porta Uart, che vorrei collegare ad arduino.
Allego il codice per leggere i dati dal micro, fornito dal progettista del dispositivo:
#include <SoftwareSerial.h>
#define rxPin 3
#define txPin 4
SoftwareSerial softSerial = SoftwareSerial(rxPin, txPin);
//
void setup() {
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
softSerial.begin(9600);
Serial.begin(19200);
while (!softSerial) {
; // wait for serial port to connect. Needed for native USB
}
}
//--------------------------------
int CalcChannel(unsigned char ui8type, unsigned char ui8Msb, unsigned char ui8Lsb) {
int ui8Temp;
if (ui8type==0){
ui8Temp=ui8Msb*256+ui8Lsb;
}
if (ui8type==1) {
ui8Temp=ui8Msb*256+ui8Lsb;
ui8Temp=ui8Temp-2048;
}
return (ui8Temp);
}
//--------------------------------
int ui8Buffer[8][2];
int ui16Idx=0;
int ui8CheckSum=0;
//--------------------------------
void loop() {
// send data only when you receive data:
if (softSerial.available() > 0) {
if (softSerial.read()==0x55) {
ui8Buffer[0][0]=0x55;
ui8Buffer[0][1]=0;
do {
if (softSerial.available() > 0) {
ui16Idx++;
ui8Buffer[ui16Idx][0] = softSerial.read();
ui8Buffer[ui16Idx][1] = ui16Idx;
}
}while (ui16Idx<=8);
ui16Idx=0;
ui8CheckSum=0;
//Calcolo del check sum per vedere
for (ui16Idx=0;ui16Idx<7;ui16Idx++){
ui8CheckSum = ui8CheckSum + ui8Buffer[ui16Idx][0];
}
ui16Idx=0;
if (((unsigned char)ui8CheckSum)==ui8Buffer[7][0]){
// Serial.println("checksum calcolato:");
// Serial.println((unsigned char)ui8CheckSum);
// Serial.println("Pacchetto ricevuto:");
//
// for (ui16Idx=0;ui16Idx<8;ui16Idx++){ //stampa il pacchetto ricevuto in maniera ricorsiva
// Serial.println(ui8Buffer[ui16Idx][0]);
// }
Serial.println("Lettura del primo canale:");
if (ui8Buffer[1][0]==0) Serial.println("ph:");
if (ui8Buffer[1][0]==1) Serial.println("rx:");
Serial.println(CalcChannel((unsigned char) ui8Buffer[1][0], (unsigned char) ui8Buffer[2][0], (unsigned char) ui8Buffer[3][0])); //calcola il valore
//
Serial.println("Lettura del secondo canale:");
if (ui8Buffer[4][0]==0) Serial.println("ph:");
if (ui8Buffer[4][0]==1)Serial.println("rx:");
Serial.println(CalcChannel((unsigned char) ui8Buffer[4][0], (unsigned char) ui8Buffer[5][0], (unsigned char) ui8Buffer[6][0])); //calcola il valore
//
}
else {
Serial.println("checksum error:");
}
ui16Idx=0;
}
}
//delay(1000);
}
Vorrei che arduino leggesse i dati allo stesso modo di un valore analogico. Mi spiego meglio.
Nel codice per il mio progetto attualmente vengono utilizzati due analog.read per leggere i valori analogici su due pin.
Ora vorrei che, invece della lettura analogica, venga utilizzata la porta seriale.
In che modo posso "dire" ad arduino di utilizzare i dati seriali invece dei pin analogici?
Posso avere un esempio di come manipolare questo tipo di dati?
Se dovesse esserci necessità posso anche far cambiare il codice del Pic.
Spero in un vostro aiuto.
Grazie Fabio