Komm mit Array nicht klar.

Hallo

gegeben ist folgender Code:

// demo: set_mask_filter_send
// this demo will show you how to use mask and filter

#include <mcp_can.h>
#include <SPI.h>

MCP_CAN CAN(10);                                      // Set CS to pin 10

unsigned char Flag_Recv = 0;
unsigned char len = 0;
unsigned char buf[8];
char str[20];
int giveout;

unsigned long previousMillis = 0;
const long interval = 1000;

void setup()
{
    Serial.begin(115200);

START_INIT:

    if(CAN_OK == CAN.begin(CAN_500KBPS))                   // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(100);
        goto START_INIT;
    }
}


int b1 = 1;
int b2 = 0;
int b3 = 0;
int b4 = 0;
int b5 = 0;
int b6 = 0;
int b7 = 0;
int b8 = 0;
int wai = 0;
void loop()
{
  
if (wai ==0)
{
  delay(2000);
  wai = 1;

        b1 = 'p';
        b2=15;
        b3=0x0;
        b4=12;
        b5=0x0;
        b6=0x0;
        b7=0x0;
        b8=0x0;
        unsigned char stmp[8] = {b1, b2, b3, b4, b5, b6, b7, b8};
        memset(stmp, 0x42E, sizeof(stmp));                 // set id to send data buff
        CAN.sendMsgBuf(0x42E, 0, sizeof(stmp), stmp);

        Serial.println("Sende Daten:");
        Serial.println("Adresse: 0x42E");
        Serial.println(b1, HEX);
        Serial.println(b2, HEX);
        Serial.println(b3, HEX);
        Serial.println(b4, HEX);
        Serial.println(b5, HEX);
        Serial.println(b6, HEX);
        Serial.println(b7, HEX);
        Serial.println(b8, HEX);
        Serial.println("--------------------");

    delay(2000);
  
        b1 = 'x';
        b2=0x0;
        b3=0x0;
        b4=0x0;
        b5=0x0;
        b6=0x0;
        b7=0x0;
        b8=0x0;
        stmp[8] = {b1, b2, b3, b4, b5, b6, b7, b8};  //Diese Zeile wird angemeckert!! Fehler unter dem Code im Quote
        memset(stmp, 0x42E, sizeof(stmp));                 // set id to send data buff
        CAN.sendMsgBuf(0x42E, 0, sizeof(stmp), stmp);

        Serial.println("Sende Daten:");
        Serial.println("Adresse: 0x42E");
        Serial.println(b1, HEX);
        Serial.println(b2, HEX);
        Serial.println(b3, HEX);
        Serial.println(b4, HEX);
        Serial.println(b5, HEX);
        Serial.println(b6, HEX);
        Serial.println(b7, HEX);
        Serial.println(b8, HEX);
        Serial.println("--------------------");
        
      }        


        
        if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf
        
        for(int i = 0; i<len; i++)    // print the data
        {
            //Serial.print("0x");
            //Serial.print(buf[i], HEX);
            //Serial.print("\t");
            if(buf[i] != 0)
            {
              giveout = 1;  
            }
        }
        if(giveout == 1)
        {
            Serial.println("\r\n------------------------------------------------------------------");
            Serial.print("Get Data From id: ");
            Serial.println(CAN.getCanId());
            for(int i = 0; i<len; i++)
            {
                Serial.print("0x");
                Serial.print(buf[i], HEX);
                Serial.print("\t");
            }
            giveout = 0;
        }
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

die markierte Zeile wird beim kompilieren angemeckert:

cansketchSEND.ino: In function ‘void loop()’:
cansketchSEND:89: error: expected primary-expression before ‘{’ token
cansketchSEND:89: error: expected `;’ before ‘{’ token

ich möchte doch eigentlich nur neue Werte in das Array schreiben, was mach ich falsch?

Und ja die Funktion das die CANMessage nur 1x gesendet wird ist so gewünscht, bisschen komisch gelöst aber es ist nur eine Spielerei :wink: Die Grundfunktion ist auch vorhanden nur eben das Array überschreiben funktioniert irgendwie nicht.

mfg

Chris

goto ist Schrott

{ } Klammern gehen nur für die Initalisierung eines Arrays bei dessen Deklaration. Nicht für die Zuweisung danach

Schreib dir eine Funktion der das Array und die Werte als Parameter übergibst:

void fillArray(unsigned char* buffer, byte b1, byte b2, ....)
{
   buffer[0] = b1;
   buffer[1] = b2;
   ....
}