shiftOut error: too many args
- Войдите на сайт для отправки комментариев
Сб, 21/01/2012 - 01:58
вот такое выдает 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);
}
твойуж мать, те пины которые использует shiftOut нельзя через #define задавать. Только int pin = ... Вопрос: почему?
Спешу предположить, что, залавая номер пина через #define, получаем константу типа char, а shiftOut в качестве первого (а также второго) параметра просит int.
М.б. что-то вроде
#define Pin (int)12
сработает?
О_о наверняка вы правы.. чуть позже проверю, комп с ардуиной разбирать счас буду, шумит больно..
Проверил финт с (int) - не прошло...
наверняка этот нюанс еще где нибудь может вылезти, особенно в чужих (не родных) библиотеках. Надо запомнить что вот такой нюанс - он есть )
В это трудно поверить но, если заменить все "dataPin" и "clockPin" на "datapin" и "clockpin" (т.е. pin написать с маленькой буквы), то код будет работать без ошибок. По крайней мере у меня заработал.
о_О WTF?)
буду пробовать)