Показать сообщение отдельно
Старый 16.09.2017, 02:07   #6
Chois
Новый Пользователь
 
Регистрация: 25.02.2015
Регион: Беларусь
Машина: VW Golf IV
Сообщений: 15
Chois is on a distinguished road
По умолчанию

получилось принять "запрос" и в зависимости от значения ответить. Но нужно еще раз отправить сообщение мастеру а как "дернуть" пин СRQ еще раз не знаю, да и время когда он от минуса опять в плюс переходит не то что нужно. на картинках видно, что поднимается в 5вольт на середине сообщения. delay не подходит чтобы управлять CRQ, так как вешает отправку между addres и data. millis не работает (не умею им пользоваться).
Подскажите как быть? куда копать?
собственно скетч

Код:
#include <Wire.h>
const byte SlaveDeviceId = 24;
const int CRQ = 8; //"прижимает" к минусу
enum {
  CMD_TAPE = 19,
  CMD_TUNNER = 25
     };
char command;

void setup()
{
  command = 0;
  Wire.begin(SlaveDeviceId); // Start I²C bus as a slave
  Wire.onReceive(receiveCallback); //ждем данных от мастера, функция возвращает int число байт данных
  Wire.onRequest(requestCallback);
  pinMode(CRQ, OUTPUT); //пин CRQ как вывод
}

void loop(){}

void receiveCallback(int numbytes)
{
  command = Wire.read (); //запоминаем команду на запрос
  digitalWrite(CRQ, LOW); 
}

void requestCallback()
{
 switch (command)
    {
      case CMD_TAPE: //значение на шине при нажатии Tape
      byte buffer[5]; //первое сообщение
      buffer[0] = 4;
      buffer[1] = 32;
      buffer[2] = 4;
      buffer[3] = 3;
      buffer[4] = 39;
      Wire.write(buffer, 5);
      break;
      {
        digitalWrite (CRQ, LOW); // не работает
      }
       byte buffer1[5]; //второе сообщение - не отправляется
      buffer1[0] = 4;
      buffer1[1] = 32;
      buffer1[2] = 5;
      buffer1[3] = 3;
      buffer1[4] = 40;
      Wire.write(buffer1, 5);
      break;
      
      case CMD_TUNNER: // значение на шине при нажатии Tunner
      byte buffer2[5]; //первый байт сообщения
      buffer2[0] = 4;
      buffer2[1] = 32;
      buffer2[2] = 5;
      buffer2[3] = 3;
      buffer2[4] = 40;
      Wire.write(buffer2, 5);
      break;
      }
    
    digitalWrite(CRQ, HIGH); //хз нужно ли, но без него бесконечный цикл 
}
Миниатюры
Нажмите на изображение для увеличения
Название: not corect.png
Просмотров: 777
Размер:	47.7 Кб
ID:	48136   Нажмите на изображение для увеличения
Название: correct.png
Просмотров: 756
Размер:	47.0 Кб
ID:	48137  
Chois вне форума   Ответить с цитированием