[RISOLTO] Arduino, Comunicazione seriale con PC e C#

Ciao a tutti, sono un nuovo utente di questo forum e da poco ho iniziato a sperimentare qualcosa di più avanzato con Arduino. Proprio questo mio sperimentare, mi ha portato ad un problema che non riesco a risolvere:
Sto cercando di far comunicare tramite porta seriale aggiuntiva (oltre a quella usata per trasmettere gli Sketch) il mio PC con Arduino Uno R3. Ho creato un connettore RS232 da collegare al PC con il seguente pinout:

Quindi ho creato questa associazione di collegamenti: RS pin 2 -> Arduino D10, RS pin 3 -> Arduino D11, RS pin 5 -> Arduino GND.

In C# ho scritto:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;


namespace TAG_Simulator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            string[] serialPorts = SerialPort.GetPortNames();

            foreach (string comPort in serialPorts)
                COMbox.Items.Add(comPort);
         }
        private void button1_Click(object sender, EventArgs e)
        {
            string selectedCOM = COMbox.Text;
            SerialPort COMconn = new SerialPort(selectedCOM, 9600);
            COMconn.Encoding = Encoding.ASCII;
            try
            {
                COMconn.Open();
            }
            catch 
            {
                Environment.Exit(1);
            }
            COMconn.Write("3");
            COMconn.Write("2");
            COMconn.Close();
         }
    }
}

mentre per Arduino ho scritto:

#include <SoftwareSerial.h>
SoftwareSerial com1(10, 11);
void setup()
{
  Serial.begin(9600);
  com1.begin(9600);
}
void loop()
{
  {
      Serial.println(com1.read());
      delay(1000);
  }
}

Ora come risultato sul monitor seriale dovrei avere:

-1 -> Nessuna TX
-1
-1
-1
51 -> 3 in codifica Ascii
0 -> Terminatore di stringa
50 -> 2 in codifica Ascii
0 -> Terminatore di stringa
-1
-1
-1

Invece come risultato ho:

-1
-1
-1
-1
102
0
51
0
-1
-1
-1

Come mai? Ho provato in tutti i modi a risolvere il problema ma proprio non riesco...
Per favore aiutatemi!!!! =(

Arduino UNO lavora con livelli TTL, la porta RS232 del PC NO !!!

Fai attenzione perché puoi anche fare danni ... ci devi mettere di mezzo un convertitore di livelli, es. MAX232 ... :slight_smile:

Guglielmo

Fai quello che dice Guglielmo.

Per la spiegazione:
La seriale di Arduino ha i livelli 0V e 5V come L e H.
RS232 ha come Livelli H: -3V a -25V e L da +3V a +25V.
Come protocollo come spedire i dati sono in massima compatibili.
Ciao Uwe

Cioè, come detto sopra, potresti anche trovarti +25V da rs232 a piedini di Arduino... frittatona =(

I 25V sono il valore massimo amesso sulle entrate dei convertitori RS232.
È molto piú probabile di trovare +/-12V o +/-9V (tramite duplicatore tensione prodotti dai 5V dal MAX232).
Comunque anche queste tensioni bastano per daneggiare le entrate di Arduino.

Ciao Uwe

Beh, frittatina comunque? :grin:

@uwefed, da pc ho sempre pensato uscissero o 9v o 12v. Domanda, dove potrei trovare volt maggiori? macchine industriali?

Ragazzi grazie mille del vostro aiuto! Spero veramente di non aver bruciato il microcontrollore! :fearful: :fearful:
Comunque non si dovrebbe essere bruciato perché ho provato a caricare altri Sketch e funzionano senza problemi!
La mia solita fretta ha fatto sì che andassi a cercare subito il pinout della rs232 senza andare a controllare le specifiche del protocollo di comunicazione. In ogni caso ho creato questo progetto per poter emulare un lettore tag RFID; e prima di spendere 30€ per l'innovation ID12, volevo verificare che il programma funzionasse correttamente... vabbè proverò con il MAX232 come mi ha consigliato Guglielmo.

Comunque siete grandi e grazie ancora a tutti! Scrivo nel titolo [RISOLTO]
Ciao!

P.S.: Se si dovesse essere bruciato il micro, basterebbe semplicemente sostituirlo con un ATmega vergine a cui andrei a caricargli il bootloader. Giusto?

nid69ita:
Beh, frittatina comunque? :grin:

@uwefed, da pc ho sempre pensato uscissero o 9v o 12v. Domanda, dove potrei trovare volt maggiori? macchine industriali?

In un PC le tensioni sono generalmente -12V, -5V, +5V e +12V.