shiftOut error: too many args

whoim
Offline
Зарегистрирован: 03.11.2011

 вот такое выдает IDE, уже мозг сломал.. Какого?? Простейший код затестить регистры, вчера работал - добавил только реакцию на кнопку и вот.. Убирание изменений эффекта не дает..

//Пин подключен к ST_CP входу 74HC595
#define latchPin 8
//Пин подключен к SH_CP входу 74HC595
#define clockPin 12
//Пин подключен к DS входу 74HC595
#define dataPin 11
//кнопка TEST
#define buttonPin A2
//переменные
int wt = 2000;
 
 
void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(13, OUTPUT); //встроенный светодиод
  //активируем кнопку
  pinMode(buttonPin, OUTPUT);
  digitalWrite(buttonPin, HIGH); //подтягиваем внутренний резистор МК
  //start signal
  for (int x=0; x<=4; x++) {
    digitalWrite(13, HIGH);
    delay(50);
    digitalWrite(13, LOW);
    delay(50);
  }
}
 
void loop() {
  if (digitalRead(buttonPin) == LOW) {
    if (wt == 2000)
      wt = 1;
    else
      wt = 2000;
  }
  //вкл-выкл
  go(B11111111);
  digitalWrite(13, HIGH);
  delay(wt);
  go(B00000000);
  delay(wt);
}

void go(byte val){
    // устанавливаем синхронизацию "защелки" на LOW
    digitalWrite(latchPin, LOW);
    // передаем отсчет для вывода 8
    shiftOut(dataPin, clockPin, MSBFIRST, val); 
    // передаем отсчет для вывода 7
    shiftOut(dataPin, clockPin, MSBFIRST, val);
    // передаем отсчет для вывода 6
    shiftOut(dataPin, clockPin, MSBFIRST, val);
    // передаем отсчет для вывода 5
    shiftOut(dataPin, clockPin, MSBFIRST, val);
    // передаем отсчет для вывода 4
    shiftOut(dataPin, clockPin, MSBFIRST, val);
    // передаем отсчет для вывода 3
    shiftOut(dataPin, clockPin, MSBFIRST, val);
    // передаем отсчет для вывода 2 (P-мосфет)
    shiftOut(dataPin, clockPin, MSBFIRST, val);
    // передаем отсчет для вывода 1 (P-мосфет)
    shiftOut(dataPin, clockPin, MSBFIRST, val);
    //"защелкиваем" регистр, тем самым устанавливая значения на выходах
    digitalWrite(latchPin, HIGH);
}

 

whoim
Offline
Зарегистрирован: 03.11.2011

 твойуж мать, те пины которые использует shiftOut нельзя через #define задавать. Только int pin =  ... Вопрос: почему?

step962
Offline
Зарегистрирован: 23.05.2011

 Спешу предположить, что, залавая номер пина через #define, получаем константу типа char, а shiftOut в качестве первого (а также второго) параметра просит int.

М.б. что-то вроде

#define Pin (int)12

сработает?

 

whoim
Offline
Зарегистрирован: 03.11.2011

 О_о наверняка вы правы.. чуть позже проверю, комп с ардуиной разбирать счас буду, шумит больно..

step962
Offline
Зарегистрирован: 23.05.2011

Проверил финт с (int) - не прошло...

whoim
Offline
Зарегистрирован: 03.11.2011

 наверняка этот нюанс еще где нибудь может вылезти, особенно в чужих (не родных) библиотеках. Надо запомнить что вот такой нюанс - он есть )

Evgen
Evgen аватар
Offline
Зарегистрирован: 10.06.2011

В это трудно поверить но, если заменить все "dataPin" и "clockPin" на "datapin" и "clockpin" (т.е. pin написать с маленькой буквы), то код будет работать без ошибок. По крайней мере у меня заработал.

whoim
Offline
Зарегистрирован: 03.11.2011

 о_О WTF?)

буду пробовать)