Помогите с кодом
- Войдите на сайт для отправки комментариев
Пнд, 20/07/2015 - 11:14
#include <math.h>
#define FIRST_LED_PIN 2
#define LED_COUNT 10
void setup()
{
for (int i = 0; i < LED_COUNT; ++i)
pinMode(i + FIRST_LED_PIN, OUTPUT);
}
void loop()
{
float voltage = analogRead(A0) * 5.0 / 1023.0;
float temperature = 1.0 / (log(voltage / 2.5) / 4300.0 +
1.0 / 298.0) - 273.0;
for (int i = 0; i < LED_COUNT; ++i) {
boolean enableSegment = (temperature >= 20 + i);
digitalWrite(i + FIRST_LED_PIN, enableSegment);
}
delay(2000);
#define FIRST_LED_PIN 2
#define LAST_LED_PIN 11
void setup()
{
for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
pinMode(pin, OUTPUT);
}
void loop()
{
unsigned long int ms = millis();
int pin = FIRST_LED_PIN + (ms / 120) % 10;
digitalWrite(pin, HIGH);
delay(10);
digitalWrite(pin, LOW);
}
выдает ошибку :a function-definition is not allowed here before '{' token
Doramirs, во первых код нужно вставлять в сообщение по правилам форума Во вторых у вас в одной куче смешаны два разных скетча.Отделите одно от другого, и как положено вставьте.
#include <math.h> #define FIRST_LED_PIN 2 #define LED_COUNT 10 void setup() { for (int i = 0; i < LED_COUNT; ++i) pinMode(i + FIRST_LED_PIN, OUTPUT); } void loop() { float voltage = analogRead(A0) * 5.0 / 1023.0; float temperature = 1.0 / (log(voltage / 2.5) / 4300.0 + 1.0 / 298.0) - 273.0; for (int i = 0; i < LED_COUNT; ++i) { boolean enableSegment = (temperature >= 20 + i); digitalWrite(i + FIRST_LED_PIN, enableSegment); } }#define FIRST_LED_PIN 2 #define LAST_LED_PIN 11 void setup() { for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin) pinMode(pin, OUTPUT); } void loop() { unsigned long int ms = millis(); int pin = FIRST_LED_PIN + (ms / 120) % 10; digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); }нужно соединить 2 скетча в один чтобы в ночале работал первый скетч через некоторое время второй
нужно соединить 2 скетча в один чтобы в ночале работал первый скетч через некоторое время второй
Понятие "некоторое время" неприменимо к программированию. Нужно точно представлять себе по каким условиям должна начаться обработка другого фрагмента, и по каким условиям закончится и вернуться к первому.
10 секунд
условие возврата к первому когда второй проработал 10 секунд
Doramirs, каждые 10 секунд меняется флаг n, а по флагу запускается первая или вторая функция.
#include <math.h> #define FIRST_LED_PIN 2 #define LED_COUNT 10 unsigned long prevmillis; boolean n=true;; //флаг очереди void setup(){ for (int i = 0; i < LED_COUNT; ++i) pinMode(i + FIRST_LED_PIN, OUTPUT); } void loop() { if (millis()-prevmillis>10000) { prevmillis=millis(); n=!n; } //каждые 10 сек менять флаг n? first_prog() : second_prog(); } // если n "true" -перейти в функцию first_prog() иначе на second_prog() void first_prog(){ float voltage = analogRead(A0) * 5.0 / 1023.0; float temperature = 1.0 / (log(voltage / 2.5) / 4300.0 + 1.0 / 298.0) - 273.0; for (int i = 0; i < LED_COUNT; ++i) { boolean enableSegment = (temperature >= 20 + i); digitalWrite(i + FIRST_LED_PIN, enableSegment); } } void second_prog(){ int pin = FIRST_LED_PIN + (millis() / 120) % 10; digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); }Большое СПАСИБО
Здравствуйте товарищи знатоки!!!
Подскажите пожалуйста, насчет одного непонятного момента. У меня в коде считываются прерывания (rpmcount) допусоим ее значение 500. Ну когда я ее вывожу на дисплей(я делаю линию типо графика, и числовое значение) нокиа 5510 (китай) то она отображается несовсем коректно. А точнее заместь постоянно показывать число 500, оно каждые 100мс плюсует это число, и так постоянно циклично так сказать перенасыщает переменную, потом идет в минуса!!! я так думаю чтото связано с буфером дисплея, или с переменными. Подскажите пожалуйста! Пытался сам решить, не одну неделю голову сушил!!! Вот код!
#include <LCD5110_Graph.h> LCD5110 myGLCD(7,6,5,3,4); extern uint8_t SmallFont[]; int button = 9; int fix = 0; int pin = 2; volatile int rpmcount = 0; unsigned long lastmillis = 0; int x,y,z=0; void setup() { myGLCD.InitLCD(); myGLCD.setFont(SmallFont); randomSeed(analogRead(7)); myGLCD.setContrast(50); pinMode(button,INPUT); attachInterrupt(0, rpm_fan, FALLING); } void loop(){ myGLCD.setFont(SmallFont); myGLCD.printNumI(rpmcount, CENTER, 0); myGLCD.update(); delay(100); y = map(rpmcount, 0, 600, 47, 0); myGLCD.drawLine(x, z, x+1, y); myGLCD.update(); z=y; x++; if(x>=83){x=0;myGLCD.clrScr();} if (millis() - lastmillis == 100){ /*Uptade every one second, this will be equal to reading frecuency (Hz).*/ detachInterrupt(0); //Disable interrupt when calculating rpmcount = 0; // Restart the RPM counter lastmillis = millis(); // Uptade lasmillis attachInterrupt(0, rpm_fan, FALLING); //enable interrupt } } void rpm_fan(){ /* this code will be executed every time the interrupt 0 (pin2) gets low.*/ rpmcount++; }Коментарии к коду не совсем корректны!
xOreoNx, из режущего глаза -посмотрите 41 строку. Во первых нельзя там ставить ==, т.к. велика вероятность, что проскочет данное значение, и не сработает. Нужно ставить .. lastmillis > 100 Во вторых в комментарии написано каждую секунду, а стоит 100ms.
Да! насчет коментов там была секунда, я менял на 100мс, ну если там поставить 1000мс оно будет плюсоватся каждую секунду.
А нахрена прерывания дергаешь?
А нахрена прерывания дергаешь?
Нравиться ему, вот и дергает. Но код забавный. Счетчик от прерываний. А основной код изолентой примотан. :) он походу и выполняться не успевает. Ибо весь в прерываниях.
Спасибо за изоленту я электрик!)))) Так может подскажите?
И к стати! Код выполняется, проблема только в одном ( више описанном).
Спасибо за изоленту я электрик!)))) Так может подскажите?
А я дальнобойщик. Что тут подсказывать? Фигня какая-то. Есть предложение как и к предыдущим подобным просьбам. Взять листик бумаги (можно рулон туалетной) и карандаши и нарисовать на нем алгоритм вашей программы.
47, 48 строчки там можно убирать они не нужны.
уже убрал.
И к стати! Код выполняется, проблема только в одном ( више описанном).
Да ваще не вопрос. Ввполняется, пользуйтесь тогда на здоровье.
Маяк работает, проблема только в одном, лампочку сперли.
Ладно спасибо и за такой совет!)
Про рулон я не пошутил. Удобно разматывай и дорисовывай.