Hi!
I have a problem in understanding the Serial()-Class of C#. I'm trying to send several bytes (1-byte arrays) one after another to the arduino and save them in its own EEPROM.
This works just fine for the first ByteArray, but I don't know how to properly send the following ByteArrays.
C#:
namespace Alarmanlage_test1
{
public partial class Form1 : Form
{
bool[] einstellungen = new bool[8];
bool[] einstellungen1 = new bool[8];
string empfangen;
byte[] senden = new byte[1];
byte[] senden1 = new byte[1];
//int data;
//int empfangen1;
public Form1()
{
InitializeComponent();
}
// VERBINDEN
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM" + numericUpDown1.Value.ToString();
serialPort1.BaudRate = 9600;
//serialPort1.DtrEnable = true;
serialPort1.Open();
button1.Enabled = false;
}
// SENDEN
private void button2_Click(object sender, EventArgs e)
{
if (checkBox1.Checked == true) einstellungen[0] = true;
else einstellungen[0] = false;
if (checkBox2.Checked == true) einstellungen[1] = true;
else einstellungen[1] = false;
if (checkBox3.Checked == true) einstellungen[2] = true;
else einstellungen[2] = false;
if (checkBox4.Checked == true) einstellungen[3] = true;
else einstellungen[3] = false;
if (checkBox5.Checked == true) einstellungen[4] = true;
else einstellungen[4] = false;
if (checkBox6.Checked == true) einstellungen[5] = true;
else einstellungen[5] = false;
if (checkBox7.Checked == true) einstellungen[6] = true;
else einstellungen[6] = false;
if (checkBox8.Checked == true) einstellungen[7] = true;
else einstellungen[7] = false;
new BitArray(einstellungen).CopyTo(senden, 0);
serialPort1.Write(senden, 0, 1);
//empfangen = serialPort1.ReadLine();
if (checkBox1.Checked == true) einstellungen1[0] = true;
else einstellungen1[0] = false;
if (checkBox2.Checked == true) einstellungen1[1] = true;
else einstellungen1[1] = false;
if (checkBox3.Checked == true) einstellungen1[2] = true;
else einstellungen1[2] = false;
if (checkBox4.Checked == true) einstellungen1[3] = true;
else einstellungen1[3] = false;
if (checkBox5.Checked == true) einstellungen1[4] = true;
else einstellungen1[4] = false;
if (checkBox6.Checked == true) einstellungen1[5] = true;
else einstellungen1[5] = false;
if (checkBox7.Checked == true) einstellungen1[6] = true;
else einstellungen1[6] = false;
if (checkBox8.Checked == true) einstellungen1[7] = true;
else einstellungen1[7] = false;
new BitArray(einstellungen1).CopyTo(senden1, 0);
serialPort1.Write(senden1, 0, 1);
}
Arduino:
#include <EEPROM.h>
int inhalt=0;
//byte inhalt[8];
int led = 13;
int eprom, eprom1;
int ok = 0;
void setup()
{
Serial.begin(9600); //öffnet die serielle Datenübertragung mit 9600 bit/s
//EEPROM.write(0, 255);
pinMode(led, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
inhalt = Serial.read(); //liest die Daten
EEPROM.write(0, inhalt);
if(inhalt==EEPROM.read(0))
Serial.println("ok");
inhalt = 0;
Serial.flush();
inhalt = Serial.read(); //liest die Daten
EEPROM.write(1, inhalt);
//if(inhalt==EEPROM.read(1))
//Serial.write("ok\0");
delay(5);
}
eprom = EEPROM.read(0);
//Serial.flush(); //seriellen Puffer löschen
Serial.println("EPROM 0");
Serial.print("inhalt DEC: ");
Serial.println(eprom, DEC);
Serial.print("inhalt BIN: ");
Serial.println(eprom, BIN);
Serial.print("inhalt HEX: ");
Serial.println(eprom, HEX);
eprom1 = EEPROM.read(1);
Serial.println("EPROM 1");
Serial.print("inhalt DEC: ");
Serial.println(eprom1, DEC);
Serial.print("inhalt BIN: ");
Serial.println(eprom1, BIN);
Serial.print("inhalt HEX: ");
Serial.println(eprom1, HEX);
delay(2000);
}
Sometimes both eeprom (0) and eeprom (1) get the value of the first packet...
I suppose that I should use a protocol (UART).
Thanks in advance! And sorry for the German content in the code ![]()