Cześć kupiłem se płytke prototypową wlutowałem do niej MCP2025 500 i teraz mam odbieranie danych, Wysyłać danych nie wysyła nawet jak mu daje że ma podgłośnić to się nic nie dzieje nie wiem jak wzbudzić MCP2025 do możliwości wysyłania wiadomości, ogólnie Pin 2 MCP mam podłączony do Pinu 3 Arduino i tak sie staram go wzbudzić
Lecz to nic nie pomaga dalej chyba jest uśpiony bo się nie da wysyłać proszę was o pomoc.
Zdjecie pokazane od drugiej strony po lewej jest od pinu 8 po prawej o pinu 1
Kod
Zdjęcia Proto:
Kod:
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
Lecz to nic nie pomaga dalej chyba jest uśpiony bo się nie da wysyłać proszę was o pomoc.
Zdjecie pokazane od drugiej strony po lewej jest od pinu 8 po prawej o pinu 1
Kod
Kod:
#include <SoftwareSerial.h>
SoftwareSerial IBusSerial(11,10); // RX, TX for IBus
//Lbus = Ibus from Car
//Vss = Ground
//Vbb = +12V do Pin LWAKE - Rezystor 220ohm
// Pins we use for MCP2004
const int faultPin = 6; //FAULT
const int cspin = 8; //CS
const int disablerx = 2; //CS
boolean read_byte = false;
byte readbuffer[64];
int i;
int buffer_index = 0;
int buffer_max = 64; // 64 default
int cksum;
long lastrx;
long lasttx;
char *Buffer = new char[buffer_max];
boolean byteSTATE = false;
int EventID = 0; // Event number (for case select)
byte volup[6] = {0x50,0x4,0x68,0x32,0x11,0x1F}; // Steering wheel Volume Up
//char volume_up[]="\x50\x04\x68\x32\x11\x1F";
byte voldown[6] = { 0x50 , 0x4 , 0x68 , 0x32, 0x10 , 0x1E }; // Steering wheel Volume Down
//50 4 68 32 11 1F
//50 4 68 32 10 1E
byte pressmode[6] = { 0xF0, 0x4, 0x68, 0x48, 0x23, 0xF7 };
byte pressmenu[6] = {0x68,0x4,0x3B,0x46,0x1,0x10}; //Menu Klikniecie
byte showmenu[6] = {0x68,0x4,0x3B,0x46,0xC,0x1D}; //Menu Pokazanie
byte releasemode[6] = { 0xF0, 0x4, 0x68, 0x48, 0xA3, 0x77 };
//MENU 68 4 3B 46 1 10
////68 4 3B 46 C 1D
byte ibussucks[22] = {
0x68, 0x12, 0x3B, 0x23, 0x62, 0x10, 0x49, 0x42, 0x55,
0x53, 0x53, 0x55, 0x43, 0x4b, 0x53, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x40
};
int messagelen;
void setup(){
// initialize buffer array to 0's
memset(readbuffer, 0, sizeof(readbuffer));
// Open serial communications to host (PC) and wait for port to open:
Serial.begin(9600, SERIAL_8E1);
Serial.println("IBus Debugging begins");
// set the data rate for the SoftwareSerial port
IBusSerial.begin(9600);
// Set high to enable TX on MCP2025
pinMode(cspin, OUTPUT);
digitalWrite(cspin, HIGH);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
//pinMode(faultPin, OUTPUT);
//digitalWrite(faultPin, HIGH);
lastrx = millis();
lasttx = millis();
}
void loop(){
delayMicroseconds(3000);
if (Serial.available()){
Serial.println("Got Input");
handleMessage(Serial.read());
}
lasttx = millis();
if ((millis() - lastrx) > 15) {
memset(readbuffer, 0, sizeof(readbuffer));
buffer_index = 0;
read_byte = false;
buffer_max = 64;
lastrx = millis();
return;
}
if (IBusSerial.available()) {
readbuffer[buffer_index] = IBusSerial.read();
read_byte = true;
}
if (read_byte){
if (buffer_index == 1){
buffer_max = readbuffer[buffer_index] + 2;
cksum = readbuffer[0] ^ readbuffer[1];
} else if ((buffer_index > 1 ) && (buffer_index < buffer_max)){
cksum = cksum ^ readbuffer[buffer_index];
}
}
// Reset buffer_index when it is buffer_max - 1.
if (buffer_index == (buffer_max - 1)) {
// if ((readbuffer[0] == 0x68) || (readbuffer[2] == 0x68)) {
if (cksum == 0) {
// Serial.print("Good message: ");
// Serial.print(millis());
// Serial.print(": ");
for (i = 0; i < buffer_max; i++){
Serial.print(readbuffer[i],HEX);
}
if(memcmp(readbuffer, volup, 6) == 0 ){ Serial.println("Wcisniety guzik z głośnosci"); }
}else {
Serial.print("Invalid message. cksum: ");
Serial.println(cksum, HEX);
for (i = 0; i < buffer_max; i++){
Serial.print(readbuffer[i], HEX);
Serial.print(" ");
}
}
Serial.println();
// }
// Empty the buffer
memset(readbuffer, 0, sizeof(readbuffer));
buffer_index = 0;
read_byte = false;
lastrx = millis();
}
// Increment index if we put something into the buffer
if (read_byte == true){
read_byte = false;
buffer_index++;
lastrx = millis();
}
}
void handleMessage(byte messageType){
// OP Was setting faultPin HIGH to write?
//IBusSerial.flush();
//digitalWrite(8, HIGH);
// Serial.println(messageType);
pinMode(11, INPUT);
digitalWrite(11, LOW); // don't pull up
switch (messageType){
case 0x70: // p for vol up
Serial.println("Sending vol up.");
sendMessage(volup);
break;
case 0x6E: // n for vol down
Serial.println("Sending vol down.");
sendMessage(voldown);
break;
case 0x42: // B for IBus Sucks
Serial.println("Sending IBus Sucks.");
sendMessage(ibussucks);
break;
case 0x6D: // m for mode
Serial.println(" Mode.");
sendMessage(pressmode);
delay(150);
sendMessage(releasemode);
break;
}
//digitalWrite(8, LOW);
}
void sendMessage(byte message_data[]){
digitalWrite(11, LOW);
for (int i=0; i <= sizeof(message_data); i++){
digitalWrite(10, message_data[i]);
IBusSerial.write(message_data[i]);
}
}
Zdjęcia Proto: